聞いた? オークション MongoDBの プライマリデータベースとして? では、なぜ eBay のような多国籍電子商取引企業が従来の RDBMS ではなく MongoDB を使用するのでしょうか? それは、MongoDB がその分散キーバリュー ストアとドキュメント指向の点で開発者の間で話題になっているためです。 NoSQL 特徴。 そして、eBay が MongoDB を使用しているのであれば、あなたの e コマース アプリケーションも MongoDB を使用しているはずです。
eBayのことは忘れてください。 e コマース アプリケーションを取り上げ、その基本データとパフォーマンスのニーズを詳しく分析してみましょう。 これで .NET/ に.NET Core アプリでは、XNUMX 秒あたりのリクエストが制限されているためにパフォーマンスが低下していると感じたことはありますか? ディスクベースのデータベースに対する読み取り/書き込み呼び出しの時間遅延に気づきましたか? MongoDB には、その素晴らしい機能がすべて揃っているにもかかわらず、アプリケーションに栄光をもたらす可能性のある特定のリンクがまだ欠けていると感じたことがありますか?
友よ、ここは誰か (私) があなたを (仮想的にのみ) つつき、紹介する場所です。 NCache あなたの人生である。 NCache インメモリで分散されており、 スケーラビリティの高い 常にアプリケーションのすぐ隣にあるキャッシュ。 トランザクション速度が向上するため、すべてのキャッシュ ニーズに対応する完璧なソリューションになります。 を使用してアプリケーションを最大限に活用する方法を少し見てみましょう。 NCache.
NCache 詳細 キャッシュをデータベースと同期する NCache NoSql データストア
使い方 NCache MongoDB を使用した分散キャッシュとして
マルチサーバー環境で実行される、トランザクションの多い e コマース アプリケーションの場合、すべてのデータ リクエストを処理する単一のサーバー キャッシュを用意する余裕はありません。 アプリケーションの負荷が大きくなるほど、リクエストでキャッシュが停止する可能性が高くなります。
アプリケーションの実行中に、アプリケーションのトランザクション負荷が増加し、最初に設定されたキャッシュ サーバーの数では受信リクエストを処理するのに十分ではなくなる場合があります。 ここが NCache アプリケーションをシームレスにスケーリングする あなたに許可することで 実行時に追加のキャッシュサーバーを追加する そのため、キャッシュがアプリケーションのボトルネックになることはありません。 したがって、.NET/ で最適なパフォーマンスを確保できます。.NET Core アプリケーション。
正確にどこにあるのかを正確にイメージするには NCache がアプリケーション スタック内に存在する場合、基本的なアーキテクチャを見てみましょう。
MongoDB はリレーショナル データベースに比べてスケーラブルであると考えられていますが、ディスクベースのデータ ストアであるという事実は依然として欠点です。 したがって、使用して NCache アプリの VNet の内部または外部に留まりながら (完全に呼び出し)、メモリベースのデータ キャッシュを提供します。 これにより、アプリケーションの処理が予想よりもはるかに速くなり、待ち時間が短縮されます。
これを使用する理由がさらに増えませんか? NCache データベースのデータをキャッシュするためですか? ここで止まらずに、もう少し深く掘り下げてみましょう NCache テーブルに持ってきます。
NCache 詳細 キャッシュをデータベースと同期する NCache NoSql データストア
MongoDB でキャッシュする方法
MongoDB を使用したキャッシュは非常に簡単です。 キャッシュ内の特定のデータを検索するかどうか、または データベース自体にクエリを実行して必要なデータを取得します、または単純に 新しいデータをデータベースに追加するを使用すると、すべて非常に簡単に行うことができます。 NCache.
次のスニペットは、電子商取引アプリケーションで前述のすべての操作を実行する方法を説明します。 ここでは、あなたの非常に忠実で聡明な顧客を探しています。 アインシュタイン、実行するキャッシュ内で CRUD操作 その上で。 リクエストされた顧客がキャッシュにない場合は、データベースでその顧客を検索します。 取得したら、その顧客をキャッシュに追加します。 期限切れ 5分間。 これは、 キャッシュには古いデータが提供されることはありません。 したがって、データの一貫性が確保されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var customer = cache.Get("Customer:CustomerID:EINSTEIN"); if (customer == null) { MongoClient mongoClient = new MongoClient("mongodb://20.200.20.10:27017"); IMongoDatabase mongoDatabase = mongoClient.GetDatabase("DemoDatabase"); IMongoCollection <Customer> mongoCollection = mongoDatabase.GetCollection<Customer>("Customers"); response = mongoCollection.FindAsync<Customer>(x => x.Id == "EINSTEIN").GetAwaiter().GetResult().ToList<Customer>(); customer = (Customer)response.FirstOrDefault(); var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); var cacheItem = new CacheItem(customer) { Expiration = expiration }; cache.Insert($"Customer:CustomerID:{customer.Id}", cacheItem); } |
NCache 詳細 キャッシュをデータベースと同期する NCache NoSql データストア
データベースアイテムのキャッシュコレクション
導入の最大の特典は NCache アプリケーションとデータベースへのアクセスは、特にデータベースへのアクセスを意味します。 読み取り操作 大幅に削減され、不要なネットワーク呼び出しが減り、パフォーマンスが向上します。 この論理配置の唯一の理由は、データベースから項目を取得して操作を実行するたびに、そのすべてをキャッシュ層で実行できるためです。
これを達成するために、 NCache MongoDB コレクションを キャッシュアイテム または、個々のアイテムを XNUMX つのキャッシュ アイテムとして。 項目をキーと値のペアとしてキャッシュする方法を見てみましょう。 NCache MongoDB から。
単一アイテムとしてのキャッシュコレクション
アイテムのコレクションを XNUMX つのものとしてキャッシュする キャッシュ項目 アイテムが似ている場合、または同じカテゴリに分類される場合に便利です。 たとえば、アプリケーションのデータベースには世界中に広がる顧客のリストが含まれているが、ドイツに住んでいる顧客にクエリを実行したいとします (お気に入りの Einstein はドイツ出身であるため)。 このクエリでこれらすべての顧客を XNUMX つのリストの形式で返し、このリストをキャッシュに追加できるようにしたいとします。 その方法は次のとおりです。
1 2 3 4 5 6 7 |
var customersInGermany = mongoCollection.FindAsync(x => x.Country == 'Germany').GetAwaiter().GetResult().ToList(); if(customersInGermany > 0) { var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); var cacheItem = new CacheItem(customersInGermany) { Expiration = expiration }; cache.Insert("CustomersInGernamy", cacheItem); } |
コレクションアイテムを個別にキャッシュする
次のような追加情報を各項目に関連付けたい場合は、 タグ, ネームタグ, グループヘッド データの取得を容易にするには、一意の識別子を使用して各アイテムを個別にキャッシュする必要があります。 このようにして、論理タグに基づいて複数のアイテムを取得できます。たとえば、 ドイツ在住のすべてのお客様.
ドイツに住むすべての顧客をキャッシュするには、タグを追加できます Customer:Country:Germany
クエリのデータセットを使用します。 ここでは、「ドイツ」タグを持つすべてのドイツの顧客をキャッシュする方法の例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var customersInGermany = mongoCollection.FindAsync(x => x.Country == 'Germany').GetAwaiter().GetResult().ToList(); if(customersInGermany > 0) { var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); foreach (var customer in customersInGermany) { cacheItem = new CacheItem(customer) { Tags = new[] { new Tag("Customer:Country:Germany") }, Expiration = expiration }; cache.Add($"Customer:CustomerID:{customer.Id}", cacheItem); } } |
ここまで、アプリケーションと MongoDB の間でデータをやりくりする方法について詳しく説明してきました。 NCache。 次のコマンドを実行すると、データへのアクセスと操作がいかに簡単であるかがわかります。 CRUD操作 すべてのせいで NCache。 それでは、その方法について簡単に説明します。 NCache 料理に効率をもたらします。 できれば一番上のチェリーを。
以下にいくつかの機能を示します。 NCache MongoDB を使用する電子商取引アプリケーションのパフォーマンスを向上させるために提供されます。
NCache 詳細 キャッシュをデータベースと同期する NCache NoSql データストア
JSON シリアル化キャッシュでシリアル化コストを撲滅
MongoDB はデータを次の形式で保存します。 バイナリ JSON (BSON)、これは、JSON のようなドキュメントをバイナリでエンコードされたシリアル化です。 これは完全にうまく機能します NCache をサポートするので、 オブジェクトの JSON シリアル化。 このMongoDBは、NCache コラボレーションにより、データのシリアル化/逆シリアル化の必要性がなくなり、アプリケーションのパフォーマンス時間が向上するだけでなく、データの精度も維持されます。
1 2 3 4 5 |
var response = mongoCollection.FindAsync<Customer>(x => x.Id == "EINSTEIN").GetAwaiter().GetResult().ToList<Customer>(); Customer customer = (Customer)response.FirstOrDefault(); JObject customerJson = JObject.Parse(JsonSerializer.Serialize(customer)); cache.Insert($"Customer:CustomerID:{customer.Id}", customerJson); customer = cache.Get<Customer>($"Customer:CustomerID:EINSTEIN "); |
リソース最適化のためのデータ ソース プロバイダー
NCache は、大阪で データソースプロバイダー アプリケーションのデータ アクセス層への単一ポイント エントリを確保するため。 エントリ ポイントはキャッシュです。 データがキャッシュ内にない場合は、 リードスルー プロバイダーは、データベースにアクセスし、必要なデータを検索して取得し、将来の使用に備えてキャッシュし、アプリケーションに提示する責任を負います。
1 |
var customer = cache.Get<Customer>( "EINSTEIN", new ReadThruOptions(ReadMode.ReadThru, "mongoDBReadThroughProvider")); |
同様に、あなたは ライトスルー データベースに対して書き込み操作を実行する場合に使用するプロバイダーです。 キャッシュに対して必要な操作を実行するだけで、キャッシュが自動的にデータベースにデータを書き込みます。 キャッシュに「Einstein 2」を追加して、お気に入りの顧客の 2.0 バージョンをデータベースに追加しましょう。 WriteThru
.
1 2 3 4 |
Customer customer = new Customer(); customer.Id = "EINSTEIN2"; ... cache.Insert(customer.Id,new CacheItem(customer),new WriteThruOptions(WriteMode.WriteThru,"mongoDBWriteThroughProvider"); |
NCache 詳細 キャッシュをデータベースと同期する NCache NoSql データストア
キャッシュデータのクエリ
使用時 NCache .NET アプリケーションと MongoDB の間の中間キャッシュ層として、 NCache ~する能力を提供します クエリによるインデックス付きキャッシュ データの検索。 メモリ内キャッシュ データをクエリすると、クエリがネットワーク上で通常必要とするトリップ コストが直接削減されます。
インデックス付きデータのクエリの使用を示すコード スニペットの例 NCache ここに示されています:
1 2 3 4 5 6 7 8 9 10 11 12 |
string query = "SELECT * FROM Models.Customer WHERE Country == ?"; var queryCommand = new QueryCommand (query); queryCommand.Parameters.Add("Country", "Germany"); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ContactName"); // Perform operations } } |
すべてを終わらせる
それらすべてを考慮すると、 機能と特長 NCache あなたを提供しています、これより優れた一致はないと結論付けるのが安全です。 NCache MongoDB をキャッシュします。その理由は次のとおりです。 MongoDB はアプリケーションから離れた場所にあります。パフォーマンスを向上させるには、近くに留まるソリューションが必要です。 NCache メモリ内に存在することでそれを提供します。実行時に任意の数のサーバーを追加できる、線形にスケーラブルなソリューションが必要です。 NCache それをあなたにもたらします。 データを動的に自動リバランスする柔軟なソリューションを探しています。 NCache クライアントの介入なしに、まさにそれを実行します。
NCache パフォーマンス、コスト削減、柔軟性、拡張性という形であまりにも多くのものを提供してくれるので、他に何を探しているのでしょうか? 取ってきます NCache キャッシングを楽しんでください!