2013-03-10 116 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