Производительность DB4O при извлечении большого количества объектов - PullRequest
0 голосов
/ 27 сентября 2011

Мне интересно использовать DB4O для хранения обучающих данных для алгоритма обучения. Это будет состоять из (потенциально) сотен миллионов объектов. По моим оценкам, каждый объект имеет в среднем 2 КБ.

Алгоритм обучения должен многократно повторяться по всему набору объектов (возможно, 10 раз). Неважно, в каком порядке объекты.

У меня такой вопрос: когда я получаю очень большой набор объектов из DB4O, все ли они загружаются в память или они извлекаются с диска по мере необходимости?

Очевидно, что выгрузка сотен миллионов объектов 2k в память не будет практична на тех серверах, с которыми я работаю (у них около 19 ГБ ОЗУ).

Является ли Db4o мудрым выбором здесь?

1 Ответ

0 голосов
/ 27 сентября 2011
Механизм

db4o активации позволяет контролировать, какой объект загружается в память.Для сложных графов объектов вам, вероятно, следует использовать прозрачная активация , где db4o загружает объект в память, как только он используется.Однако db4o явно не удаляет объект из памяти.Он просто сохраняет слабую ссылку на все загруженные объекты.Если объект достижим, он останется там (как и любой другой объект).При желании вы можете явно деактивировать объект.

Я просто хочу добавить несколько замечаний по поводу масштабируемости db4o.db4o был построен для встраивания в приложения и устройства.Он никогда не был построен для больших наборов данных.Следовательно, он имеет свои ограничения.

  • Он является внутренним однопоточным.Большинство операций db4o блокируют все остальные операции db4o.
  • Он может работать только с относительно небольшими базами данных.По умолчанию база данных может быть только 2 ГБ.Вы можете увеличить его до 127 ГБ.Однако я думаю, что db4o хорошо работает в диапазоне 2-16 ГБ.Впоследствии база данных, вероятно, слишком велика для этого.В любом случае, сотни миллионов объектов 2K - это путь к большой базе данных.(100Mio 2K obj => 200 ГБ)

Поэтому вам, вероятно, следует взглянуть на большие объектные базы данных, такие как VOD .Или, может быть, база данных графиков типа Neo4J также является хорошим выбором для вашей проблемы?

...