2013-03-10 114 views
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; 

但10milion对象,它需要年龄通过所有这些迭代(获得3个对象的结果) - 这将是更快速地创建每个对我自己的提交时间戳和索引它。

从某个时刻开始,在数据库中获取更改有没有更快的方法?

回答

1

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

的Java:

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

+0

谢谢,这一个工程:IQuery query = session.Query(); query.Descend(VirtualField.CommitTimestamp).Constrain(ticks).Greater(); – 2013-03-19 18:59:19