2011-12-05 7 views
1

私のAzureの役割では、SQL Azureデータベースに格納する必要がある多くのエンティティがあります。現在、エンティティを読み取る必要があるときは、SQL Azureクエリを実行するだけです。Azureの役割でデータベースの読み込みをキャッシュする方法は?

すぐにボトルネックになると思うので、ある種のキャッシュを実装する必要があります。最初のアクセスでデータを読み込んだ後、一定期間保存して後続の読み込みでキャッシュされたデータを返すメモリ構造です。このような構造を作ることは難しいことではありません。すぐに利用できるコードを見つけることができます。

問題はいくつかのインスタンスからの書き込みでどうしますか?たとえば、インスタンス1はデータを読み取り、キャッシュし、インスタンス2はデータベースを変更します。インスタンス1がデータベースを再読み込みし、実際にデータベースを再読しなければならないことが分かっていなければ、間違ったデータで動作します。私はそれを簡単にやる方法は知らない。

さまざまなインスタンスのキャッシュを一貫して保つための簡単な方法はありますか?

答えて

4

その方法のA、遊びにキャッシュcomeeを配布し、Azureの上で、これは一般的にWindows Azure AppFabric Caching

を意味分散キャッシュの背後にある考え方は、キャッシュが一元化されていることで、潜在的に(効率のために)複数のサーバ上に分散場所ですデータの要求はデータベースに送られる必要はありません。これは通常、パフォーマンス面では比較的高価ですが、同様に、各プロセスでローカルにデータをキャッシュする必要はありません。

インプロセスキャッシュとして明らかのように効率的ではない一方で、分散キャッシュは、いくつかの利点を持っている -

  1. それはプロセスのうち、キャッシュで基本となるソース
  2. への複数の呼び出しを防ぐ(そして、実際にはありません、ローカルサーバー上の負荷を軽減します)
  3. クライアントは、お互いのフェッチの恩恵を受けます。つまり、一方のクライアントがデータをキャッシュに持ち込み、セキュリティ設定が許可され、他のクライアントがこの情報にアクセスできるようになります。大きくすることができます

これはまた、「真実」に関する最新の知識を持つクライアントがキャッシュを更新するか、または無効にすることができ、同じキャッシュを共有する他のすべてのクライアントにすぐに利益をもたらすことを意味します。

また、分散モデルであるため、キャッシュファームは多くの要求を満たすように拡張できますが、Azureではキャッシュがサービスとして提供されるため、これは所有者ではなくプラットフォームが処理するものです。 PaaSとWindows Azureの大きな利点の1つである キャッシュへの情報

1

AppFabricキャッシュはYossi氏が言ったように使用できますが、Memcachedも使用できます。

1

Azure AppFabricキャッシングを使用する場合、データの一貫性を保つために、ローカルキャッシングをオフにしたい場合があります。

欠点は、リクエストごとにキャッシュから2つ以上のアイテムを引き出している場合、これが大きなボトルネックになることです。キャッシュされたオブジェクトを1つの大きなオブジェクトに結合することで、この問題を回避できます。

I posted a questionこれはMicrosoftのフォーラムでは触れられていますが、現時点での回答は古くなっています。

補足として、ローカルキャッシュが必要で、Webロールを使用している場合は、古いASP.Netキャッシュを使用するほうが良いオプションかもしれませんが、別途料金はかかりません。

関連する問題