【问题标题】:Does usage of customer key id generates additional GAE datastore write operation?使用客户密钥 ID 是否会生成额外的 GAE 数据存储写入操作?
【发布时间】:2014-05-21 12:05:29
【问题描述】:

假设我有以下课程:

class Data(ndb.Model):
    data = ndb.StringProperty(required=True, indexed=False)

以下两种情况下写操作的次数是否相等:

record = Data()
record.data = data_string
record.put_async()

record = Data(id=data_string) # custom id is used
record.data = data_string
record.put_async()

或者,第二种情况需要更多的写操作? Understanding write cost谷歌文章没有澄清它。

【问题讨论】:

  • 为什么你会认为自定义 id 需要更多操作?
  • @JimmyKane,我只是不知道。自动 ID/名称是数字,如果我手动分配它 - 它可能是字符串。另外,我不知道它在 GAE 方面是如何工作的 - 可能,当我分配自定义 id 时,它仍然会保留(并写入)某个自动 id。
  • 您是否通过 appstats 对其进行了分析? developers.google.com/appengine/docs/python/tools/appstats
  • @PaulCollingwood,不,我没有。它提供这样的细节吗? (以前从未使用过 appstats)
  • 是的,它配置文件等。

标签: google-app-engine app-engine-ndb quota


【解决方案1】:

您不需要在第二个示例中存储 data_string 两次。如果使用字符串创建实体键,则可以从键中提取回来。

因为你没有索引这个属性,但是写入成本是一样的,但是数据量会更小。

【讨论】:

  • 我可以将数据存储为密钥吗?没有其他财产?据我记得 Google 文档,将 None 存储为 data 值也会花费我 1 次操作。
  • 如果属性被索引,存储 None 将花费您 2 次操作。我认为未编入索引的财产不会花费任何费用。顺便说一句,我使用的是低级 Java API,如果相应的数据对象属性为空、空或具有默认值,则该 API 允许我在数据存储实体中没有属性。我不知道Python中是否有等价物。
猜你喜欢
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多