現代の問題には、最新のソリューションが必要です。 そして、高速パフォーマンスの必要性は常に問題でした。 NCache パフォーマンスやスケーラビリティなどの重大な問題を迅速に解決します。 キャッシュは効率的に機能し、アプリケーションの問題のある領域をすべてカバーしますが、キャッシュの主な目的はより読み取りの多いアプリケーションです。 このブログはその方法を徹底的に説明しています NCache 読み取りが集中するアプリケーションに最適です。
NCache 詳細 のスケーラビリティ NCache NCache 性能
キャッシングの必要性
最初から始めて、キャッシュが必要な理由を見てみましょう。 その簡単な答えは、データベースの応答時間です。 すべてのデータを XNUMX か所に格納しているプライマリ ストレージ (データベース) は、応答率が高いために停止する可能性があります。 それを解決するものは何ですか? キャッシュ - メモリ内ストレージと高速な応答時間を提供するため。
第二に、データベースとは異なり、本質的に分散されているキャッシュには単一障害点がありません。負荷が分散されるため、リクエストがサーバーを停止させる可能性が少なくなります。
先ほど説明した上記の事実を考慮すると、キャッシュは、書き込み強度がそれほど高くなく、読み取り強度が比較的高い状況に最適であることがわかりました。
輸送システムに関する情報を含む Web サイトを考えてみましょう。 バスの料金と時刻は通常固定されており、頻繁に変更されることはありません。 より読み取り頻度の高いデータを扱うこのようなアプリケーションには、によって提供される豊富な機能セットがあります。 NCache より高速な読み取り操作を実行するため。
NCache 詳細 NCache データキャッシング用 高可用性
NCache 読み取り集中型キャッシュストアとして
読み取り集中型のアプリケーションには、 NCache すべての読み取り操作をできるだけ速く実行します。 NCache には、単一アイテムまたは一括アイテムのフェッチなど、あらゆる種類の読み取り操作に対応する豊富な機能セットがあります。 キャッシュがデータベースからデータを受信すると、すべてのフェッチ操作がキャッシュに直接送られ、パフォーマンスとスケーラビリティが向上します。
NCache 詳細 CRUD操作 のスケーラビリティ NCache
で操作を取得 NCache
NCache のさまざまなオーバーロードを提供します 取得する() 特定のキーに対してキャッシュからデータをフェッチするメソッド。 これらの操作は本質的に同期的であり、カスタム ロジックに従ってキャストされた型オブジェクトを返します。 キャッシュにアイテムが存在しない場合は、null を返します。
以下のコードを見て、顧客が住所の詳細を確認したい場所を見て、通常の方法を使用して住所が正しいことを確認します 取得する() 方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Pre-condition: Cache is already running // Items are already present in the cache // Initialize Cache ICache cache = CacheManager.GetCache("demoCache"); string customerKey = "Customer:ALFKI"; // Retrieve the Customer object Customer customer = cache.Get<Customer>(customerKey); if (customer != null) { Console.WriteLine($"Customer: {customer.ContactName}, Address : {customer.Address}"); } |
NCache また、ユーザーは Add, アップデイト, 削除します キャッシュからのデータ。
キャッシュからバルクアイテムを取得する
同様に、次を使用してキャッシュからバルク アイテムを取得することもできます。 GetBulk() 方法。 これを使用すると、XNUMX 回の呼び出しでキャッシュから多数のアイテムを取得できます。
以下の例は、XNUMX 回の操作でキャッシュから複数の顧客を取得する方法を示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Pre-condition: Items are already present in the cache // Create an array of all keys to fetch String[] keys = new String[] { "Customer:ALFKI", "Customer:ANATR", "Customer:ANTON", "Customer:AROUT", "Customer:BERGS" }; // Get items from cache IDictionary<string, Customer> retrievedItems = cache.GetBulk<Customer>(keys); // Retrieve customers and their addresses from dictionary foreach (KeyValuePair<string, Customer> retrievedItem in retrievedItems) { Console.WriteLine($"Customer: {retrievedItem.Value.ContactName}, Address : { retrievedItem.Value.Address}"); } |
さらに、 NCache ユーザーに提供する Add, インセット, 削除します XNUMX 回の呼び出しで大量のデータ。
キーワードを使用してアイテムを取得する
効果的な検索のために、アイテムに付けられたキーワードを使用してアイテムを取得することもできます。 特定の文字列ベースのキーワードでデータをマークし、これらのキーワードを使用してアイテムを取得します。 たとえば、東海岸や西海岸など、特定の顧客が属する地域を使用してグループ化するとします。 によって提供される特定の機能セット NCache この目的のために:
名前付きタグ | タグ | グループ |
---|---|---|
辞書の形で提供 | タグの配列の形で提供されます | 文字列の形式で提供 |
任意のプリミティブデータ型にすることができます | 文字列ベースのみ | 文字列ベースのみ |
以下の例では、ユーザーは SQL クエリを使用して、12% の VIP メンバーシップ割引を受けているすべての顧客の詳細を表示したいと考えています。
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 27 28 29 30 31 |
// Pre-conditions: Items are already present in the cache with named tags // Custom class is query indexed through NCache Web Manager or config.ncconf // Create SQL Query with the specified criteria // Make sure to use the Fully Qualified Name for custom class string query = "SELECT CustomerID, ContactName FROM Alachisoft.NCache.Samples.Data.Customer WHERE VIP_Membership_Discount = 0.12"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Executing Query ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set string customerID = reader.GetValue<string>("CustomerID"); string customerName = reader.GetValue<string>("ContactName"); Console.WriteLine($"Customer '{customerName}' with ID '{customerID}' has VIP membership discount."); } } else { Console.WriteLine($"No VIP members found"); } |
名前付きタグを使用したその他の操作については、こちらを参照してください。 NCache ドキュメント.
NCache 詳細 ICacheReader 名前付きタグでキャッシュ データを検索する
SQLを使用してキャッシュを検索
特定のデータベースからアイテムをフェッチする場合、クエリは特定の条件で検索する効果的な方法です。 NCache クエリの必要性を完全に理解しており、次を使用してキャッシュからアイテムを取得できます SQL に似た クエリ。 さらに、次のことが必要です。 index データベースとは異なり、独自にインデックスを作成しないため、キャッシュ内の特定のアイテム。 ただし、データがインデックス化されたら、SQL クエリを使用しても問題ありません。
次のような ADO.NET 準拠の API を提供します。 実行リーダー, 実行スカラー, 非クエリの実行 キャッシュからデータを検索 (SELECT) および削除 (DELETE) します。
でサポートされているものは次のとおりです。 NCache クエリ:
次のコードを見て、SQL に似たクエリがキャッシュをどのように検索するかを確認してください。次の例は、フィルターを適用して単価が 100 未満の製品のみを表示するユーザーを示しています。
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 27 28 29 30 31 32 33 |
//Pre-condition: Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT * FROM Alachisoft.NCache.Samples.Data.Product WHERE UnitPrice < ?"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("UnitPrice", 100.0); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get key of product item in cache string productKey = reader.GetValue<string>("$KEY$"); // Get product attributes string productName = reader.GetValue<string>("ProductName"); double unitPrice = reader.GetValue<double>("UnitPrice"); Console.WriteLine($"Product '{productName}' with key '{productKey}' has UnitPrice {unitPrice}"); } } else { Console.WriteLine($"No product found with price less than 100"); } |
NCache 詳細 SQL でサポートされている操作 SQLクエリ
LINQを使用してキャッシュを検索する
SQLのように、 NCache でクエリを作成するためのサポートを提供します LINQ キャッシュを検索します。 NCache LINQ プロバイダーの変換 LINQ 関連のクエリ に NCacheの拡張 SQL 形式に変換し、それを LINQ 形式に変換した後、それに応じて結果を返します。 LINQ クエリを記述するための構文には、次の XNUMX 種類があります。
- ラムダ式
- 単純なLINQクエリ式
ただし、SQL と同様に、クエリをスムーズに実行するには、検索可能なキャッシュ データのインデックスを定義する必要があります。
以下のコード例を見て、LINQ クエリがキャッシュからオブジェクトをフェッチする方法を確認してください。 ユーザーはフィルターを適用して、在庫が 10 個以上ある飲料または乳製品を表示しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Pre-condition: Items are already present in the cache // Create custom class LINQ object IQueryable<Product> products = new NCacheQuery<Product>(cache); // LINQ query to search cache IQueryable<Product> result = from prod in products where (prod.Category == "Beverages" || prod.Category == "Dairy") && prod.UnitsInStock > 10 select prod; if (result != null) { foreach (Product product in result) { Console.WriteLine($"Product '{product.ProductName}' in Category '{product.Category}' has stock of '{product.UnitsInStock}' units"); } } else { Console.WriteLine($"No product found"); } |
ブログの締めくくり
NCache 実際には、読み取り集中型アプリケーションのパフォーマンスを向上させるための強力なキャッシュ ソリューションです。 豊富な機能セットにより、速度が向上し、パフォーマンス、スケーラビリティ、および信頼性が向上します。 その他チェックしてみてください NCache 機能を使用 当社のウェブサイトから。