2

put_async() を使用して、880 行を NDB データストアにインポートするアプリケーションがあります。このインポートを実行するたびに、データストアへの 50,000 回の書き込み操作の 1 日あたりのクォータを超えます。

なぜこの操作が非常に高価なのか、割り当てを下回るようにするにはどうすればよいのかを理解しようとしています。

次のような 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()

インデックスを 1 つに戻しました。

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

SDK データストア ビューアーによると、各行は 29 回の書き込み操作であるため、25520 回の書き込みが生成されます。インデックスが残りの書き込み操作を消費すると想定していますが、AppEngine はクォータを超えたと言っているだけなので、正確な数はわかりません。

書き込み操作の数を減らすための最善の戦略は何ですか?

4

2 に答える 2

8

text プロパティと blob プロパティを除くすべてのプロパティは、既定でインデックスが作成されます。したがって、文字列プロパティのインデックスを解除しても、float、int、および date プロパティはすべて引き続きインデックス付けされます。indexed=False書き込みを減らすには、他のプロパティに追加する必要があります。

index.yaml にリストされているインデックスは、プロパティ インデックスへの追加のインデックスです。index.yaml インデックスは、順序付きクエリやリレーショナル クエリなどに使用されます (つまり、date > date_property のクエリは index.yaml にエントリを生成します)。

于 2013-06-13T04:38:20.723 に答える