2013-08-19 1 views
9

Я использую MapDB в проекте, который имеет дело с миллиардами объектов, которые необходимо сопоставить/поставить в очередь. После завершения программы мне не нужна какая-либо настойчивость (базы данных MapDB являются временными). Я хочу, чтобы программа работала как можно быстрее, но я запутался в функции commit() MapDB (которая, как я полагаю, имеет отношение к производительности), даже после чтения docs. Мои вопросы:Использование MapDB эффективно (смущение о коммитах)

  1. Что именно делает совершение? Мое рабочее понимание заключается в том, что он сериализует объекты из кучи на диск, освобождая пространство для кучи. Это точно?

  2. Что происходит со ссылками на объекты, которые были только что зафиксированы? они получают очищены с помощью ГХ, или они каким-то образом «эталонного» объекта на диске Do (с MapDB сделать это прозрачным?)

В конце концов, я хочу знать, как же эффективно, как я могу использовать MapDB, но Я не могу этого сделать, не зная, для чего предназначен commit(). Я был бы признателен за любые другие советы, которые вы могли бы использовать для эффективного использования MapDB.

ответ

2

Операция commit - операция на transactions, как и в системе баз данных. MapDB реализует транзакции, поэтому commit эффективно «вносит изменения, которые я сделал для этой БД, постоянными и видимыми для других пользователей». Бесплатная операция - rollback, которая отменяет все изменения, внесенные вами в текущую транзакцию. Commit не влияет (напрямую) на то, что находится в памяти, а что нет. Возможно, вам стоит взглянуть на compact(), если вы пытаетесь вернуть кучу пространства.

Для вашего второго вопроса, если вы держите ссылку на объект, вы продолжаете удерживать эту сильную ссылку. MapDB не собирается удалять его для вас. Вы должны думать о MapDB как о нормальной карте Java, большую часть времени. Когда вы вызываете get, MapDB скрывает ли он в памяти или на диске от вас и просто возвращает вам полезную ссылку на извлеченный объект. Этот восстановленный объект будет зависать в памяти, пока он не станет мусором, как и все остальное.