質問

(潜在的に)数百GBのデータにわたってキーと値のルックアップを行う方法が必要です。理想的には、分散ハッシュテーブルに基づいたもので、Javaでうまく機能します。フォールトトレラントでオープンソースである必要があります。

ストアは永続的である必要がありますが、速度を上げるためにデータをメモリにキャッシュするのが理想的です。

複数のマシンからの同時読み取りおよび書き込みをサポートできる必要があります(ただし、読み取りは100倍一般的です)。基本的には、Webサービスのユーザーメタデータの簡単な初期ルックアップを行うことが目的です。

誰かが何かを推薦できますか?

役に立ちましたか?

解決

Hazelcast をご覧ください。分散/パーティション化され、スーパーライトで、簡単で無料です。

java.util.Map map = Hazelcast.getMap ("mymap");
map.put ("key1", "value1");

よろしく、

-talip

他のヒント

Open Chord は、 CHORD プロトコル。これは、ニーズに完全に適合する分散ハッシュテーブルプロトコルです。

ユースケースによっては、 Terracotta が必要な場合があります。

永続的であるかどうか、メモリ内であるかどうかなどを指定する必要があります。 http://www.danga.com/memcached/

配布されるハッシュテーブルには、Tapestry、Chord、Pastryが含まれます。これらのいずれかがニーズに合うはずです。

OpenChordは有望に聞こえます。しかし、 BDB 、またはその他の非-SQLハッシュテーブルを配布することは非常に簡単です(少なくともストレージノードの数が(ほぼ)一定であれば)、クライアントのキーをハッシュして適切なサーバーを取得します。

nmdb は、まさに必要なもののように聞こえます。永続的なオンディスクストレージを備えた、メモリキャッシュ内の分散。現在のバックエンドには、qdbm、berkeley db、および(開発者への簡単な電子メールの後に最近追加された) tokyo cabinet 。ただし、キー/値のサイズには制限がありますが、TICPサポートが不要な場合は解除できます。

Redisson からの分散マップ構造を試してください。これは Redis サーバー。 Redisクラスター構成を使用すると、1000台のサーバーにデータを分割できます。

使用例:

Redisson redisson = Redisson.create();

ConcurrentMap<String, SomeObject> map = redisson.getMap("anyMap");
map.put("123", new SomeObject());
map.putIfAbsent("323", new SomeObject());
map.remove("123");

...

redisson.shutdown();

DNSにはこれを行う機能があります。各レコードの大きさ(8GBの小さなデータ?)はわかりませんが、機能する可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top