AppFabric キャッシュに関するドキュメントをたくさん読みましたが、そのほとんどは単純なシナリオをカバーしています。たとえば、都市リスト データやショッピング カード データをキャッシュに追加します。しかし、製品カタログ データをキャッシュに追加する必要があります。
私は4つのテーブルを持っています:
Product (100 万行)、ProductProperty (2,500 万行)、Property (100 行)、PropertyOption (300 行)
- Product および ProductProperty テーブルのいくつかのフィルターを使用してクエリを実行し、ページ化された検索結果を表示します。
- 検索結果セットに対して基準セットを作成しています。例 (4 アイテムの新製品、34 アイテムの電話、26 アイテムの書籍など)
- IsNew、CategoryId、PriceType などの列を使用して Product テーブルをグループ化するため
のクエリを実行し、PropertyId および PropertyOptionId 列を使用して ProductProperty テーブルをグループ化する別のクエリを実行して、どのプロパティにアイテムがいくつあるかを取得します。
したがって、検索結果を表示するには、検索結果に対して1つのクエリを作成し、基準リストを作成するために2つのクエリを作成します(カウント付き)
検索結果のクエリに 0.7 秒、2 つのグループ化クエリに合計 1.5 秒かかりました。負荷テストを実行すると、1 秒あたり 7 リクエストに達し、%10 が IIS によってドロップされました。これは、db が応答を返すことができなかったためです。
これが、製品とプロパティのレコードをキャッシュしたい理由です。
以下の項目に従う場合 (AppFabric 内);
- 名前付きキャッシュを作成する
- 製品カタログ データのリージョンを作成します (100 万行のテーブルと 2,500 万行のプロパティ テーブル)。
- データのクエリとグループ化のためのタグ付けアイテム。
いくつかのタグを使用してクエリを実行し、結果の 1 ページ目または 2 ページ目を取得できますか? いくつかのタグを使用してクエリを実行し、いくつかのグループ化結果の数を取得できますか? (フィルターオプションをカウントで表示) そして、3 台のサーバーが必要ですか? appfabric サーバーが 1 つだけのソリューションを提供できますか (もちろん、リスクは承知しています)。これらのシナリオについて説明している記事やドキュメントをご存知ですか?
ありがとう。
ノート:
いくつかの追加テスト: 約 30.000 項目をキャッシュに追加しました。そのサイズは 900 MB です。getObjectsInRegion メソッドを実行すると、約 2 分かかりました。「IList> dataList = this.DataCache.GetObjectsInRegion(region).ToList();」問題は IList への変換です。IEnumerable を使用すると、非常に迅速に動作します。しかし、自分のタイプに変換せずにページングまたはグループ化の結果を取得するにはどうすればよいですか?
別のテスト:
30.000 個の商品アイテムでグループ化カウントを取得しようとしましたが、グループ化の結果を取得するのに 4 秒かかりました。たとえば、GetObjectByTag("IsNew").Count() などの約 50 のクエリがあります。