私の友人は、スーパーストアの経営者が、 分散キャッシュシステム 電子商取引アプリケーションのパフォーマンスを向上させるため。 しかし、この分散キャッシュが次のような機能を提供するかどうかはわかりませんでした。 SQLでデータを検索する. その理由は、オンライン ストアの機能のほとんどがデータの検索に依存しており、アプリケーションを書き直す余裕がないためです。 そして、すべての SQL クエリが依然としてデータベースに送信される場合、分散キャッシュを使用する目的が無効になります。
同様の状況に悩まされており、すべてのパフォーマンスの問題を迅速かつ確実に解決する必要がある場合は、 NCache まさにあなたが必要としているものです。 さらに詳しく知りたい方は読み続けてください。
NCache 詳細 ダウンロード NCache エディションの比較
データストアとしてのキャッシュ
データをキャッシュに保存して高速に使用できるようにしても、私の友人が説明した問題は依然として残っています。 顧客は、在庫を照会して目的の製品を検索したいと考えています。 さて、あなた(と彼)に朗報があります。 NCache SQL が完全に装備されているため、 キャッシュ内のデータをクエリする データベースの場合と同じ方法です。
図1: NCache SQLクエリ負荷の処理
待って…待ってください! これですべての問題が突然解決されるのではありませんか? 図 1 に示すように、製品カタログ全体がキャッシュに保存されているため、それに SQL クエリを実装し、結果をアプリケーションに直接返すことができます。これにより、データブルへの総移動量が大幅に削減されます。 NCache 拡張性と信頼性が高く、一度に数十万の顧客を処理できます。
SQLクエリ入力 NCache – 簡単な例
顧客が頻繁に使用する製品の製品 ID を持っているとします。以下のクエリに注意してください。これは (データベースではなく) キャッシュで実行され、結果がアプリケーションに送信されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Pre-condition: Cache is already connected // Items are already present in the cache. // Provide Fully Qualified Name (FQN) of your custom class string query = "SELECT ProductName FROM FQN.Product WHERE ProductID > ?"; /// Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("ProductID",50000); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductName"); // Perform operations } } |
問題は、キャッシュ内のこれらの SQL クエリは非常に役立ちますが、結局のところキャッシュ内で動作するということです。 それで…
キャッシュ内で検索されるデータの種類は何ですか?
NCache には、データが格納される XNUMX つの大きなカテゴリがあります。 これらはトランザクション データと参照データです。
トランザクションデータ
トランザクション データは、要求を満たすために単一の単位として扱われるデータです。 これらはクエリ結果としてデータベースから収集され、キャッシュに保存されます。 たとえば、データベースのテーブルが与えられた場合、顧客は 5 ドルより安いすべての製品を要求し、キャッシュに保存された結果の出力がトランザクション データになります。
図 2: データベース内の製品テーブル
1 |
SELECT * FROM Products WHERE UnitPrice <= 5.00 |
図 3: キャッシュに保存されたクエリ結果
トランザクション データは通常、処理のために一時的に保存されます。 頻繁に更新され、古いデータや不要なデータは破棄されます。 SQL は単一オブジェクトには必要なく、代わりにオブジェクト データに対してキー検索が使用されます。 トランザクション データはすでにクエリ結果データです。 したがって、SQL クエリを実行できません。
参照データ
NCache 大量のデータをキャッシュに長期間保存できます。 この種のデータは参照データと呼ばれます。 参照データは構造化されたリレーショナル形式で保存され、定期的に更新され、データベースと同期されます。 これらの理由により、分散キャッシュ内のこのデータに対して SQL クエリを実装することが可能です。
の実装で NCache、顧客が行うクエリのほとんどはキャッシュ内で実行され、結果はすぐに返されます。 これにより、キャッシュへのアクセス回数が大幅に減少し、データベースへの過剰なアクセスがなくなり、すべてのパフォーマンスのボトルネックが解消されます。
NCache 詳細 SQL 構文 NCache NCache SQLドキュメント
の SQL 機能 NCache
NCache の広い範囲を提供します SQL関数 キャッシュ内のデータを検索および削除できる演算子も含まれます。 によって提供される SQL 拡張機能に注意してください。 NCache は、挿入コマンドと更新コマンドをサポートしていません。 これらのコマンドはデータベースに直接実装されます。
が提供する独自のインメモリ SQL 機能のいくつかを見てみましょう。 NCache.
SQL ワイルドカードの使用 NCache
NCache SQL 関数で XNUMX つの異なるワイルドカードを使用した柔軟な検索を提供します。 LIKE。 これらは '?' そして '*'
「?」 前に検索する必要がある XNUMX 文字がある場合に使用されます。 たとえば、「シャー?」。 これによりキャッシュが検索され、share、sharp、またはその他の同様の結果が得られる可能性があります。
「*」は、前に XNUMX 文字から任意の数の文字が検索される場合に使用されます。 たとえば、「cha*」は、char、character、chair、またはその他の同様の結果を与える可能性があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT * FROM FQN.Product WHERE ProductName LIKE ? AND Category LIKE ?"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("ProductName", "Cha?"); queryCommand.Parameters.Add("Category", "Edib*"); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductID"); // Perform operations } } |
SQL 集計関数の使用 NCache
集計関数 SQL で複数の値に対して算術演算を実行し、単一の値を返すために使用されます。 NCache これらの集計関数を使用して、キャッシュされたデータ項目に対する操作を実行します。
でサポートされている集計関数の一部 NCache には次の値があります:
合計、カウント、平均、最小、最大
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT COUNT(*) FROM FQN.Products WHERE UnitPrice > 5"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set int result = reader.GetValue(1); } } |
SQL GROUP BY の使用 NCache
NCache を使用して、指定した基準に従ってデータをグループ化できます。 グループ化 関数。 ただし、注意点があります。group-by は、上記の集計関数のいずれかを含むクエリでのみ使用できます。 例えば
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT Category, COUNT(*) FROM FQN.Products WHERE UnitPrice > 5 Group By Category"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set int result = reader.GetValue(1); string category = reader.GetValue(0); } } |
理由 NCache .NET アプリには良い選択です
スーパーストアの問題に戻りましょう。 の実装に伴い、 NCache 製品カタログを保存し、それに SQL クエリを実装することで、アプリケーションがクエリを作成してデータを取得するためにデータベースにアクセスする必要がある高価な回数が大幅に削減されました。
その他のメリットをいくつかご紹介します NCache これに付随するもの:
- 追加のコードはありません: ほとんどのクエリはキャッシュ内で作成されるため、データベースにアクセスするたびに追加のコードを記述する必要はありません。
- 100% ネイティブの .NET と .NET core: NCache 100% ネイティブの .NET であり、 .NET core 分散キャッシュを使用すると、他の分散キャッシュやデータストアとは異なり、データを信頼できる形式で保存管理およびクエリできるようになります。
- 帯域幅コストの削減: クエリはキャッシュされたデータに対して実行され、アプリケーションに返されるため、時間と帯域幅のコストが大幅に節約されます。
- 非常に高速で信頼性の高い: NCache は、.NET および .NET core アプリケーション。 をチェックしてください NCache ベンチマーク XNUMX 秒あたり XNUMX 万トランザクション。
ご覧のとおり、完全にwin-winの状況です。
〜へ向かう NCache 分散キャッシュ データ ストアで SQL を使用する方法について詳しく説明するドキュメント。