質問
Javaは、ディスクベースのハッシュマップを持つことができるようにする(または利用可能なライブラリがあります)(または利用可能です)?アトミックなどである必要はありませんが、複数のスレッドからアクセスされ、2つが同じ要素に同時にアクセスしている場合はクラッシュしないでください。
誰かが何かを知っていますか?
解決
また プロパティファイル また バークレーDB あなたが探しているものかもしれません。 java.util.Properties
それ自体が実装します java.util.Map
および方法を提供します load
から store
ファイルへ。バークレーDBは、多くの場合、軽量のキー価値ペアデータストアとして推奨されます。
他のヒント
mapdb
MAPDBは、ディスクストレージまたはオフヒープメモリに裏打ちされた同時のツリーマップとハッシュマップを提供します。高速でスケーラブルで使いやすい組み込みJavaデータベースエンジンです。トランザクション、スペース効率の良いシリアル化、インスタンスキャッシュ、透明な圧縮/暗号化などの機能が詰め込まれています。また、ネイティブの埋め込みDBエンジンによってのみライバルになりました。
JDBM2
埋め込まれたキー値Javaデータベース。
軽量のDBに近いものが必要だと思われます。見た/検討したことがありますか Java DB? 単一のインデックス付きテーブルを備えたライトDBは、基本的にディスクベースのスレッドセーフハッシュマップです。
JDBM2 まさにあなたが尋ねているものです。ディスクストレージによってバックアップされたハッシュマップを提供します(他のマップの中でも)。その高速でスレッドセーフとAPIは本当に簡単です。
Project VoldeMort また、非常に高速/スケーラブル/レプリケーション「ハッシュマップ」です。 LinkedInで使用されています。パフォーマンスもかなり良いです。
彼らのサイトからの引用:
これは、「ホット」データセットがパフォーマンスラボの人為的に重い負荷の下でメモリにある単一のサーバーと話している単一のマルチスレッドクライアントから見られるスループットです。
読み取り:19,384 req/sec
書き込み:16,559 req/sec
その年は現在2016年です。そして、誰かがこの問題に取り組むことを検討しているなら、私は低レベルの環境APIが Xodus JetbrainsからJetbrainsは同じ目的のために機能し、 computeInTransaction
Lambdasを保存します。
確かに、それは純粋なものを持っているほど滑らかではありません Map
インスタンスですが、私のユースケースで機能しました。
別の最近のオプションは使用することです H2 MVStore
ストレージエンジン これは同じことですが、データベース自体に向けてより調整されていると思います。
乾杯!
の 2018
最も軽い持続性 key value
ストアはです MVStoreを備えたH2データベース:
MVSTOREは、永続的なログ構造化されたキー価値ストアです。 H2の次のストレージサブシステムになることが計画されていますが、JDBCまたはSQLを使用せずにアプリケーション内で直接使用することもできます。
MVStoreは「マルチバージョンストア」の略です。
各ストアには、java.util.mapインターフェイスを使用してアクセスできる多数のマップが含まれています。
ファイルベースの永続性とメモリ内操作の両方がサポートされています。
速く、使いやすく、小さいことを意図しています。
同時読み取りおよび書き込み操作がサポートされています。
トランザクションがサポートされています(同時トランザクションと2フェーズのコミットを含む)。
ツールは非常にモジュール式です。プラグ可能なデータ型とシリアル化、プラグ可能なストレージ(ファイルへ、オフヒープメモリへ)、プラグ可能なマップ実装(B-Tree、R-Tree、同時Bツリー)、Blobストレージ、およびファイルシステムの抽象化をサポートします。暗号化されたファイルとzipファイルをサポートします。
H2
の単一のライブラリにも含まれています 1.8 meg
私も見ました: