DB4O性能检索大量对象

时间:2011-09-26 22:24:28

标签: java db4o

我很有兴趣使用DB4O来存储学习算法的训练数据。这将包括(可能)数亿个对象。根据我的基准测试,每个对象的平均大小为2k。

训练算法需要重复迭代整个对象集(可能是10次)。它并不关心对象的顺序。

我的问题是:当我从DB4O中检索一大组对象时,它们是否全部加载到内存中,还是根据需要从磁盘中取出?

显然,将数以亿计的2k对象拉入内存对我正在使用的服务器类型来说是不切实际的(它们有大约19GB的RAM)。

Db4o在这里是明智的选择吗?

1 个答案:

答案 0 :(得分:0)

db4o activation机制允许您控制将哪个对象加载到内存中。对于复杂的对象图,您可能应该使用transparent activation,其中db4o在使用后立即将对象加载到内存中。 但是db4o没有显式从内存中删除对象。它只是对所有加载的对象保持弱引用。如果一个对象可以访问,它将保留在那里(就像任何其他对象一样)。您可以选择显式停用对象。

我只想为db4o的可伸缩性添加一些注释。 db4o是为嵌入应用程序和设备而构建的。它从未为大型数据集构建。因此它有其局限性。

  • 内部是单线程的。大多数db4o操作都会阻止所有其他db4o操作。
  • 它只能处理相对较小的数据库。默认情况下,数据库只能为2GB。您可以increase it up to 127 GB。但是我认为db4o在2-16 GB的范围内运行良好。之后数据库可能会很大。无论如何,数以亿计的2K对象是通往大型数据库的途径。 (100Mio 2K obj => 200GB)

因此,您可能应该查看较大的对象数据库,例如VOD。或者像Neo4J这样的图形数据库也可以很好地解决您的问题?