分散キー値ルックアップシステムが必要
-
10-07-2019 - |
質問
(潜在的に)数百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の小さなデータ?)はわかりませんが、機能する可能性があります。