【问题标题】:on google app engine are how are StructuredProperties updated?在谷歌应用引擎上,StructuredProperties 是如何更新的?
【发布时间】:2014-04-24 09:38:20
【问题描述】:

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

我正在考虑的一个数据模型需要拥有每个实体最多可以包含大约 100 个重复的 StructuredProperties 的实体。 StructuredProperties 主要是很少被读取和更新。我的问题是 - 如果我更新任何那些 StructuredProperties,整个实体会从 Memcache 中删除,并且整个实体会从 ndb 中重新读取吗?还是只是一个 StructuredProperty 会被重读?这与 LocalStructuredProperty 有什么不同吗?

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

【问题讨论】:

  • 您查看过文档吗?都在那里:developers.google.com/appengine/docs/python/ndb/…
  • 我读了好几遍,并没有真正回答我的问题。但是通过试验 appstat 我想我现在更好地理解了这种情况。我的理解是,如果我更改了结构化属性之一,整个实体将从 memcache 中删除,并将在连续请求时从 ndb 重新读取。
  • 这是正确的,具有所有 StructuredProperties 的单个实体将在单个 rpc 中检索

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


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多