Javaには、ディスクベースのHashMapを使用できるライブラリがありますか(または利用可能なライブラリがありますか)?アトミックである必要はありませんが、複数のスレッドを介してアクセスされ、2つが同時に同じ要素にアクセスしている場合でもクラッシュすることはありません。
誰か知ってる?
Javaには、ディスクベースのHashMapを使用できるライブラリがありますか(または利用可能なライブラリがありますか)?アトミックである必要はありませんが、複数のスレッドを介してアクセスされ、2つが同時に同じ要素にアクセスしている場合でもクラッシュすることはありません。
誰か知ってる?
MapDB
MapDBは、ディスクストレージまたはオフヒープメモリに支えられたTreeMapとHashMapを同時に提供します。これは、高速でスケーラブルで使いやすい組み込みJavaデータベースエンジンです。トランザクション、スペース効率の高いシリアル化、インスタンスキャッシュ、透過的な圧縮/暗号化などの機能が満載です。また、ネイティブの組み込みデータベースエンジンにのみ匹敵する卓越したパフォーマンスを備えています。
jdbm2
埋め込まれたキー値Javaデータベース。
プロパティファイルまたはBerkeleyDBのいずれかが探しているものである可能性があります。それ自体が、ファイルへのメソッドとファイルへのメソッドをjava.util.Properties
実装java.util.Map
および提供します。Berkeley DBは、軽量のキーと値のペアのデータストアとして推奨されることがよくあります。load
store
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ファイルです。
私も見ました:
軽量データベースに近いものが必要なようです。Java DBを見たり、検討したりしましたか?単一のインデックス付きテーブルを持つライトデータベースは、基本的にディスクベースのスレッドセーフなハッシュマップになります。
JDBM2はまさにあなたが求めているものです。(他のマップの中でも)ディスクストレージによってバックアップされたHashMapを提供します。その高速でスレッドセーフで、APIは本当にシンプルです。
Chronicle Mapは、データをファイルにマッピングすることにより、データを実装ConcurrentMap
してディスクに保持します。
Chronicle Mapは概念的にMapDBに非常に似ています(同様のビルダーAPIとMap
インターフェイスを提供します)が、Chronicle MapはMapDBよりも数倍高速で、同時実行性がはるかに優れています(Chronicle Mapは高度にストライプ化されたマルチレベルスピンロックを使用します)。
Project Voldemortは、非常に高速でスケーラブルなレプリケーションの「ハッシュマップ」でもあります。LinkedInで使用されており、パフォーマンスもかなり良好です。
彼らのサイトからの引用:
パフォーマンスラボで人為的に重い負荷がかかった状態で「ホット」データセットがメモリ内にある単一のサーバーと通信している単一のマルチスレッドクライアントから見たスループットは次のとおりです。
読み取り:19,384 req / sec
書き込み:16,559 req / sec
そのため、今年は2016年になります。この問題に取り組む人がいれば、JetBrainsのXodusの低レベル環境APIが、ストアラムダを使用して同じ目的で機能することがcomputeInTransaction
わかりました。
確かに、純粋なMap
インスタンスを持つほど洗練されていませんが、私のユースケースでは機能しました。
もう1つの最近のオプションは、同じことを行うH2のMVStore
ストレージエンジンを使用することですが、データベース自体に合わせて調整されていると思います。
乾杯!