2011-10-09 14 views
24

Terracotta BigMemoryのオープンソースの代替手段はありますか?オープンソースのJava用オフ・ヒープ・キャッシュ・ソリューションはありますか?

実際、私は商用の代替品を見つけることさえできませんでした。私は、JNIとCでサポートされているソリューションなしでJVM内部で動作する純粋なJavaソリューションに興味があります。 apacheので提案があるよう

答えて

9

私ははるかに高速であることをソリューションを開発していますが、私はあなたがコンセプトの、それだけで証拠としてだけではまだそれを使用することをお勧めしませんこの段階では。

http://vanillajava.blogspot.com/2011/09/new-contributors-to-hugecollections.html

あなたが特定の要件を持っている場合しかし、直接的たByteBufferやメモリマップファイルを使用するために、それを自分でコーディングする方が簡単かもしれません。

// using native order speeds access for values longer than a byte. 
ByteBuffer bb = ByteBuffer.allocateDirect(1024*1024*1024).order(ByteOrder.nativeOrder()); 
// start at some location. 
bb.position(0); 
bb.put((byte) 1); 
bb.putInt(myInt); 
bb.putDouble(myDouble); 

// to read back. 
bb.position(0); 
byte b = bb.get(); 
int i = bb.getInt(); 
double d = bb.getDouble(); 

メモリマップファイルの場合も同様です。メモリマップされたファイルは、直接メモリ制限にカウントされず、スワップ領域を使い果たしません。

BigMemoryがあなたの仕事をしないのですか?

+2

私はBigMemoryが足を持たないので、無料ツールが好きです。 キャッシュからデータを追加したり削除したりする必要があるので、自分でコードを作成するのは簡単ではないので、割り当てられたバッファにGCに似た複雑なロジックをコーディングする必要があります。 – Tema

+1

早送り6年、このプロジェクトは現在[Chronicle Map](https://github.com/OpenHFT/Chronicle-Map) – leventov

14

MapDB(以前のJDBM4)という非常に優れたキャッシュソリューションがあります。 HashMapTreeMapをサポートしていますが、埋め込みアプリケーションのみです。また、永続的なファイルベースのキャッシュもサポートしています。オフヒープ・キャッシュの

例:

DB db = DBMaker.newDirectMemoryDB().make(); 
ConcurrentNavigableMap<Integer, String> map = db.getTreeMap("MyCache"); 

または永続ファイルベースのキャッシュ:私はこの質問を持ってきた

DB db = DBMaker.newFileDB(new File("/home/collection.db")).closeOnJvmShutdown().make(); 
ConcurrentNavigableMap<Integer,String> map = db.getTreeMap("MyCache"); 
+1

ディスクバックアップソリューションです。私が尋ねていることではありません。 – Tema

+4

@Tema:それは両方をサポートしています。 –

+0

MapDBがKotlinで開発され、ランタイムに依存していることに言及する価値があります。 –

8

自分がそう私はちょうどで、前の答えを更新するつもりです私の所見。

は私も同じ質問を語るQuoraのからこのスレッドを見つけました:

http://www.quora.com/JVM/Whats-the-best-open-source-solution-for-java-off-heap-cache

本当に更新されていないdirectmemory以外に良いフィットのように見える別の解決策、(昨年)

  • て、mapdbをしている - これは、その後、オフヒープキャッシュをはるかに行い、
  • 巨大な機能の多くをサポートして非常に完全なソリューションであると思われますコレクション - これは、ConcurrentMapとMapを拡張してオフ・ヒープ・データを割り当てることに重点を置くMapDBよりはるかに複雑ではないようです。これからのJava 8をターゲットとするフォークプロジェクトはChronicle-Mapです。これに関する素敵な記事は http://blog.shinetech.com/2014/08/26/using-hugecollections-to-manage-big-data/
  • です。SpyMemcached - これはgithubで評判が良い非常に単純なシングルスレッド実装です。
  • xmemcached - これもgithubについて公正な評判を持っていますが、それについてはあまり話されていないようです。
  • 高速のシリアル化 - も、メモリのオフヒープ使用状況を中心としたJavaのシリアライズを再実装に焦点を当てて - http://ruedigermoeller.github.io/fast-serialization/

しかし、私は、これら3つのいずれかを使用している大きな十分なアプリケーションを見つけるために、さらに興味があります:ダイレクトメモリ、SpyMemcached、xmemcached。私はこの回答を更新するでしょう。

3

JAVA OFF-ヒープキャッシュのこの実装は、ダイレクト・メモリを使用し、軽量のJavaライブラリで良好なパフォーマンスを提供します:

https://github.com/snazy/ohc

は、パフォーマンスの数値のためのベンチマークのセクションを見てみましょう。 Apache 2のライセンスを受けています。

関連する問題