Google Cloud Datastore / App Engine数据存储区允许实体拥有Key properties。他们有什么特别之处?
我问的原因是它们似乎在数据存储区中存储了额外的看似冗余的数据(例如App ID)。如果我自己滚动并将我的密钥引用保存为字符串,我会错过哪些功能?
答案 0 :(得分:1)
使用KeyProperty
的一个优点是能够直接导航到数据存储浏览器页面中引用实体的相应实体,这些属性被识别并且具有与之关联的链接(但仅限于它们不是&# 39; t 重复属性)。
如果使用Key ID
代替Jeff的答案中提到的到达相应的实体,则必须复制ID,切换到其他实体类型并按相应的ID搜索/过滤,这可以很乏味。
如果使用到达相应实体的密钥的某些其他编码,则甚至模式也很复杂,因为必须首先解码ID或密钥。
答案 1 :(得分:1)
主要区别在于密钥包含祖先的所有信息。因此,如果您有一个实体Photo,它是实体Album的子项,它是实体User的子项,拥有Photo实体的键更方便,因为您只需调用.get(key)
,否则您需要知道用于重建密钥的相册和用户ID。
如果您的对象已经拥有父实体的ID,或者您不使用父子关系,则存储ID占用的空间更少,需要更少的带宽(例如,要传输的JSON对象更小),这可能会也可能不会很重要为您的应用程序。
答案 2 :(得分:0)
关键属性没有什么特别之处。通过在存储的密钥上调用.get()
,这只是获取相关实体的便捷方式。
请注意,存储密钥不会存储应用ID。如果您备份数据存储并将其还原到其他应用,则所有存储的密钥都可以正常工作,因为它们不依赖于应用ID。
在我的应用程序中,更方便的是存储键的数字id(在整数属性中)而不是键本身。由于我知道这种类型,因此很容易使用get_by_id()
代替get()
。
您如何将密钥存储为字符串?我不希望你看到任何显着的尺寸减少,但你可以尝试每种方式,并使用技巧here比较实体大小。