2

我有一个使用 put_async() 将 880 行导入 NDB 数据存储的应用程序。每当我运行此导入时,它都会超过 50,000 次数据存储的每日写入操作配额。

我试图理解为什么这个操作如此昂贵,以及可以做些什么来保持在配额之下。

有 13 列,如下所示:

stringbool = ['true', 'false']
class BeerMenu(ndb.Model):
  name = ndb.StringProperty()
  brewery = ndb.StringProperty()
  origin = ndb.StringProperty()
  abv = ndb.FloatProperty()
  size = ndb.FloatProperty()
  meas = ndb.StringProperty()
  price = ndb.FloatProperty()
  active = ndb.StringProperty(default="false", choices=stringbool)
  url = ndb.StringProperty()
  bartender = ndb.StringProperty()
  lineno = ndb.IntegerProperty()
  purdate = ndb.DateProperty()
  costper = ndb.FloatProperty()

我已将索引修剪回一个:

- kind: BeerMenu
  properties:
    - name: brewery
    - name: name

根据 SDK 数据存储查看器,每行是 29 次写入操作,因此将生成 25520 次写入!我假设索引消耗了其余的写操作,但我不知道具体有多少,因为 AppEngine 只是说我已经超过了配额。

减少写入操作次数的最佳策略是什么?

4

2 回答 2

8

默认情况下,除了 text 和 blob 属性之外的所有属性都被索引。因此,如果您取消对字符串属性的索引,所有浮点、整数和日期属性仍会被索引。您应该添加indexed=False到其他属性以减少写入。

index.yaml 中列出的索引是属性索引的附加索引。index.yaml 索引用于有序查询和关系查询(即,日期 > date_property 的查询将在 index.yaml 中生成一个条目)。

于 2013-06-13T04:38:20.723 回答
1

在这里,查看数据存储调用的成本部分,让您了解更多:

付费应用程序:预算、计费和购买资源

希望这也有帮助。

于 2013-06-15T18:49:57.987 回答