gpt4 book ai didi

java - db4o 数据库有 15000+ 对象时导致 OutOfMemoryError

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:32 24 4
gpt4 key购买 nike

我使用的是 db4o 8.0。

我有课

PostedMessage{
@Indexed
long receivedTime;
@Indexed
long sentTime;
...
//getter methods and setter methods for all the fields.
}

我将 PostedMessage 对象持久保存到 db4o 数据库中。我已经将 15000 多个对象保存到 db4o 数据库中。现在,当我运行以下查询时,它会导致 OutOfMemoryError。

    //Query to get PostedMessages between "start" and "end" dates.
Query q = db.query();
q.constrain(PostedMessage.class);
Constraint from = q.descend("receivedTime").constrain(new Long(start.getTimeInMillis())).greater().equal();
q.descend("receivedTime").constrain(new Long(end.getTimeInMillis())).smaller().equal().and(from);
q.execute();//results in OutOfMemoryError

为了避免 OutOfMemoryError,我需要向 PostedMessage 类的字段添加索引。 Read This

我有一个服务器/客户端配置。我无法控制在打开 ObjectContainer 之前对其进行预配置。

在 ObjectContainer 刚刚打开并提供给我之后,我必须应用/附加索引 CommonConfiguration。

我知道如何创建配置。

    EmbeddedConfiguration appendConfig = Db4oEmbedded.newConfiguration();
appendConfig.common().objectClass(EmailMessage.class).objectField("receivedTime").indexed(true);
appendConfig.common().objectClass(EmailMessage.class).objectField("sentTime").indexed(true);

我无法弄清楚如何将此配置应用于已打开的 ObjectContainer。如何为刚刚打开的ObjectContainer添加索引?

EmbeddedConfigurationItem 的 apply() 方法是答案吗?如果是的话,我可以获得一个演示如何使用它的示例代码吗?

已编辑:稍后在问题中添加了 @Indexed 注释。

最佳答案

查看 Reference doc @Indexed

关于java - db4o 数据库有 15000+ 对象时导致 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12142625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com