我很喜欢使用DB4O来存储学习算法的训练数据。这将包括(潜在地)数以亿计的对象。根据我的基准测试,每个对象平均大小为2K。检索大量对象的DB4O性能
训练算法需要重复遍历整个对象集(可能是10次)。它不关心对象在什么顺序。
我的问题是这样的:当我从DB4O中检索一大组对象时,它们是全部加载到内存中的,还是根据需要从磁盘中取出?显然,将数亿个2k对象拉到内存中对于我正在使用的服务器类型(它们大约有19GB内存)是不实用的。
Db4o是一个明智的选择吗?
我很喜欢使用DB4O来存储学习算法的训练数据。这将包括(潜在地)数以亿计的对象。根据我的基准测试,每个对象平均大小为2K。检索大量对象的DB4O性能
训练算法需要重复遍历整个对象集(可能是10次)。它不关心对象在什么顺序。
我的问题是这样的:当我从DB4O中检索一大组对象时,它们是全部加载到内存中的,还是根据需要从磁盘中取出?显然,将数亿个2k对象拉到内存中对于我正在使用的服务器类型(它们大约有19GB内存)是不实用的。
Db4o是一个明智的选择吗?
db4o activation机制允许您控制将哪个对象加载到内存中。对于复杂的对象图,您可能需要我们transparent activation,其中db4o在使用该对象时立即将对象加载到内存中。 但是db4o没有显式地从内存中删除对象。它只是对所有加载的对象保留一个弱引用。如果一个对象是可到达的,它将停留在那里(就像任何其他对象一样)。或者,您可以明确禁用对象。
我只是想给db4o的可伸缩性添加一些注释。 db4o是为嵌入应用程序和设备而构建的。它从未为大数据集构建。因此它有其局限性。
有两件事情 - 1.每个对象是否都是真正的2k,或者是否有自然的机会来规范化数据?请记住,DB4O是一个对象数据库,因此可以利用丰富的对象模型。 2我会做一个关于内存中保留内容的实验。我知道默认情况下,它将对象保存在内存中,但我不知道它是否会将其修剪到对象的外壳,如果它未修改并且需要更多内存。 –