【问题标题】:Datastore why use key and id?Datastore 为什么使用 key 和 id?
【发布时间】:2013-03-27 01:22:44
【问题描述】:

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

【问题讨论】:

  • id 只是键的一部分,如果您选择,您可以控制它。阅读https://developers.google.com/appengine/docs/python/datastore/entities,它定义了密钥对您的作用/作用
  • 澄清一下,你必须同时拥有两者,因为密钥依赖于 id?
  • 是的,对于某些用例,您可能希望在键中显式设置 id。

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    所以,对于给定的实体类型,key 和 id 是完全一样的。

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

    【讨论】:

      猜你喜欢
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      相关资源
      最近更新 更多