2

私はモデルを持っています:

class MyModel(db.Model):
  some_list = db.StringListProperty(indexed=True)
  some_value = db.StringProperty(indexed=True)

および複合インデックス:

indexes:
- kind: MyModel
  properties:
  - name: some_list
  - name: some_value

新しいエンティティを作成する場合:

entity = MyModel(some_list=['a', 'b'], some_value='xxx')

次に、それをデータストアに入れます。

key = entity.put()

これにより、

  • 2回の書き込み(この場合は2回の書き込み)
  • インデックス付きプロパティ値ごとに2回の書き込み(この場合は2 + 4回の書き込み)
  • 複合インデックス値ごとに1つの書き込み(この場合は2つの書き込み)

この場合、合計10回の書き込みが行われます。これまでのところ、私はドキュメントを理解しています。

しかし今、私は既存のプロパティを取得し、some_listに「c」を追加して元に戻します。

existing = MyModel.get(key)
existing.some_list.append('c')
existing.put()

データストアへの書き込みはいくつですか?

ドキュメントには次のように書かれています。

変更されたインデックス付きプロパティ値ごとに1つの書き込み+4つの書き込み+変更された複合インデックス値ごとに2つの書き込み

これは、some_listの「a」と「b」のインデックスを書き直す必要がないことを意味しますか?

1 + 4 + 2=7書き込み

または、some_listが変更されたため、some_listの「a」と「b」のインデックスが書き直されました。

1 + 12 + 6=19書き込み

4

1 に答える 1

4

(複合インデックスなし)appstatsは次のように表示されますbilled_ops

1番目のプット:

@ 2ms datastore_v3.Put real = 169ms api = 0ms cost = 800 billed_ops = [DATASTORE_WRITE:8]

  • 1エンティティテーブルに書き込みます
  • 1種類のインデックステーブルに書き込みます
  • some_value2インデックステーブルへの書き込み(asc / desc)
  • インデックステーブルへの書き込み4some_list回(付加価値ごとに2回、asc / desc)

2番目のput(update)の場合:

@ 187ms datastore_v3.Put real = 50ms api = 0ms cost = 300 billed_ops = [DATASTORE_WRITE:3]

  • 1エンティティテーブルに書き込みます
  • インデックステーブルへの2回の書き込みsome_list(付加価値ごとに2回、asc / desc)

ドキュメントによると4 writes per modified indexed property value、各リストプロパティ要素には独自のインデックス行(値ごとに1行)があるため、要素を追加することは、新しいインデックス付きプロパティを作成することと同じです(変更しない)。

ただし、を変更するsome_valueと、次のようになります。

@ 484ms datastore_v3.Put real = 46ms api = 0ms cost = 500 billed_ops = [DATASTORE_WRITE:5]

  • 1エンティティテーブルに書き込みます
  • インデックステーブルへの4回の書き込みsome_value(既存の行asc / descを削除するための2回の書き込み、新しい行asc /descを追加するための2回の書き込み)
于 2012-08-28T16:02:08.217 に答える