0

db4o中是否可以使用内部提交时间戳(因为 8.0 版 db4o 允许生成提交时间戳)查询自某个特定时间以来已更改的对象?

我知道它可能是这样的:

long last = DateTime.Now.Ticks;
var objectsChanged = from obj in GetAllObjectsInDatabase(session)
                     where session.Ext().GetObjectInfo(obj).GetCommitTimestamp() > last
                     select obj;

但是对于 1000 万个对象,遍历所有对象需要很长时间(以获得 3 个对象作为结果) - 在每个对象上创建我自己的提交时间戳并将其编入索引会快得多。

从某个时刻开始,有没有更快的方法来获取数据库的变化?

4

1 回答 1

1

嗯,不是正式的。但是 dRS 需要为复制()执行此操作。所以它是内部支持的。我没有正确检查。它是从复制代码中提取出来的。

爪哇:

Query query = container.query();
query.descend(VirtualField.COMMIT_TIMESTAMP)
    .constrain(lastCommitTimestamp).greater();
List<Object> result = query.execute();

所以在 C# 中它应该是:

IQuery query = container.Query();
query.Descend(VirtualField.COMMIT_TIMESTAMP)
   .Constrain(lastCommitTimestamp).Greater();
IList result = query.execute();

无论如何,没有受助者。它不被视为公共 API。但我认为非常接近你所需要的。

于 2013-03-18T13:28:56.563 回答