Я заинтересован в использовании db4o в качестве механизма сохранения в моем настольном приложении, но меня беспокоит пара вещей.
1-я проблема: случайное обрезание очень сложных графических объектов.
Скажем, у меня есть дерево высотой 10, и я извлекаю корень, как оно обрабатывает меня, снова сохраняя корневой объект?
Насколько я понимаю, он не извлекает все дерево, а извлекает первые 5 упомянутых слоев.
Итак ... Если я сделаю тривиальное изменение в корне, а затем сохраню его, будет ли он отсекать узлы дальше по дереву, по сути, удаляя их.
Если нет .. как он с этим справляется?
Вторая проблема: извлечение подграфов в более крупном графе объектов
Используя мой пример дерева сверху ... Если база данных содержит 1 массивное дерево, могу ли я запросить в нем единственный узел? Поскольку .store был вызван только один раз, думает ли моя база данных, что он содержит только 1 "записывать"?
Спасибо.

Вы должны быть очень осторожны, потому что могут произойти две вещи: вы можете вытащить всю базу данных в память или только частичный граф (остальные объекты будут нулевыми) .
В db4o есть понятие активатора и глубины обновления, которые можно настроить при конфигурации dbv40 или при выборке объектов. Это способ сообщить db40, насколько глубоко вы хотите, чтобы он зашел при выборке объектов, на которые имеются ссылки. Посетите сайт db4o, там есть документация по этому поводу:
http://developer.db4o.com/Resources/view.aspx/Reference/Object_Lifecycle/Activation
http://developer.db4o.com/Resources/view.aspx/Reference/Object_Lifecycle/Update_Depth
Прозрачная активация DB4O должна развеять большинство опасений, которые вы здесь выразили.