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;

ただし、1,000万個のオブジェクトの場合、すべてのオブジェクトを反復処理するには(結果として3つのオブジェクトを取得するために)時間がかかります。各オブジェクトに独自のコミットタイムスタンプを作成してインデックスを作成する方がはるかに高速です。

ある瞬間からDBの変更を取得するためのより速い方法はありますか?

4

1 に答える 1

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 とは見なされません。しかし、私はあなたが必要とするものに非常に近いと思います。

于 2013-03-18T13:28:56.563 に答える