web-dev-qa-db-ja.com

ディスクベースのHashMap

Javaはありますか(または使用可能なライブラリがあります)、ディスクベースのHashMapを使用できますか?アトミックまたは何かである必要はありませんが、複数のスレッドを介してアクセスされます。 2つが同じ要素に同時にアクセスしている場合でもクラッシュしません。

誰か知ってる?

34
synic

プロパティファイル または Berkeley DB のどちらかを探している可能性があります。 Java.util.Properties 自体はJava.util.Mapを実装し、loadからstoreへのメソッドをファイルに提供します。 Berkeley DBは、軽量のキーと値のペアのデータストアとして推奨されることがよくあります。

11
BalusC

MapDB

MapDBは、ディスクストレージまたはオフヒープメモリによってサポートされるTreeMapとHashMapを同時に提供します。これは、高速でスケーラブルで使いやすい埋め込み型のJavaデータベースエンジンです。トランザクション、スペース効率の高いシリアル化、インスタンスキャッシュ、透過的な圧縮/暗号化などの機能が満載です。優れたパフォーマンスも備えています。ネイティブの組み込みdbエンジンだけに匹敵します。

http://www.mapdb.org/

jdbm2

埋め込みキー値Javaデータベース。

https://code.google.com/p/jdbm2/

31
Quartz

軽量のdbに近いものが必要なようです。見て/考慮したことがあります Java DB? 単一のインデックス付きテーブルを持つ軽いデータベースは、基本的にディスクベースのスレッドセーフなハッシュマップです。

7
Paul Sasik

JDBM2 はまさにあなたが求めているものです。 (他のマップの中でも)ディスクストレージによってバックアップされたHashMapを提供します。高速でスレッドセーフで、APIは非常にシンプルです。

7
Andrejs

Chronicle MapConcurrentMapを実装し、メモリをマップしてデータをディスクに永続化しますファイル。

Chronicle Mapは概念的にMapDBに非常に似ています(同様のビルダーAPIとMapインターフェースを提供します)が、Chronicle MapはMapDBより 倍高速 であり、同時実行性がはるかに優れています(Chronicleマップは高度にストライプ化されたマルチレベルスピンロックを使用します)。

5
leventov

Project Voldemort も非常に高速/スケーラブル/レプリケーションの「ハッシュマップ」です。 LinkedInで使用され、パフォーマンスもかなり良好です。

彼らのサイトからの引用:

これは、パフォーマンスラボで人為的に高負荷がかかっている状態で「ホット」データセットがメモリ内にある単一のサーバーと通信する単一のマルチスレッドクライアントから見たスループットです。

読み取り:19,384リクエスト/秒
書き込み:16,559リクエスト/秒

4
Alfred

2018最も軽い永続的なkey valueストアは MVStoreを含むH2データベース

MVStoreは、永続的なログ構造のKey-Valueストアです。 H2の次のストレージサブシステムになる予定ですが、JDBCやSQLを使用せずに、アプリケーション内で直接使用することもできます。

  • MVStoreは「マルチバージョンストア」の略です。

  • 各ストアには、Java.util.Mapインターフェースを使用してアクセスできる多数のマップが含まれています。

  • ファイルベースの永続性とメモリ内操作の両方がサポートされています。

  • 高速で、使いやすく、小さいことを目的としています。

  • 読み取りと書き込みの同時操作がサポートされています。

  • トランザクションがサポートされています(同時トランザクションと2フェーズコミットを含む)。

  • ツールは非常にモジュール化されています。プラグ可能なデータ型とシリアル化、プラグ可能なストレージ(ファイルへ、オフヒープメモリへ)、プラグ可能なマップ実装(Bツリー、Rツリー、現在の同時Bツリー)、BLOBストレージ、およびファイルシステムの抽象化をサポートします。暗号化されたファイルとZipファイルをサポートします。

h2-mvstore には依存関係がなく、バージョン1.4.200は .3 Mb の単一のjarです

私も見ました:

  • MapDB13 meg依存関係)
  • クロニクルマップ5.5 meg依存関係-オプションで高速分散)
  • lmdbjava2 meg Java依存関係+ lmdb Cライブラリ)-最速の実装ですがthread safe箱から出して。
4
Stuart Cardall

そして、今年は2016年です。そして、この問題に取り組むために誰かが探しているなら、JetBrainsの Xodus の低レベル環境APIがcomputeInTransactionを使用してこれと同じ目的で機能することがわかりましたラムダを保存します。

確かに、純粋なMapインスタンスを使用するほど洗練されたものではありませんが、私のユースケースではうまくいきました。

最近の別のオプションは H2のMVStoreストレージエンジン を使用することですが、これは同じことを行いますが、データベース自体に合わせて調整されていると思います。

乾杯!

2
Jesús Zazueta