5

在高复制数据存储(我使用 NDB)中,一致性是最终的。为了获得有保证的完整集,可以使用祖先查询。祖先查询还提供了一种很好的方法,可以通过 kindless 查询获取特定祖先的所有“孩子”。简而言之,能够利用祖先模型在 GAE 中非常有用。

我似乎遇到的问题相当简单。假设我有一个联系人记录和一个消息记录。给定的联系人记录被视为每条消息的祖先。但是,可能会为同一个人创建两个联系人(用户错误、不同的数据点等)。这种情况会产生两个联系人记录,其中包含与之相关的消息。

我需要能够“合并”两条记录,并将所有消息放入一大堆。理想情况下,我可以为记录的一个孩子修改祖先。

我能想到的唯一方法是创建一个映射并让我的应用程序检查记录是否已合并。如果有,请查看映射以找到一个或多个相关记录,并对这些记录执行查询。这似乎非常低效。是否有更多“按书本”的方式来处理这个用例?

4

1 回答 1

9

更改实体祖先的唯一方法是删除旧实体并使用新密钥创建新实体。必须对祖先路径中的所有子(和孙子等)实体执行此操作。如果这是不可能的,那么您列出的解决方案有效。

这是必需的,因为实体的祖先路径是其唯一键的一部分。实体的父级(即,祖先路径中的实体)不需要存在,因此更改父级的键将使子级在数据存储中没有父级。

于 2012-08-07T22:47:07.237 回答