del*_*ine 12 google-app-engine google-cloud-datastore
我最近一直在玩谷歌应用引擎及其数据存储,并使用参考属性创建了数据模型和关系.
但是我不清楚祖先在数据存储区的概念.他们的目的是什么,我为什么要使用它们?它们如何与数据存储区实体的引用属性相关?
小智 17
实体组/祖先的另一个好处是创建一致性强的岛屿(而不是最终的一致性).
例如,您可以拥有一个项目及其任务.如果没有祖先,您可以"关闭"任务,返回项目的任务列表屏幕,并查看打开的任务.由于最终的一致性,您刚刚关闭的任务仍然可能会显示出来.可能已针对尚未复制更新的服务器解析了该查询.
但是,与祖先一样,你会获得很强的一致性.因此,不是从任务到项目的简单外键,而是将项目作为项目任务的祖先.现在,在查询任务时,通过提供项目密钥使其成为祖先查询.结果将非常一致,您刚关闭的任务将不会成为结果的一部分.
通常使用的例子是作者和他们的书.
每本书都作为一个单独的实体存储在数据存储区中,并将其名称和作者存储为模型中的字段.
如果您想了解单个作者的所有书籍,您可以运行查询
book.author == desired_author
Run Code Online (Sandbox Code Playgroud)
但是对于祖先,你也可以保存每本书并设置一个模型(一个新的作者模型)作为它的父母(它的祖先).
所以现在你可以简单地说"向我展示所有以这位作者为父母的书".
或者更确切地说"告诉我这个祖先的所有孩子",并返回该作者的所有书籍.
在这个例子中它似乎没有用,但是如果你想象而不是"作者"你有"用户"而不是"书"你有"留言板信息"和成千上万的消息,突然它变得非常方便能够找到用户的所有消息(例如,显示我自己的消息).
https://developers.google.com/appengine/docs/python/datastore/queryclass#Query_ancestor
ancestor (ancestor)
Adds an ancestor filter to the query. The query will return only entities with the specified ancestor.
Run Code Online (Sandbox Code Playgroud)
找到我期望的每条记录的成本也有好处.
| 归档时间: |
|
| 查看次数: |
4208 次 |
| 最近记录: |