これはアーキテクチャの問題です。大きなオブジェクトのキャッシュホルダーとして使用される巨大なメモリを備えたサーバーを持つという考えがあります。クライアントは、このサーバーに「アクション」を送信します (プロパティ age<13 の Search Person など)。そして、このマシン (複雑にするために、このサーバーのインスタンスを増やし、各インスタンスにデータの半分を保持するために Persons リストを配布するとよいでしょう。両方のインスタンスがクエリで動作します - MapReduce スタイル) は、条件に一致する人。他の「アクション」は、特定のキャッシュ フラッシュ、または「ID=3 の人物をインスタンスに更新する」などです。
それを行う最善の方法は Oracle Coherence だと思いますが、他のオープン ソース ソリューションやアイデアを持っている人はいないのでしょうか。
簡単な解決策の 1 つは、Hibernate で EhCache を使用することですが、これをサーバーに変換するためにどのプロトコルを使用するかわかりません (「サーバー」でメソッドを呼び出すようにアクションを送信し、メソッドはその人のリストを返します。クエリに一致します)。単純な RMI を使用できるかもしれません。私はまだ確信が持てません。より実証済みのソリューション、フレームワークが必要です。また、フェイルオーバー、自動検出、およびマップ削減があればいいと思います。EhCache ソリューションの上に GridGain をラップして解決できると思いますか? それはやり過ぎでしょうか (私はこのデータグリッド サーバーの 1 つのインスタンスだけに固執するかもしれません)。
他のオプションはテラコッタです。問題は、インスタンス間でデータを共有できるということだけで、Terracotta についてあまり知りません。あるプロセスから分散キャッシュに要素を追加し、別のプロセスにキャッシュのローカル コピーがあり、差分だけがレプリケートされる場合は? これは、すべてのプロセスがローカル キャッシュにクエリを実行し、非常に高速であるという事実にとっては素晴らしいことですが、クライアント プロセスで大量のメモリが使用されることも意味します。
それで、誰かが何かアイデアを持っていますか?
ありがとうございました。