ストレージがmemcachedのようなものである場合、非常に大きなリストからアイテムを追加/削除する効果的な方法は何でしょうか? この問題をうまく処理する Java インターフェースを備えた分散ストレージがいくつかあるのではないでしょうか?
誰かがテラコッタを勧めるかもしれません。私はそれについて知っていますが、それは私が必要としているものではありません。;)
ストレージがmemcachedのようなものである場合、非常に大きなリストからアイテムを追加/削除する効果的な方法は何でしょうか? この問題をうまく処理する Java インターフェースを備えた分散ストレージがいくつかあるのではないでしょうか?
誰かがテラコッタを勧めるかもしれません。私はそれについて知っていますが、それは私が必要としているものではありません。;)
同時実行性の問題を無視すれば、キー値ストアを使用してほとんどのデータ構造をモデル化できます。あなたの要件は完全に明確ではないため、ユースケースについていくつかの仮定を立てます。それらが正しくない場合は、アプローチを一般化できることを願っています。
{data, prev_key, next_key} の値のタプルを指す既知のルート (「node_root」と呼びましょう) ノードを持つことで、ストレージ内にリンクされたリストを自明に作成できます。prev_key 要素と next_key 要素は、規則 'node_foo' に従う必要があるキー名です。ここで、foo は UUID です (理想的には、これらを順番に生成できます。そうでない場合は、他のタイプの UUID を使用できます)。これにより、データへの順序付きアクセスが提供されます。
O(1) でキーを削除する必要がある場合は、構造体にキー「data」と値「node_foo」を持つ 2 番目のインデックスを右の foo に追加できます。次に、メモリ内のリンクされたリストと同じように削除を実行できます。完了したら、インデックス ノードを削除します。
ここで、このリストの同時変更は、共有データ構造の同時変更と同じくらい悪いことに注意してください。BDB のようなものを使用している場合は、(優れた) トランザクション サポートを使用してこれを回避できます。トランザクションや同時実行制御のないものについては、外部ロックを提供するか、単一のスレッドへのアクセスをシリアル化する必要があります。
たぶん、Scalarisも見てください。