我有兴趣在我的桌面应用程序中使用db4o作为我的持久性机制,但我很担心一些事情。
第一个问题:意外剪切非常复杂的对象图。
假设我有一个高度为10的树并且我获取了根,它如何处理我再次存储根对象?
根据我的理解,它不会获取整个树,它会获取前5个引用的层。
所以..如果我对根进行了一个微不足道的更改然后存储它,它是否会将树中的节点剪掉,实际上是删除它们。
如果没有......它是如何处理的?
第二个问题:在更大的对象图中提取子图
使用上面的我的树示例...如果数据库包含1个大型树,我可以查询其中的单个节点吗?由于.store
只被调用一次,我的数据库是否认为它只包含1个“记录”?
谢谢。
答案 0 :(得分:2)
你必须非常小心,因为有两件事情可能发生:你可以将整个数据库拉入内存,或者只是部分图形(其余的对象将为空)。
在db4o中,存在Activator和Update depth的概念,可以在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
答案 1 :(得分:2)
DB4O的透明激活应解决您在此表达的大部分恐惧。