Google App Engine上的动态属性与固定属性查询速度

时间:2012-05-15 13:14:38

标签: python google-app-engine nosql google-cloud-datastore

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

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

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中会更快?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

即使它不是你要求的,我认为它可能会给你一个想法 Is there some performance issue between leaving empty ListProperties or using dynamic (expando) properties?