我很有兴趣使用DB4O来存储学习算法的训练数据。这将包括(可能)数亿个对象。根据我的基准测试,每个对象的平均大小为2k。
训练算法需要重复迭代整个对象集(可能是10次)。它并不关心对象的顺序。
我的问题是:当我从DB4O中检索一大组对象时,它们是否全部加载到内存中,还是根据需要从磁盘中取出?
显然,将数以亿计的2k对象拉入内存对我正在使用的服务器类型来说是不切实际的(它们有大约19GB的RAM)。
Db4o在这里是明智的选择吗?
答案 0 :(得分:0)
db4o activation机制允许您控制将哪个对象加载到内存中。对于复杂的对象图,您可能应该使用transparent activation,其中db4o在使用后立即将对象加载到内存中。 但是db4o没有显式从内存中删除对象。它只是对所有加载的对象保持弱引用。如果一个对象可以访问,它将保留在那里(就像任何其他对象一样)。您可以选择显式停用对象。
我只想为db4o的可伸缩性添加一些注释。 db4o是为嵌入应用程序和设备而构建的。它从未为大型数据集构建。因此它有其局限性。