次のようなモデルの場合:
class Thing(ndb.Model):
visible = ndb.BooleanProperty()
made_by = ndb.KeyProperty(kind=User)
belongs_to = ndb.KeyProperty(kind=AnotherThing)
基本的に「or」クエリを実行しますが、さまざまなプロパティを比較するため、組み込みの OR を使用できません...現在のユーザーに設定されているか、現在のユーザーであるすべてのThing
(特定の に属する)を取得したい。AnotherThing
visible
True
visible
False
made_by
どちらがデータストアへの要求が少なくなります (つまり、経済的なコストが少なくなります):
クエリを実行してすべてを取得します。つまり
Thing.query(Thing.belongs_to == some_thing.key)
、結果を繰り返し処理し、表示されているものと、表示されていないが現在のユーザーによって作成されたものを格納します。表示されているものを取得するためのクエリ、つまり
Thing.query(Thing.belongs_to == some_thing.key, Thing.visible == "True")
、現在のユーザーが非表示のものを取得するために個別にクエリを実行します。つまり、Thing.query(Thing.belongs_to == some_thing.key, Thing.visible == "False", Thing.made_by = current_user)
?
番号 1. 他のユーザーによる不可視Thing
の s など、多くの不要な結果が得られます。これは、データストアの読み取りが多いと思いますか? 2. 2 つの完全なクエリですが、これも不必要に重い可能性がありますね。私はまだ、データベースとのどのような相互作用がどのような種類のコストを引き起こすのかを解明しようとしています.
関連する場合に備えて、必要に応じてndb、タスクレット、およびmemcacheを使用しています。