0

它是正在写入的实体的最近还是最远的父亲属,它决定了实体组?(问题 1)因为,如果我有,

两个同时请求写入两个不同的实体,在此示例中,它们都具有 Data 实体的直接父级(键为“2”),并且具有以下祖先:

Person:9 > Collection:3 > Script:4 > Data:2 > Record of Tom Cruise
Person:9 > Collection:3 > Script:4 > Data:2 > Record of Shia La Boef

在任何一种情况下,它们都属于同一个实体组,要么锚定在实体 Person:9,要么锚定在实体 Data:2。哪个是实体组的正确确定者,Person:9 或 Data:2?此外,如果有两种从 Data:2 派生的实体,比如 Record 和 Scheme,那么所有 Record 和 Scheme 实体是否属于同一个实体组,由 Data:2 锚定,或者由于是不同的种类而属于单独的实体组?(问题2

顺便说一句,如果是 Person:9 确定了实体组,并且父级下的不同种类不会在该父级下形成不同的实体组,那么Person:9 继承的所有内容都是同一个实体组,并且必须编写在系列中,恐怖

由于在此示例中,我同时对同一个实体组执行这些相同类型的实体的写入,因此它们将被连续应用,因此与可以同时应用它们相比,需要“双倍的时间”。

对于这种“加倍”时间,有什么好的解决方案?(问题 3 - 可选!

我想到了以下几点:

因为我知道两个单独的写入必须由两个单独的客户端实例启动,所以我可以向链中添加另一个祖先,它表示执行写入的客户端实例,如下所示:

Person:9 > Collection:3 > Script:4 > Data:2 > **Client:92** > Record of Tom Cruise
Person:9 > Collection:3 > Script:4 > Data:2 > **Client:37** > Record of Shia La Boef

这样,写入将属于不同的实体组(只要 Person:9 锚定该组的假设是错误的),因此始终可以同时执行。AppEngineer/专家可以对此进行权衡吗?(问题4

此外,由于我强制限制单独的客户端只能向数据存储发出串行请求,并且我可以保证单个客户端进行的任何写入永远不会超过每秒 1 次,如果没有任何性能影响,则上述方法,如果它有效,意味着对性能的影响为零,只要我有足够的独立客户端(而且,他有足够的配额),我可以尽可能快地对数据存储进行尽可能多的写入,就像 HTTP 可以携带它们一样快。AppEngineer/专家可以对此进行权衡吗?(问题 5 )

我看到的这种组拆分方法的唯一问题是,查询 Data:2 父项下的 Record 实体现在很复杂,因为即使记录在语义上相关,它们也被不同的客户端分开。所以为了收集所有的记录,我需要先收集所有的客户,然后收集所有的记录。任何人都可以看到这是否会产生极其可怕的性能影响,执行这种“查询您刚刚查询的孩子的所有孩子”查询......?AppEngineer/专家可以对此进行权衡吗?(问题 6 )

4

1 回答 1

2

你在这里有一些误解。

首先,文档对实体组的构成非常明确:它是根实体下的所有内容。

但是,我不知道您从哪里得到这样的想法,即在实体组中写入在某种程度上比在实体组外部更“连续”。文档没有说,或暗示它。它唯一提到的一点是,对单个实体组的写入速度不超过每秒 1 次。

您的其余问题根本没有意义:向链中添加另一个元素不会更改根实体。

我不确定你为什么首先需要如此深的实体组链。文档关于扩展的建议是保持实体组较小。如果每个叶子实体只会被一个客户端写入,听起来客户端本身应该是根,路径的其余部分根本不应该是祖先的一部分:也许你可以使用 ReferenceProperty 来引用这些实体中的一个或多个通过其密钥。

于 2013-04-15T11:39:38.360 回答