38

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

誰か知ってる?

4

8 に答える 8

33

MapDB

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

http://www.mapdb.org/

jdbm2

埋め込まれたキー値Javaデータベース。

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

于 2013-03-07T11:01:50.557 に答える
11

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

于 2010-04-16T16:57:59.823 に答える
10

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は0.3Mbの単一のjarファイルです。

私も見ました:

  • MapDB13 meg依存関係)
  • クロニクルマップ5.5 meg依存関係-オプションで高速分散)
  • lmdbjava2 megJava依存関係+ lmdbCライブラリ)-最速の実装ですが、すぐに使用できるわけthread safeではありません。
于 2018-06-21T09:04:03.147 に答える
7

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

于 2010-04-16T16:49:17.693 に答える
7

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

于 2012-02-23T14:22:43.243 に答える
6

Chronicle Mapは、データをファイルにマッピングすることにより、データを実装ConcurrentMapしてディスクに保持します。

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

于 2017-03-19T00:06:17.740 に答える
4

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

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

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

読み取り:19,384 req / sec
書き込み:16,559 req / sec

于 2010-04-16T19:04:22.377 に答える
2

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

確かに、純粋なMapインスタンスを持つほど洗練されていませんが、私のユースケースでは機能しました。

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

乾杯!

于 2016-10-11T20:53:27.080 に答える