web-dev-qa-db-ja.com

Javaで単純なキー/値ストア用に記述された埋め込みDBはどれですか?

私は最近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が不要な理由は、常にこの「マップのマップ」があり、内部マップは常に進化するため、構造化しすぎないようにするためです。

21
Cedric Martin

GoogleのJavaへの LevelDB の移植がいくつかあるようです:

次に、埋め込まれたJavaデータベースのリストがここにあります:

15
Kiril

あなたの使用例については、私はお勧めしますMapDBhttp://www.mapdb.org

それはあなたの要件に一致します:

  • javaで書かれた
  • 組み込み可能-依存関係のない単一のjar
  • sQLではない-ディスクに永続化されたマップを提供する
  • オープンソース(Apache 2ライセンス)
  • バックアップが簡単(ファイルが少ない)

トランザクション、同時実行性、パフォーマンスなどのその他の素晴らしい機能があります。

13
Andrejs

Chronicle-Map は、このフィールドの新しいニースプレーヤーです。

  • ヒープ以外に常駐している(メモリマップファイルを使用してディスクに永続化できる機能)Map実装
  • 超高速-1秒あたり数百万のクエリ/更新を維持します。 e。各クエリには、平均でサブマイクロ秒のレイテンシがあります
  • 同時更新をサポート(ConcurrentHashMapのドロップイン置換と想定)
  • プロパティセットがコレクション内で固定されている場合、あなたが言及したプロパティマップの特別なサポート-値全体のシリアル化/非シリアル化なしで値の特定のプロパティを更新できます( 20フィールド)。この機能は、Chronicle/ Lang プロジェクトではdata value generationと呼ばれます。
  • などなど...
8
leventov

あなたはバークレーDBを調べることができます

http://docs.Oracle.com/cd/E17277_02/html/GettingStartedGuide/index.html

大量のデータを処理する上で非常に効率的であり、キー/値です。自分で発見しているので、これ以上詳しく説明することはできませんが、調べる時間がある場合は...

5
Eric C.

チェックアウトwww.jsondb.io

これは、データをファイルとして保存し、バックアップを容易にする、純粋なJavaの組み込み可能な軽量データベースです。

3
Farooq Khan

一部に遅れますが、Tayzgridを使用できます。そのオープンソースとそのインプロセスキャッシュをアプリケーションに埋め込むことができます。基本的には、メモリ内データグリッドまたは メモリ内キー値ストア ですが、必要な機能も備えています。

2
Basit Anwer

あなたはcould XMLまたはJSONファイルをそのまま使用します。それらのどちらもrequiresスキーマではなく、特にパフォーマンスがそれほど重要でない場合は、ディスクとメモリの間を行き来するのはかなり簡単です。 (例えば、時々設定のみをロードします)

利点は、XMLとJSONの両方が非常に単純で、マップをかなりうまく処理できることです。

また、アプリケーションに対する依存関係の負荷が大幅に軽減されます。ほとんどの組み込みソリューションが追加するクエリや同様の機能を使用する必要がなく、ビッグデータ構造を永続化または非永続化するだけの場合、埋め込みDBタイプシステム全体はかなり重いです。

要件を選択するために、Javaに組み込まれています。ほとんどの場合、バックアップが簡単です。これは単なるファイルであり、非常に埋め込み可能で、非常にオープンソースであり、SQLではないためです。 XMLは少し冗長で扱いにくい場合がありますが、よく知られているドメインであり、非常に豊富なツールを備えているため、必要に応じてアプリの外部で扱うことができます。

2
cdeszaq