1

これはアーキテクチャの問題です。大きなオブジェクトのキャッシュホルダーとして使用される巨大なメモリを備えたサーバーを持つという考えがあります。クライアントは、このサーバーに「アクション」を送信します (プロパティ age<13 の Search Person など)。そして、このマシン (複雑にするために、このサーバーのインスタンスを増やし、各インスタンスにデータの半分を保持するために Persons リストを配布するとよいでしょう。両方のインスタンスがクエリで動作します - MapReduce スタイル) は、条件に一致する人。他の「アクション」は、特定のキャッシュ フラッシュ、または「ID=3 の人物をインスタンスに更新する」などです。

それを行う最善の方法は Oracle Coherence だと思いますが、他のオープン ソース ソリューションやアイデアを持っている人はいないのでしょうか。

簡単な解決策の 1 つは、Hibernate で EhCache を使用することですが、これをサーバーに変換するためにどのプロトコルを使用するかわかりません (「サーバー」でメソッドを呼び出すようにアクションを送信し、メソッドはその人のリストを返します。クエリに一致します)。単純な RMI を使用できるかもしれません。私はまだ確信が持てません。より実証済みのソリューション、フレームワークが必要です。また、フェイルオーバー、自動検出、およびマップ削減があればいいと思います。EhCache ソリューションの上に GridGain をラップして解決できると思いますか? それはやり過ぎでしょうか (私はこのデータグリッド サーバーの 1 つのインスタンスだけに固執するかもしれません)。

他のオプションはテラコッタです。問題は、インスタンス間でデータを共有できるということだけで、Terracotta についてあまり知りません。あるプロセスから分散キャッシュに要素を追加し、別のプロセスにキャッシュのローカル コピーがあり、差分だけがレプリケートされる場合は? これは、すべてのプロセスがローカル キャッシュにクエリを実行し、非常に高速であるという事実にとっては素晴らしいことですが、クライアント プロセスで大量のメモリが使用されることも意味します。

それで、誰かが何かアイデアを持っていますか?

ありがとうございました。

4

4 に答える 4

1

Why do you need a cache? What you described in the first paragraph of your question sounds a lot like a relational database whose tables are stored entirely in memory. Do you have any scalability requirements that may require distributing your data across several servers in a cluster?

于 2010-05-03T20:47:42.847 に答える
1

シンプルな EhCache のシンプルなソリューションとして、Hazelcast を使用してクラスター認識を実装し、「アクション」を呼び出すことができると思います - Hazelcast

ここでも、MapReduce が解決策として興味深いことがわかります。彼らが MapReduce を提供し、データの局所性を追跡していると彼らが言っているのは非常に興味深いことです。これは非常に高速であるはずです。サーバーが 2 つ以上ない場合は、それで問題ないかどうかわかりません。

于 2009-12-10T09:02:54.063 に答える
0

Redisでも確認できます。非常に優れたクエリ言語を備えています。

于 2011-08-29T08:52:33.237 に答える
0

Terrastoreはこの問題を解決するために構築されていると思いますが、Terrastore へのアクセスは、プロセス内ではなくプロセス外であることを意図しています (必要なアクセスの種類は特定されていませんでした)。

Terrastore は Terracotta に基づく OSS プロジェクトです。

于 2010-01-21T00:11:41.820 に答える