アプリケーションサーバーで生成されたクエリと引き換えに、データベースから応答を得るために永遠に待たなければならない状況に誰もが遭遇します。 ビジネスに不可欠なアプリケーションの場合、応答の待ち時間と遅延は許容できません。 ここで、最適化されたキャッシング ソリューションの必要性が生じます。
キャッシュは一般的にキーと値のストアに関連付けられていますが、 NCache オブジェクトの非キー属性に関するデータをクエリできるようにすることで、さらに一歩進んでいます。 これは、キーだけでなく、幅広いプロパティに基づいてデータにアクセスできることを意味します。 このアプローチにより、データ取得の柔軟性と効率が向上し、データの分析と管理が容易になります。
時間の経過とともにキャッシュ内のデータが大きくなるため、検索と取得のパフォーマンスを高速化するためのクエリを生成できるキャッシュ内のそのような機能が必要になります。 NCache 検索時に効率的な方法でデータをクエリできます。
認定条件 NCache 検索と取得のパフォーマンスを最適化しますか?
NCache インデックス作成、プロジェクション、チャンク サイズ、およびクライアント キャッシュを通じて、検索と取得のパフォーマンスを最適化します。 クエリの結果をメモリにキャッシュすることで、リクエストの応答性が大幅に向上します。 多くのクエリがキャッシュから直接提供されるため、追加のデータベース トリップが節約されます。 NCache 以下で説明するように、検索と取得のパフォーマンスを向上させるために複数の方法を使用します。
1.戦略的にインデックスを作成する
クエリに基づく効率的なデータ検索のために、 NCache 検索インデックスの作成が必要です。 インデックスがないと遅くなり、データを見つけるために完全なストア検索を実行する従来のデータベースとは異なり、 NCache パフォーマンスを優先し、インデックスの作成を必須にします。 インデックスを作成することで、 NCache 検索のニーズに最適なデータ型とストレージ形式を決定できるため、検索が高速かつ効率的になります。
しかしながら、 NCache 使用されます インデキシング これはパフォーマンス指向のアプローチであるため、検索用の属性のインデックス作成は非常に慎重に行う必要があります。これは、インデックスを保持するためのスペースが必要であり、不要な属性のインデックス作成によりメモリとパフォーマンスのオーバーヘッドが発生する可能性があるためです。
NCache インデックスを定義するXNUMXつの方法を提供します。
• 定義済みインデックス (静的インデックス)
• ランタイム インデックス (動的インデックス)
2. プロジェクションを賢く使う
クエリに関しては、 予測 アプリケーションのパフォーマンスを大幅に向上させることができます。 あなたのクエリに基づいて、 NCache キャッシュ ストアから、クラスまたは特定のプロジェクションのすべてのインデックス付き特性を取得できます。
使い方 NCacheを使用すると、選択した列をクエリに対して射影するように指定して、検索をより効率的に実行できます。 特定の列の射影に加えて、複数の射影を取得することもできます。 以下は、プロジェクトの例です $GROUP$
& $Value$
単一のクエリで。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
string query = "SELECT $Value$, $Group$ FROM FQN.Product WHERE Productid > ?"; // Providing parameters for query queryCommand.Parameters.Add("ProductID",50000); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader. Read()) { Product value = reader.GetValue(1); string group Name = reader.GetValue(2); // Perform operations } } else { // Null query result set retrieved } |
デフォルトでは、プロジェクションを指定しない場合、リクエストに応じて完全なオブジェクトとインデックス付きの特性がサーバーからクライアントに移動します。これは、選択的なデータよりも遅くなります。 以下は、Product クラスに関連するすべてのフィールドをキャッシュから取得する例です。 *
オペレータ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
string query = "SELECT * FROM FQN.Product WHERE ProductID > ?"; // Providing parameters for query queryCommand.Parameters.Add("ProductID",50000); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductID"); // Perform operations } } else { // Null query result set retrieved } |
プロジェクションを使用することにより、 NCache オブジェクトの索引付けされたすべての特性を取得する余分な作業を減らし、目的の列のみを取得します。 NCache より優れたクエリ構文を促進することで、この方法でユーザーがパフォーマンスを向上させるのに役立ちます。
3.チャンクサイズ/チャンク単位でデータを取得
NCache チャンクサイズと呼ばれるクエリ最適化のための別の機能を提供します。 検索クエリを実行した後、アプリケーションはデータ/キー パケットをチャンクで受信します。各チャンクはデータ/キー パケットの特定のサイズを表します。 キーのみをクエリするか、選択した項目をクエリするか、データセットと呼ばれるオブジェクトのプロパティの完全なセットをクエリするかにかかわらず、データをクエリする方法は複数あります。
結果セットが大きいほど、生成されたクエリに応答してフェッチするのが遅くなります。 そのため、結果セット全体を一度にフェッチするのではなく、データを消費しているクライアントは、サーバーからデータを XNUMX つずつチャンクで消費します。 NCache デフォルトでは、データを小さなチャンクでサーバーからクライアント側に取り込み、データ チャンクをマージして、データをアプリケーションに渡します。
チャンク サイズのデフォルト値は 512 KB ですが、ユーザーは設定できます チャンクサイズ 要件に基づいて、リーダーを実行して、指定されたクエリに基づいてキャッシュで検索を実行します。 データはネットワーク上をチャンクの形で移動するため、データの検索と取得のパフォーマンスが向上します。
4. クライアントキャッシュの使用
NCache には、クライアント キャッシュ (L1 キャッシュ) と呼ばれる汎用性の高い機能があります。 L1 は、アプリケーションの近くにあるメイン キャッシュのサブセットです。 進行中 そして、 OutProc. これはメイン キャッシュ (L2 キャッシュ) のサブセットであるため、クエリは L1 キャッシュを使用して実行されません。 次のようなキーベースの操作のみ add
, get
または getbulk
操作は、最初に L1 キャッシュ内のキーを検索することによって実行され、欠落しているキーを L2 キャッシュから取得し、マージして提供します。
L2 キャッシュには完全なデータが含まれているため、タグによって実行されるクエリと操作は常にキャッシュ上で実行されます。 クエリを実行して L2 キャッシュからすべてのデータを取得するのではなく、ユーザーは L2 キャッシュからのみキーを取得できます。 次に、一括取得を使用して、L1 キャッシュからそれらのキーを取得します。 データが欠落している場合は、L2 キャッシュから提供されます。 頻繁に実行される読み取り/書き込み操作はクライアント キャッシュに格納されるため、同じデータに対する後続の要求の取得時間が短縮されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Executing query to fetch keys only ICacheReader reader = _cache.SearchService.ExecuteReader(queryCommand, false); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { //Populate Keys List keys.Add(reader.GetValue(0)); } } //Get Data using Bulk API. IDictionary<string, Product> productsList = _cache.GetBulk(keys); //If the number of keys is very large, you can break the list into multiple chunks and then do GetBulk for each chunk separately. |
NCache 上のクライアント キャッシュからデータを効率的に取得するためのサンプル アプリケーションを提供します。 GitHubの.
まとめ
このブログでは、複数の方法について説明しました。 NCache を使用して、クエリ検索とデータ取得のパフォーマンスを向上させます。 NCache アプリケーションのパフォーマンスを向上させるだけでなく、ユーザーの負荷に対応するための高可用性とスケーラビリティも確保します。 だから、それ以上待つことなく ダウンロード NCache 今すぐ 60 日間の無料トライアルを始めましょう!