web-dev-qa-db-ja.com

java組み込みライブラリオンディスクキー値データベース

私が探しているものthink私が探しているのは、SQLなし、ライブラリ組み込み、ディスク(つまり、メモリ内ではない)データベースで、Java( JVMのインスタンス内で実行するのが望ましいです。データベースではないので、自分でロールバックしたくなります。基本的に、「これをメモリに保持するか、ディスクに置くか」を探しています。 "データベースの一部。

私たちのモデルは数ギガバイトに成長しました。現在、これはすべてメモリ内で行われています。つまり、JVMを数ギガバイト以上押し上げています。現在はすべてフラットなXMLファイルに格納されており、xstreamでシリアル化および逆シリアル化され、Java'a組み込みのgzipライブラリで圧縮されています。これは、モデルが100MB未満の場合はうまく機能しますが、それより大きくなると問題になります。

大まかに言えば、そのモデルは次のように分解できます

  • 事業
    1. 構成コンポーネント(directed-acyclic-graph)、データベースにまったく対応しない
    2. ダースの「実験」構造のリスト
      • それぞれに約12の「実行モデル」構造のリストが含まれています。
        1. 各実行モデルには数百メガのデータが含まれています。いったん書き込まれると、編集されることはありません。

私がやりたいのは、guid-> run-modelのマップインターフェースに準拠したものです。このミニデータベースは、これらのオブジェクトのフラットテーブルを保持します。私たちの実験モデルでは、run-modelsのリストをguidのリストで置き換え、アプリケーションレイヤーでこのマップへのget呼び出しを追加します。これにより、ディスクからメモリにプルされます。

つまり、プログラムの構成をXMLで保持し(非常に満足しています)、ビッグデータのテーブルをDBMSに保持して、マルチGBのメモリを消費しないようにすることができます。プログラムの開始時と終了時に、モデルの2つの部分(XMLのconfigセクションとデータベース形式のrun-models)をアーカイブ形式からロードおよびアンロードできます。

私はこれについて大胆不敵だと感じており、おそらくX-StreamのXMLインスペクション戦略とカスタムマップ実装のいくつかでそれを実装できると思いますが、頭の後ろの声が私に言っています代わりにそれを行うライブラリを見つける必要があります。

自分でロールする必要がありますか、それともこの請求書に合うだけの小さいデータベースがありますか?

みんなありがとう、

-ジェフ

20
Groostav

http://www.mapdb.org/

また、この質問を見てください: BerkeleyDBの代替?

13
cruftex

MapDBは問題の解決策となる可能性があるため、 Chronicle Map も検討に値します。これは埋め込み可能なJava Key-Valueストアで、オプションで永続的で、非常によく似たプログラミングモデルをMapDBに提供します。これもVanilla Java.util.Mapインターフェイスと、キーと値の透過的なシリアル化。

主な違いは、サードパーティのベンチマークによると、 Chronicle MapはMapDBよりも数倍速い です。

安定性に関しては、Chronicle Mapデータストレージに関するバグは今のところ何ヶ月も報告されていませんが、多くのプロジェクトで積極的に使用されています。

免責事項:私はクロニクルマップの開発者です。

2
leventov