通过提交时间戳查询对象

时间:2013-03-10 20:24:25

标签: c# db4o

是否可以在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;

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

从某个时刻起,是否有更快的方式来获取数据库中的更改?

1 个答案:

答案 0 :(得分:1)

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

爪哇:

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。但我认为非常接近你所需要的。