2011-02-03 9 views
2

基本的にハッシュテーブルをディスクに保存しておきます。私のプログラムはJavaで書かれています。 ハッシュテーブルは、StringからListにマップします。Javaクライアントを使用したKey-Valueデータベース

そこにはたくさんのキーバリューストアがありますが、多くの研究/読書を行った後、どちらが自分の目的に最も適しているかわかりません。ここに私にとって重要なことがいくつかあります。

  1. 単一のキーで値を取得できる単純なキー値ストアです。
  2. 正常に文書化された良好なJavaクライアント。
  3. データセットは小さく、高度な機能は必要ありません。再び、私はそれを簡単にしたい。

私はRedisとMongoDBを調べました。どちらも有望ですが、私の目的には理想的ではありません。 すべての情報をいただければ幸いです。

+0

なぜあなたの目的には適していないのですか? – dmcnelis

答えて

2

回答の任意の並べ替えを提供する前に、私は私はあなたの説明によると、ディスク上のこのハッシュテーブルを格納する必要があるのですか、なぜ自分自身に尋ねることから始めたいですデータセットは小さいので、メモリに収まると仮定します。アプリケーションを再起動した後にこの構造体を再利用できるだけであれば、それを永続化するためにどんな形式でも使用できます。

第2に、RedisまたはMongoDBが理想的ではない理由はありません。

  • 良いJavaクライアント
  • だけではなく、リストを格納することができ、またリスト値の操作(そうデータをサポートしています。あなたの(短い)3つの要件に基づいて、私はRedisのは、おそらくあなたの最善の策であると述べているだろう

私がRedisを排除するために考えられる唯一の理由は、厳格なACID特性を探しているということです。もしそれがあなたが探しているものであれば、おそらくBerkleyDB JEを見てください。それはしばらくの間されており、ドキュメントは良いです。

3

データセットが小さく、SIMPLEにしたい場合。ハッシュマップをファイルやrdbmsにシリアル化してアプリケーションにロードするのはなぜですか?

ハッシュマップを「照会する」ことはできません。キー近似?値 '類似性'?私は分かりませんが、ちょうどのためにキーバリューの記憶に迷惑をかけるように私に残忍さがあるようです。

2

JDBM2をチェックしてください - 私はあなたが探しているものをJDBM 1のコードベースに取り組んで、私はjdbm2

4

で見てきたものに感銘を受けていたhttp://code.google.com/p/jdbm2/

object prevalenceをサポートするライブラリです。これらのライブラリは、APIのようなコレクションを簡単かつ迅速に提供するように設計されています。以下では、コレクションを扱うことを可能にするライブラリはほとんどありませんが、舞台裏ではディスクストレージを使用しています。

  1. space4j
  2. Advagato
  3. Prevayler
+2

Space4jは透過的なクラスターと索引付けも提供します。 – TraderJoeChicago

0

Chronicle Mapは完璧なフィットでなければなりません。純粋なJavaで書かれた組み込み可能なキーバリューストアなので、実際には「クライアント」や「サーバー」はありませんが、データベースへの完全な読み取り/更新インプロセス・アクセス権を持つ)。

クロニクルマップは1つのファイルに存在します。このファイルはファイルシステムの周りを移動することができ、OSやアーキテクチャの異なる別のマシンに送られても、開いているクロニクルマップデータベースである可能性があります。

は(そうでない場合は、既存のストアがアクセスされ、それが作成され、データベースファイルが存在しない場合)作成したり、データストアを開くには:

ChronicleMap<String, List<Point>> map = ChronicleMap 
    .of(String.class, (Class<List<Point>>) (Class) List.class) 
    .averageKey("range") 
    .averageValue(asList(of(0, 0), of(1, 1))) 
    .entries(10_000) 
    .createPersistedTo(myDatabaseFile); 

はその後、作成したChronicleMapオブジェクトと同じように動作することができます単純なHashMapを使用して、キーと値のシリアル化を気にする必要はありません。

関連する問題