3

假设我有以下实体类型:

class ExampleModel(db.Model):
    name = db.StringProperty()

mdl = ExampleModel(key_name='blah', name='abcd')
mdl.put()

两者之间是否有任何性能差异

ExampleModel.get_by_key_name('blah')

ExampleModel.all().filter('name = ', 'abcd').get()

如果存在性能差异,它(大约)是多少?ExampleModel有一个索引如何name影响结果?

4

1 回答 1

6

是的,存在性能(和价格)差异。

在查询情况下,您需要执行 2 次读取操作:

  • 1 在索引表中查找
  • 1 在实体表中查找

在 get_by_key 情况下,您只执行 1 次读取操作:

  • 1 查找实体表

另请注意,索引属性也会影响写入性能和成本,因为您需要在索引表中执行 1 次额外写入才能到达索引属性。

随意查看有关 Datastore 性能模式和反模式的演示文稿。通过单击Run每一侧的按钮,您可以看到每个代码片段的交互式 appstats 跟踪。

于 2013-01-05T01:58:25.423 回答