3

ストレージがmemcachedのようなものである場合、非常に大きなリストからアイテムを追加/削除する効果的な方法は何でしょうか? この問題をうまく処理する Java インターフェースを備えた分散ストレージがいくつかあるのではないでしょうか?

誰かがテラコッタを勧めるかもしれません。私はそれについて知っていますが、それは私が必要としているものではありません。;)

4

3 に答える 3

0

同時実行性の問題を無視すれば、キー値ストアを使用してほとんどのデータ構造をモデル化できます。あなたの要件は完全に明確ではないため、ユースケースについていくつかの仮定を立てます。それらが正しくない場合は、アプローチを一般化できることを願っています。

{data, prev_key, next_key} の値のタプルを指す既知のルート (「node_root」と呼びましょう) ノードを持つことで、ストレージ内にリンクされたリストを自明に作成できます。prev_key 要素と next_key 要素は、規則 'node_foo' に従う必要があるキー名です。ここで、foo は UUID です (理想的には、これらを順番に生成できます。そうでない場合は、他のタイプの UUID を使用できます)。これにより、データへの順序付きアクセスが提供されます。

O(1) でキーを削除する必要がある場合は、構造体にキー「data」と値「node_foo」を持つ 2 番目のインデックスを右の foo に追加できます。次に、メモリ内のリンクされたリストと同じように削除を実行できます。完了したら、インデックス ノードを削除します。

ここで、このリストの同時変更は、共有データ構造の同時変更と同じくらい悪いことに注意してください。BDB のようなものを使用している場合は、(優れた) トランザクション サポートを使用してこれを回避できます。トランザクションや同時実行制御のないものについては、外部ロックを提供するか、単一のスレッドへのアクセスをシリアル化する必要があります。

于 2009-05-13T01:21:56.477 に答える
0

たぶん、Scalarisも見てください。

于 2009-03-13T13:23:47.707 に答える