谷歌应用程序引擎是如何更新StructuredProperties?

时间:2014-04-24 09:38:21

标签: google-app-engine python-2.7 google-cloud-datastore datamodel

我正在考虑为我的应用程序组织数据的方法。

我正在考虑的一个数据模型需要拥有实体,其中每个实体最多可包含100个重复的StructuredProperties。 StructuredProperties主要是很少阅读和更新。我的问题是 - 如果我更新任何StructuredProperties,整个实体是否会从Memcache中删除,整个实体是否会从ndb重新读取?或者它只是重新读取的单个StructuredProperty?这与LocalStructuredProperty有什么不同?

更一般地说,StructuredProperties如何在内部组织?在我可以使用多个Float或Int属性的情况下 - 我使用StructuredProperty而不仅仅是为了让我的模型更具可读性 - 这是一个坏主意吗?如果我正在阅读具有100个StructuredProperties的实体,我是否必须进行100次rpc调用,或者是作为原始实体的一部分批量检索的属性?

1 个答案:

答案 0 :(得分:1)

StructuredProperty属于包含它们的实体 - 所以你的假设是 更新单个StructuredProperty将使memcache失效是正确的。

LocalStructuredProperty是相同的行为 - 但优点是每个 LocalStructuredProperty上的属性被混淆为二进制存储 - 数据存储区 不知道LocalStructuredProperty的结构。 (可能有反序列化 计算成本归因于这些属性 - 但这在很大程度上取决于数量 他们包含的数据,我想。)

相比之下,StructuredProperty实际上可以使其子属性可用 在大多数情况下查询索引 - 允许您执行复杂的查找。

请注意 - 您应该为包含的实体调用put(),为每个实体调用而不是 StructuredPropertyLocalStructuredProperty - 所以你应该看到一个RPC 要求更新该父实体 - 无论存在多少重复属性。

我建议使用包含StructuredProperty的{​​{1}} 而不是制作整数和浮点数的“并行列表” - 这会增加python的复杂性 模型,正是ndb.IntegerProperty(repeated=True)努力取代的行为。