1

私はデータストアモデルを設計しており、クエリフィルターがどのように機能するかを考えるときに最適なアプローチを決定しようとしています。

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つの方法のどちらが高速でしょうか。

4

2 に答える 2

3

まったく違いはありません。プロパティが「動的」であるかどうかに関係なく、モデルはデータストアで同じように見えます。唯一の違いは、値が設定されていない標準のプロパティ クラスは、値が設定されたフィールドをNoneデータストアに挿入することです。これには余分なスペースが必要ですが、値が設定されていないユーザーに対してクエリを実行できます。

于 2012-05-16T04:57:03.887 に答える
2

それがあなたが求めているものと正確に一致していなくても、それはあなたにアイデアを与えるかもしれないと思います.
空の ListProperties のままにするか、動的 (expando) プロパティを使用するかの間に、パフォーマンス上の問題はありますか?

于 2012-05-15T13:47:43.470 に答える