データをキャッシュするか、データベースにヒットする必要がありますか?


10

私はキャッシュメカニズムを使用していないので、次のシナリオで.netの世界で私のオプションは何なのかと思っていました。

基本的に、ユーザーがカテゴリー(フォルダーと考える)のIDを渡すRESTサービスがあり、このカテゴリーには多数のサブカテゴリーがあり、各サブカテゴリーには1000のメディアコンテナー(ファイル参照オブジェクトと思う)があり、 NASまたはSANサーバー上にある可能性のあるファイル(この場合、ファイルはビデオです)。これらのカテゴリ間の関係は、いくつかの権限ルールとサブカテゴリに関するメタデータとともにデータベースに保存されます。

したがって、UIの観点からは、遅延して読み込まれたツリーコントロールがあり、これはユーザーが各サブフォルダーをクリックすることによって駆動されます(Windowsエクスプローラーと考えてください)。ビデオファイルのURLにアクセスすると、ビデオを見ることができます。

システムが成長するにつれて、ユーザー数は1000に増加し、サブカテゴリとビデオは10000になる可能性があります。

問題は、各リクエストがデータベースにヒットする現在の動作方法を続行する必要があるか、それともデータのキャッシュについて考える必要があるかです。

IIS 6/7とAsp.netを使用しています。


4
現実的な負荷の下でシステムのプロファイルを作成しましたか? データをキャッシュできますか?それは理にかなっていますか?

回答:


13

まず、データプロバイダーを簡単に切り替えられるようにコードが分割されていることを確認します。ここでは、インターフェースの分離とその他のSOLID原則について説明します。

次に、以下に対する答えを知る必要があります。

1)データは頻繁に変更されますか?2)アプリケーションはこれらの更新を取得するためにRESTサービスを頻繁にポーリングしますか?3)データベースは他の目的に使用されていますか?4)現在のパフォーマンスの問題を認識していますか?5)データはアプリケーションによって更新されますか?それらの更新はアプリに反映する必要がありますか?

興味深いのは、データベースを使用することで、技術的にデータをすでにキャッシュしていることです。それがデータベースが行うことです。多くのR&Dは、データを取得する際にデータベースを可能な限り高速にすることを目指しています。たとえば、頻繁に使用されるデータには独自のメモリキャッシュを使用します。

では、キャッシュプロバイダーを交換することで何を得たいと思っているのかを自問してみてください。そして、対処する必要がある現在の制限は何ですか?

現在、速度低下が発生していない場合は、「いいえ、切り替える必要はありません」とだけ言います。

それは本当に大きなトピックです。キャッシュは、データを地理的に分散させる必要がある場合に非常にうまく機能する傾向がありますが、管理の面で大きなオーバーヘッドがあります。

現在、まったく同じような決定を下しているプロジェクトをやっています。

これまでの私の解決策は、データベースのみを使用し、各クライアントからのポーリングリクエストでデータベースを大量にヒットすることです。不自然に聞こえますが、(テストにおいて)必要以上にスケールが大きく、コードは非常に単純です。

とはいえ、私のコードは、メインアプリケーションのデータプロバイダーをデータベースコードから抽象化する一種のリポジトリパターンを使用しています。GemFireのようなキャッシュプロバイダーでスワップしたい場合は、実行するのにかなりの量のコードが必要になります。


イアン、ありがとう。この段階ではデータベースがありますが、注意すべきことについての教育的な質問でした。
JD01 2012年

18

Thorbjørnのコメントによると、実際には十分な情報がありません。

キャッシングは、正しく行わないと、あなたとユーザーに多大な悲しみをもたらす可能性があります。アプリケーションを過度に複雑にする前に、キャッシュについて心配する必要があることを確認してください。

したがって、本当にキャッシュする必要があることを示す情報がない場合は、キャッシュしないでください。

[最適化の一般的なルール:何かをするべきかどうかを尋ねる必要がある場合、答えはノーです] *
*答えがイエスであるほとんどの場所では、それは質問ではなくステートメントになります。


よく言われている一般的なルールが大好きです:)
Ian

@ dan-mcgrathたとえば5分以内に各エントリに2回だけアクセスし、その後は絶対にアクセスしない場合は、エントリをキャッシュすることをお勧めしますか?
nishantbhardwaj2002
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.