Подтвердить что ты не робот

Есть ли решение для кеша с открытым исходным кодом для Java?

Есть ли альтернатива Open Source для Terracotta BigMemory?

На самом деле мне даже не удалось найти какую-либо коммерческую альтернативу. Меня интересует чистое решение Java, которое будет работать внутри JVM без каких-либо решений JNI и C-backed.

4b9b3361

Ответ 1

Существует очень хорошее решение для кеша MapDB (ранее JDBM4). Он поддерживает HashMap и TreeMap Но это только приложение, встроенное. Он также поддерживает постоянный кеш на основе файлов.

Пример для кэша кучи:

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");

Ответ 2

Я разрабатываю решение намного быстрее, но я бы не предлагал вам использовать его только пока, поскольку это просто доказательство концепции на этом этапе.

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

Однако, если у вас есть конкретное требование, может быть проще запрограммировать его самостоятельно, использовать прямые ByteBuffers или файлы с отображением памяти.

например.

// 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 не будет работать для вас?

Ответ 4

У меня сам был этот вопрос, поэтому я собираюсь обновить предыдущие ответы своими выводами.

Я нашел эту тему от quora, которая также говорит о том же вопросе:

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

Разное решение, которое, кажется, хорошо подходит, кроме directmemory (который на самом деле не обновлялся в прошлом году)

  • MapDB - это, по-видимому, очень полное решение, которое делает гораздо больше, чем кэширование вне кучи и поддерживает множество функций.
  • HugeCollections - похоже, это гораздо менее сложное приложение, чем MapDB, которое сосредоточено на выделении данных с кучи, расширяя ConcurrentMap и Map. Проект вилки, предназначенный для таргетинга на Java 8, - это Chronicle-Map. Хорошая статья об этом http://blog.shinetech.com/2014/08/26/using-hugecollections-to-manage-big-data/
  • SpyMemcached - это очень простая однопоточная реализация с хорошей репутацией в github.
  • xmemcached - это также имеет справедливую репутацию на github, но, похоже, это не очень хорошо известно.
  • Быстрая сериализация - также была сосредоточена на переопределении Java Serialization с акцентом на использование памяти без использования памяти - http://ruedigermoeller.github.io/fast-serialization/

Однако мне было бы интересно также найти достаточно большое приложение, которое использует любой из этих трех: directmemory, SpyMemcached, xmemcached. Должен ли я найти его, я обновлю этот ответ.

Ответ 7

Эта реализация кеша java off-heap использует прямую память и обеспечивает хорошую производительность в легкой Java-библиотеке:

https://github.com/snazy/ohc

Взгляните на раздел бенчмаркинга для номеров производительности. Он лицензирован под Apache 2.