【问题标题】:Cost of updating entities in datastore (and, possible to append properties)?更新数据存储中的实体的成本(并且可能附加属性)?
【发布时间】:2013-03-18 07:53:50
【问题描述】:

我有一个两部分的问题。

假设我有一个带有 blob 属性的实体...

# create entity

Entity(ndb.Model):
    blob = ndb.BlobProperty(indexed=False)

e = Entity()
e.blob = 'abcd'
e_key = e.put()


# update entity

e = e_key.get()
e.blob += 'efg'
e.put()

所以问题是:

  1. 我第一次 put() 那个实体时,成本是 2 Write Ops;如上例所示,更新实体需要多少 Ops?

  2. 当我向属性添加 'efg' 时,必须先将旧属性读入内存,应用引擎是否提供了一种无需先读取旧值即可追加旧值的方法?

【问题讨论】:

    标签: google-app-engine google-cloud-datastore


    【解决方案1】:

    没有部分更新。每次覆盖整个实体。索引的数量也会对成本产生影响。您可能想查看https://developers.google.com/appengine/articles/life_of_write 以了解发生的详细情况。

    【讨论】:

    • 所以更新实体的成本与创建它的成本完全相同?即使我只更改一个属性,其他属性也会被“自己”覆盖?这似乎效率低下。
    • 这就是它的工作方式,我们不再是堪萨斯 Toto 了 ;-) 虽然更新比创建成本更高,因为您需要先读再写。
    • “我们不在堪萨斯州了 Toto” ...是否有另一条评论被删除,谁是 Toto :P ?谢谢。
    • 在这种特殊情况下,更新的成本与写入的成本相同。当您有一个具有多个属性的实体时,写入实体的写入成本和更新索引的写入成本。在更新期间不更改的属性不会产生更新索引的成本,因此更新可能比初始写入成本更低。
    猜你喜欢
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多