数据存储为何使用密钥和id?

时间:2013-03-27 01:22:45

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

我对Google App Engine的数据存储使用密钥和ID的原因提出了疑问。来自关系数据库背景我将实体与行进行比较,那么为什么在存储实体时需要一个密钥(这是一个很长的自动生成的字符串)和一个ID(可以手动或自动输入)?这似乎是一个很大的浪费空间来识别记录。我再次对这种类型的数据库不熟悉,所以我可能会遗漏一些东西。

2 个答案:

答案 0 :(得分:1)

密钥设计是高效数据存储区运营的关键部分。密钥是存储在内置索引和自定义索引中的,当您查询时,您可以要求仅返回密钥(在Python中:keys_only=True)。仅密钥查询花费了常规查询的一小部分,无论是在$$还是在较小程度上,并且具有非常低的反序列化开销。

因此,如果您的密钥ID中存储了有用/有趣的内容,您可以执行仅限密钥的查询,并且非常便宜地获取大量有用的数据。

请注意,这会扩展到父键和命名空间,它们都是键的一部分,因此您可以“存储”有用数据并使用仅键查询检索所有数据的其他位置。

理解这是一项重要的优化,也是我们整体设计的重要组成部分。

答案 1 :(得分:0)

基本上,密钥是由两条信息构成的:

  • 实体类型(在Objectify中,它是对象的类)
  • 实体的ID /名称

因此,对于给定的实体类型,key和id完全相同。

如果您没有自己指定ID,则会生成随机ID,并根据该随机ID创建密钥。