2009-12-19 3 views
8

Существуют ли какие-либо СУБД для Java, которые можно запускать во встроенном режиме, а некоторые таблицы хранятся в памяти при загрузке других с диска? H2 и JavaDB кажутся двумя лидерами для Java DB, и я знаю, что у них обоих есть режим в памяти, но они заставляют вас загружать всю БД в память или вы можете выбрать таблицу за таблицей?В БД Java-памяти

ответ

6

Это кэшируются таблица FAQ упоминается в сайте HSQL.

• Имеет ли HSQLDB хранить все данные в памяти. Работает ли не память, как результат?

• Он хранит все данные в памяти только, если вы хотите. по default, CREATE TABLE в таблице памяти, так как это лучший тип для меньших таблиц. Для больших таблиц используйте CREATE CACHED TABLE и настройте размер кеша в соответствии с потребностями использования памяти (всего 8 МБ или около того). См. Главу «Руководство по управлению и развертыванию системы». Нет простого правила и не навязывается со стороны HSQLDB, так как максимальная гибкость допускается только с помощью нескольких настроек. Популярное использование HSQLDB предназначено для приложений OLAP, ETL и интеллектуального анализа данных, где огромные распределения памяти Java используются для хранения миллионов строк данных в памяти.

Я думаю, что кешированный стол уже достаточно мощный, чтобы удовлетворить ваши потребности.

От http://hsqldb.org/web/hsqlFAQ.html

Comparation между столом и кэш-памяти таблицы

ПАМЯТИ таблицы и кэшируется таблицы, как правило, используется для хранения данных. Разница между ними заключается в следующем:

Данные для всех таблиц MEMORY считываются из файла * .script при запуске и хранении базы данных в памяти. Напротив, данные для кэшированных таблиц не считываются в память до тех пор, пока не будет получен доступ к таблице. Кроме того, только часть данных для каждой таблицы CACHED хранится в памяти, что позволяет хранить таблицы с большим количеством данных, чем может храниться в памяти.

Когда база данных отключается обычным способом, все данные для таблиц MEMORY записываются на диск. Для сравнения, данные в таблицах CACHED, которые были изменены, выписываются во время работы и при выключении.

Размер и емкость кэша данных для всех таблиц CACHED настраивается. Это позволяет разрешить кэширование всех данных в таблицах CACHED в памяти. В этом случае скорость доступа хороша, но немного медленнее, чем таблицы MEMORY.

Для обычных приложений рекомендуется, чтобы таблицы MEMORY использовались для небольших объемов данных, оставляя таблицы CACHED для больших наборов данных. Для специальных приложений, в которых скорость имеет первостепенное значение и доступно большое количество свободной памяти, таблицы MEMORY могут использоваться и для больших таблиц.

Похоже, эта функция не поддерживается H2 и Derby (JavaDB). Исправьте меня, если это не факт.

1

Большинство баз данных в оперативной памяти (например, HSQLDB иметь возможность кэшировать некоторые (или все) данные на диск. Обычно это достаточно низкий уровень, так это прозрачно для программиста, но, конечно, настраивается

+0

Есть ли какие-либо документы, на которые вы могли бы указать мне? Из того, что я видел на сайте H2, in-memory работает только в том случае, если БД не является постоянным. –

+0

Возможно, вы захотите посмотреть на Terracotta http://www.terracotta.org/ – Bostone

+0

@DroidIn.net Terracotta является коммерческой? И это своего рода кеш, а не БД, не так ли? –