使用key_name查询和属性之间的性能差异

时间:2013-01-04 23:52:59

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

假设我有以下实体类型:

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的{​​{1}}索引如何影响结果?

1 个答案:

答案 0 :(得分:6)

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

在查询案例中,您需要执行2次读取操作:

  • 索引表中的1个查找
  • 实体表中的1次查找

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

  • 1查找实体表

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

请随时查看this presentation有关数据存储区性能模式和反模式的信息。通过单击每侧的Run按钮,您可以看到每个代码段的交互式appstats跟踪。