1

計算オブジェクトをblobとしてデータベースに保持するJavaベースの製品があります。実行時に、パフォーマンスを高速化するためにこれをメモリに保持します。ここで、データベース内のこのCalculationオブジェクトを定期的に更新する別のプロセスがあります。ここで、このオブジェクトがデータベースで更新されたときに、キャッシュが保存されたオブジェクトを削除し、データベースから再度フェッチするように実装するのに最適な戦略は何でしょうか。

使用する必要があるまで、キャッシングフレームワークは好みません。

これについての回答に感謝します。

4

3 に答える 3

2

システム アーキテクチャ、設計上の制約、IT 戦略などの知識がなければ、質問に適切に答えることは非常に困難です。

個人的には、メッセージング パターンを使用してこの問題を解決します。このパターンのいくつかの利点は次のとおりです。

  • システム コンポーネント (計算プロセス、更新プロセス) を疎結合できる
  • メッセージング パターンの実装に応じて、多くの計算プロセス (アウトスケーリング) と多くの更新プロセス (マスター スレーブ アプローチ)を「接続」できます。

ただし、メッセージング パターンの実装は非常に困難な作業になる可能性があるため、既存のフレームワークまたは製品のいずれかを使用することをお勧めします。

それが少しでも役立つことを願っています。

于 2013-01-17T10:37:13.067 に答える
0

以前のシナリオと同様の作業をいくつか行いましたが、一般に2つの方法があります。1 つは、キャッシュ ホルダーがデータベースを定期的にポーリングし、必要なデータを取得してメモリに保持することです。データは、HashMap またはその他のコレクションに格納できます。このアプローチはシンプルで実装が簡単で、追加のフレームワークやライブラリは必要ありません。ただし、ユーザーは時々ダーティ データに耐えなければなりません。さらに、ポーラーの数が膨大であるか、クエリが十分に高速でない場合、ポーリングは DB に大きな負荷をかけます。ただし、リアルタイムの要件がそれほど高くなく、システムの規模が比較的小さい場合は、一般的に悪いものではありません。

もう 1 つの方法は、キャッシュ ホルダーがデータ アップデーターの通知をサブスクライブし、通知後にデータを更新することです。ユーザー エクスペリエンスは向上しますが、JMS などの一部の MS インフラストラクチャを使用する必要があるため、システムがより複雑になります。開発と調整には、より多くの時間がかかります。

于 2013-01-17T12:58:26.633 に答える