根据提交时间戳查询对象

本文关键字:查询 对象 时间戳 提交 | 更新日期: 2023-09-27 18:03:09

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

我知道这是可能的:

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

但是对于1000万个对象,遍历它们需要很长时间(得到3个对象作为结果)——在每个对象上创建我自己的提交时间戳并索引它会快得多。

是否有一些更快的方法来获得DB从某个时刻的变化?

根据提交时间戳查询对象

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

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。但我觉得已经很接近你需要的了。