1

我正在设计数据存储模型,并在考虑查询过滤器的工作方式时尝试确定最佳方法。

最好只写两个例子。第一个例子是如果我有一个固定的“性别”属性,只有一个可以设置为“男性”或“女性”的字符串。

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")

第二个例子是如果 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)

现在假设我们收集了数百万条记录并且我们想要进行查询,在运行 Python 2.7 的生产 Google App Engine 中,上述两种方法中的哪一种会更快?

4

2 回答 2

3

绝对没有区别 - 无论属性是否“动态”,模型在数据存储中看起来都是一样的。唯一的区别是没有设置值的标准属性类将None在数据存储中插入一个具有值的字段,这会占用一些额外的空间,但允许您查询未设置该值的用户。

于 2012-05-16T04:57:03.887 回答
2

即使它不完全是你所要求的,我认为它可能会给你一个想法。
保留空 ListProperties 或使用动态(扩展)属性之间是否存在一些性能问题?

于 2012-05-15T13:47:43.470 回答