私はデータストアモデルを設計しており、クエリフィルターがどのように機能するかを考えるときに最適なアプローチを決定しようとしています。
2つの例を書き出すだけで最適です。最初の例は、「male」または「female」のいずれかに設定できる文字列のみを含む固定の「gender」プロパティがある場合です。
class Person(db.Model):
name = db.StringProperty()
gender = db.StringProperty()
p1 = Person(name="Steve", gender="male")
p2 = Person(name="Jane", gender="female")
p1.put()
p2.put()
males = db.GqlQuery("SELECT * FROM Person WHERE gender = :1", "male")
2番目の例は、Personエンティティがexpandoモデルであり、「is_male」または「is_female」動的プロパティを動的に設定する場合です。
class Person(db.Expando):
name = db.StringProperty()
p1 = Person(name="Steve")
p1.is_male = True
p1.put()
p2 = Person(name="Jane")
p2.is_female = True
p2.put()
males = db.GqlQuery("SELECT * FROM Person WHERE is_male = :1", True)
ここで、数百万のレコードを収集し、クエリを実行したいとします。Python2.7を実行している本番環境のGoogle App Engineで、上記の2つの方法のどちらが高速でしょうか。