我正在考虑为我的应用程序组织数据的方法。
我正在考虑的一个数据模型需要拥有实体,其中每个实体最多可包含100个重复的StructuredProperties。 StructuredProperties主要是很少阅读和更新。我的问题是 - 如果我更新任何StructuredProperties,整个实体是否会从Memcache中删除,整个实体是否会从ndb重新读取?或者它只是重新读取的单个StructuredProperty?这与LocalStructuredProperty有什么不同?
更一般地说,StructuredProperties如何在内部组织?在我可以使用多个Float或Int属性的情况下 - 我使用StructuredProperty而不仅仅是为了让我的模型更具可读性 - 这是一个坏主意吗?如果我正在阅读具有100个StructuredProperties的实体,我是否必须进行100次rpc调用,或者是作为原始实体的一部分批量检索的属性?
答案 0 :(得分:1)
StructuredProperty
属于包含它们的实体 - 所以你的假设是
更新单个StructuredProperty
将使memcache失效是正确的。
LocalStructuredProperty
是相同的行为 - 但优点是每个
LocalStructuredProperty
上的属性被混淆为二进制存储 - 数据存储区
不知道LocalStructuredProperty
的结构。 (可能有反序列化
计算成本归因于这些属性 - 但这在很大程度上取决于数量
他们包含的数据,我想。)
相比之下,StructuredProperty
实际上可以使其子属性可用
在大多数情况下查询索引 - 允许您执行复杂的查找。
请注意 - 您应该为包含的实体调用put()
,为每个实体调用而不是
StructuredProperty
或LocalStructuredProperty
- 所以你应该看到一个RPC
要求更新该父实体 - 无论存在多少重复属性。
我建议使用包含StructuredProperty
的{{1}}
而不是制作整数和浮点数的“并行列表” - 这会增加python的复杂性
模型,正是ndb.IntegerProperty(repeated=True)
努力取代的行为。