1

データセットに対して継続的な集計を行う必要があります。アプリ エンジンの高レプリケーション データストアを使用しています。

作成された日付の文字列を保持するプロパティを持つ単純なオブジェクトがあるとします。オブジェクトに関連付けられた他のフィールドがありますが、この例では重要ではありません。

いくつかのオブジェクトを作成して保存するとしましょう。以下は、各オブジェクトに関連付けられた日付です。各オブジェクトは以下の順序で格納されます。これらのオブジェクトは、別のトランザクションで作成されます。

Obj1: 2012-11-11
Obj2: 2012-11-11
Obj3: 2012-11-12
Obj4: 2012-11-13
Obj5: 2012-11-14

アイデアは、カーソルを使用して、新しいインデックス付きオブジェクトを継続的にチェックすることです。新しいインデックス付きエンティティの集計が実行されます。

ここに私が持っている質問があります:

1) オブジェクトは順番に索引付けされていますか? Obj4 が Obj 1、2、および 3 の前にインデックス付けされる可能性はありますか? ORDER BY クエリとカーソルを使用して検索を続けると、これが問題になります。インデックス作成に遅延があると、一部のエンティティが見つかりません。

2) ORDER BY が指定されていない場合、エンティティはクエリでどのような順序で返されますか?

3) 新しいインデックス付きエンティティを確認するにはどうすればよいですか? のように、すべてのエンティティを取得し、カーソルを保存してから、最後のクエリ以降に新しいエンティティがインデックス付けされているかどうかを後で確認しますか?

それほど重要ではありませんが、検討の材料に

4) すべてのフィールドが一緒に索引付けされていますか? たとえば、日付プロパティがあり、名前プロパティがある場合、特定のオブジェクトに対して両方のプロパティが同時にインデックス付けされているように見えますか?

5) 複数のエンティティが同じトランザクションで書き込まれる場合、トランザクション内のすべてのエンティティが同時にインデックス化されますか?

6) すべてのエンティティが同じエンティティ グループに属している場合、すべてのエンティティが同時にインデックス化されていますか?

回答ありがとうございます。

4

1 に答える 1

1
  1. すべてのエンティティには、すべてのプロパティのデフォルト インデックスがあります。を使用するORDER BY somePropertyと、そのプロパティの値で並べ替えられたエンティティが取得されます。インデックスの構築については正しいです。クエリはインデックスを使用し、インデックスは非同期で構築されます。つまり、エンティティが追加された直後にクエリがエンティティを見つけられない可能性があります。

  2. ORDER BYデフォルトはASC、つまり昇順です。

  3. タイムスタンプをエンティティに追加し、createdそれで並べ替えてカーソルを繰り返します。カーソルとデータの更新を参照してください。

  4. インデックスはput()操作が戻った後に構築されます。それらも並行して構築されます。つまり、クエリを実行すると、一部のインデックスが構築される場合と構築されない場合があります。データストア書き込みの寿命を参照してください。エンティティに「適用」を強制したい場合は、 get()afterを発行できますput()。これにより、変更が強制的に適用されます (= インデックスが書き込まれます)。

  5. 6. 同じトランザクションで使用されるすべてのエンティティは、同じエンティティ グループに属している (= 共通の親を持つ) 必要があります。トランザクション分離のドキュメントには、トランザクションが適用されない可能性があると記載されています。つまり、その後のクエリでput()は新しいエンティティが見つかりません。繰り返しますが、読み取りクエリまたは祖先クエリを介してエンティティを強制的に適用できます。

于 2012-12-18T13:39:13.423 に答える