2011-01-27 11 views
13

私はjava.util.Mapのディスク上の実装を探しています。私はディレクトリやファイルを指し示すことができ、そこにそのコンテンツを格納することができます。何らかの方法で選択します。誰もそのようなことを知っていますか?Javaマップのディスク上の実装は適切ですか?

答えて

10

Disk-Backed-mapプロジェクトをご覧ください。

ジャワ

キーと値のペアの多数を格納するためのディスクバックアップさマップの実装を提供する小さなライブラリ内のディスクバックアップされたマップを実装ライブラリ。マップの実装(HashMap、HashTable)は、非常に単純なキー/値のペアのために約3-4Millionキー/ GBのメモリを最大限に活用し、ほとんどの場合、制限ははるかに小さくなります。一方、DiskBackedマップは、キーと値のペアのサイズに関係なく、16Million(64bit JVM)から20Million(32bit JVM)のキー/ GBまでを格納できます。

+0

これはウェブサイトからの正確な引用ですが、間違っている必要があります。 64ビットJVMが32ビットJVMよりも小さなコレクションを持つことは意味がありません。 –

1

単純なEHCache実装を使用できますか? EHCacheの素晴らしい点は、の実装が非常にシンプルであることです:-)

実際のMapインスタンスをシリアライズ/デシリアライズすることはできませんでしたか?

+0

はい、私はそれを排除しました。私はこれまでに全身を覚えておく必要はありません。 – jjujuma

+0

Isnt EHCacheは支払い済みですか?無料版はありますか –

+0

オープンソースなので、ライセンス料はかかりません – Brian

6

key-objectベースの構造を探してデータを保持する場合、NoSQLデータベースは非常に良い選択です。これらのうちのいくつかは、MongoDBまたはRedisという規模の大きなデータセットに対して実行され、ハッシュベースのルックアップとは別に、興味深いクエリとトランザクション機能を提供します。

本質的に、これらのタイプのシステムはMap実装です。そして、それを橋渡しするためにjava.util.Mapを実装する独自のアダプタを実装するのは複雑すぎるべきではありません。

5

これまで問題に比較的新しいオープンソースのソリューションのように、私はそれを使用しましたようで、それが好きて、mapdb(mapdb.org)あなたが探しているまさにありません。ディスクでサポートされているTreeMapとHashMapのほかに、他のコレクションタイプもあります。

マップはスレッドセーフでもあり、本当に良いパフォーマンスを示します。

Features

+0

紙の上ではうまく見えますが、私の経験では悲しいほど完全に遅く、安全にクラッシュすることはありません( 'transactionEnable'でも)。 – dagnelies

0

Chronicle Mapがこの問題にモダンでthe fastestソリューションです参照してください。 ConcurrentMapインターフェイスを実装し、データをディスクに保存します(フードの下では、クロニクルマップのメモリをファイルにマッピングすることによって行われます)。

関連する問題