0

NDB に新しく追加されたモデルの最新のエントリを取得するにはどうすればよいですか?

1: 同じ親キーを使用する場合は? 方法 ?

私は文書が書かれているのを見ます

キーが同じルートを持つエンティティは、エンティティ グループまたはグループを形成します。エンティティが異なるグループにある場合、それらのエンティティへの変更が「順不同」に発生したように見えることがあります。アプリケーションのセマンティクスでエンティティが無関係であれば、問題ありません。ただし、一部のエンティティの変更に一貫性を持たせる必要がある場合は、アプリケーションでエンティティを作成するときにそれらを同じグループの一部にする必要があります。

これは、同じ親キーで順序が挿入順序であることを意味しますか?

しかし、最後のものを取得する方法は?

2: 同じ親キーを使用しない場合 (モデルは同じ)? 方法 ?

4

1 に答える 1

4

結果整合性に問題がない場合 (つまり、最新の整合性がすぐに表示されない場合)、DateTimeProperty を auto_now_add=True で追加し、そのプロパティでソートするクエリを実行して最新の整合性を取得できます。(予想とは異なる順序で並んで保存されている複数のエンティティが存在する可能性があるため、これもおおよその値です。)

正確に正確にする必要がある場合、私が確認できる唯一の方法は、最新のエントリへの参照を保持するエンティティを作成し、作成中のエントリと同じトランザクションでそのエンティティを更新することです。何かのようなもの:

class LatestHolder(ndb.Model):
    latest = ndb.KeyProperty('Entry')

# code to update:

@ndb.transactional(xg=True)
def put_new_entry(entry):
    holder = LatestHolder.get_or_insert(name='fixed-key')
    holder.latest = entry
    holder.put()
    entry.put()

ここでは、ホルダー クラスの親を持たない、グローバルに固定されたキー名を使用していることに注意してください。これがボトルネックです。「最新のエントリ」が特定の親からのみ必要な場合は、異なる親を持つ複数の LatestHolder エンティティを作成することをお勧めします。この場合、親キーを get_or_insert に渡すだけです。

于 2013-03-02T17:05:52.407 に答える