entity_key.get()和Model.get_by_id(entity_key_id)之间的性能差异?

时间:2016-09-26 17:22:20

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

我有2个选项来代表其他MyData实体的相关MyData2实体:

class MyData(ndb.Model):
    ...

class MyData2(ndb.Model):
    data_key = ndb.KeyProperty(kind='MyData')  # data's key
    data_key_id = ndb.IntegerProperty()        # data's key ID

因此,获得MyData实体的MyData2密钥或密钥ID的成本几乎相同。

按密钥

访问MyData之间是否存在显着的性能差异
my_data = my_data2.data_key.get()

并通过密钥ID访问它?

my_data = MyData.get_by_id(my_data2.data_key_id)

我认为密钥ID的访问使用内置的索引查找,但我不知道直接密钥访问是否进行类似的查找或使用其他方法来获取实体。

所有实体都是根实体,不涉及实体组的祖先关系。

1 个答案:

答案 0 :(得分:2)

ndb.Model.get_by_id只是创建当前模型的种类的密钥,并在其上调用get,因此它们的所有意图和目的相同。

由于异步间接,以及Model如何重新声明处理冲突的方法,它不是最清晰的代码,但你可以看到它here