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

kol*_*vra 3 python google-app-engine google-cloud-datastore

假设我有以下实体类型:

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

mdl = ExampleModel(key_name='blah', name='abcd')
mdl.put()
Run Code Online (Sandbox Code Playgroud)

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

ExampleModel.get_by_key_name('blah')
Run Code Online (Sandbox Code Playgroud)

ExampleModel.all().filter('name = ', 'abcd').get()
Run Code Online (Sandbox Code Playgroud)

如果有性能差异,它(大致)多少钱?如何ExampleModel获得name影响结果的指数?

pro*_*ppy 6

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

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

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

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

  • 1查找实体表

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

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