私は最近Neo4jについて質問しました。埋め込み可能であり、Javaで記述されており、依存関係が(あまり)ない)。
しかし、それはグラフDBであり、単純なキー/値ストアとして使用するのが良いアイデアかどうかはわかりません。
基本的に私は大きな地図を持っています。これはJavaで次のようになります:
Map<Integer,Map<String,String>>
メインマップには数千万のエントリがあり、各エントリにはプロパティ/値のマップが含まれています。 「内部」マップは比較的小さく、約20エントリです。
そのマップをwebappの実行時に他のマップに永続化する方法が必要です。
Neo4jを使用して、ID(整数)ごとに1つのノードを作成し、内部マップ内の各エントリに1つのプロパティを配置しました。私の初期のテストから、それはうまくいくようですが、それが続行するための良い方法であるかどうかわかりません。
Javaで記述された組み込み可能なDBを使用しますか?
要件は次のとおりです。
javaで書かれた
埋め込み可能(それほど大きくないもの)
not SQL(*)
オープンソース
バックアップが簡単(サーバーの稼働中に「ライブ」バックアップを作成できる必要がある)
私の用語も少し間違っているかもしれませんので、遠慮なく私を助けて/私を訂正してください。私の「マップのマップ」の場合、最適なのはキーと値のペアDBでしょうか。
キー/値ペアDB、ドキュメントDB、大きなテーブル、グラフDBなどの違いとして、私は少し迷っています。
また、必要に応じてNeo4JのようなグラフDBを使用することをお勧めします(パフォーマンスが問題になることはないと思います)。
もちろん、私はcould自分のマップのマップを自分で永続化するだけですが、ここではホイールを再発明したくありません。実証済みのDBを再利用したい...
(*)SQLが不要な理由は、常にこの「マップのマップ」があり、内部マップは常に進化するため、構造化しすぎないようにするためです。
GoogleのJavaへの LevelDB の移植がいくつかあるようです:
次に、埋め込まれたJavaデータベースのリストがここにあります:
あなたの使用例については、私はお勧めしますMapDB( http://www.mapdb.org )
それはあなたの要件に一致します:
トランザクション、同時実行性、パフォーマンスなどのその他の素晴らしい機能があります。
Chronicle-Map
は、このフィールドの新しいニースプレーヤーです。
Map
実装ConcurrentHashMap
のドロップイン置換と想定)あなたはバークレーDBを調べることができます
http://docs.Oracle.com/cd/E17277_02/html/GettingStartedGuide/index.html
大量のデータを処理する上で非常に効率的であり、キー/値です。自分で発見しているので、これ以上詳しく説明することはできませんが、調べる時間がある場合は...
チェックアウトwww.jsondb.io
これは、データをファイルとして保存し、バックアップを容易にする、純粋なJavaの組み込み可能な軽量データベースです。
一部に遅れますが、Tayzgridを使用できます。そのオープンソースとそのインプロセスキャッシュをアプリケーションに埋め込むことができます。基本的には、メモリ内データグリッドまたは メモリ内キー値ストア ですが、必要な機能も備えています。
あなたはcould XMLまたはJSONファイルをそのまま使用します。それらのどちらもrequiresスキーマではなく、特にパフォーマンスがそれほど重要でない場合は、ディスクとメモリの間を行き来するのはかなり簡単です。 (例えば、時々設定のみをロードします)
利点は、XMLとJSONの両方が非常に単純で、マップをかなりうまく処理できることです。
また、アプリケーションに対する依存関係の負荷が大幅に軽減されます。ほとんどの組み込みソリューションが追加するクエリや同様の機能を使用する必要がなく、ビッグデータ構造を永続化または非永続化するだけの場合、埋め込みDBタイプシステム全体はかなり重いです。
要件を選択するために、Javaに組み込まれています。ほとんどの場合、バックアップが簡単です。これは単なるファイルであり、非常に埋め込み可能で、非常にオープンソースであり、SQLではないためです。 XMLは少し冗長で扱いにくい場合がありますが、よく知られているドメインであり、非常に豊富なツールを備えているため、必要に応じてアプリの外部で扱うことができます。