Google App Engine数据存储区 - 键与标识符

时间:2015-02-17 17:39:47

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

我遇到的一个决定是如何处理实体的密钥或嵌入ID的传递。考虑到使用数据存储区密钥内置的编码器和编组方法,每个似乎都同样可行,但我想知道是否有任何关于此选择的最佳实践。一个示例可能是访问用户文件的URL,其中用户具有默认的自动生成的数字ID,格式为:website.com/users/{userIdentifier}/files

我正在尝试确定数据存储区中嵌入的数字是否优于实际的键字符串本身。在野外放置数据存储密钥是否安全?我想标准化我们在整个系统中处理这些标识符的方式,并且想知道是否有任何最佳实践。

2 个答案:

答案 0 :(得分:4)

使用完整密钥而不是标识符的唯一原因是在不传递其他数据的情况下获取密钥本身中嵌入的祖先信息。虽然在某些情况下这可能很方便,但我认为在应用程序中使用密钥作为标准参考方法是非常有利的。

使用标识符的优点更为实际:(a)它们更小,(b)它们不会透露任何有关其祖先的信息(这可能是也可能不是问题)。

较小的尺寸经常发挥作用:您可能希望在URL中使用id,在memcache中保存id列表(限制为1MB)等。

答案 1 :(得分:1)

数据存储区密钥包含(至少)下一条信息:

  • 参考祖先
  • String或Int ID

您真的需要/想要传入URL或保留在您的数据库AppID&样的?

比较这两个网址(逻辑上,如果是密钥,它可能会用urlsafe()编码):

  • /列表的订单?用户= 123
  • /列表的订单?用户=用户/ 123

或者这2个字段:

Table: Orders
---------------------
| UserKey  | UserID |
---------------------
| User/123 | 123    |
---------------------

为什么要保持&传递关于app&的重复信息类?通常,您的应用程序引用其自己的实体,并且列类型或参数名称已知类型。

除非你在几个应用程序之间构建一些编排/集成,否则使用ID会更有效。