2012-08-25 6 views
9

何らかの理由で、既存のエンティティを書くことは、新しいエンティティを作成するよりも、それほど高価ではないにしても、それほど高価ではないという印象を受けました。エンティティを小さなエンティティに分割する方法で、プロパティを変更すると書き込みコストが少なくて済むようにします。しかし、documentationで今見ている、それは既存のエンティティプットは以下の費用があると述べている:+ 2個の書き込み 修正複合インデックス値ごとに変更インデックス付きプロパティ値ごとに既存のエンティティをGoogle App Engineに入れよう

1書き込み+ 4件の書き込みを

私のコードの構造全体を変更する前に、私が詳細を理解していることを確認したいと思います。インデックスを「変更済み」として正確に修飾するものは何ですか? 4つのインデックス付き文字列プロパティと複合インデックスがないとします。これを新しいエンティティーにするには、(2 + 2(indexed properties))という書き込み10を要します。これらの文字列プロパティの1つを変更して戻すとします。そのコスト5は、(1 + 4 per modified index)と書いてもらえますか?私は何か不足していますか?私が考慮する必要があるものはありますか?

インデックス付きのプロパティが4つと非インデックスのプロパティが1つのみで、インデックスなしのプロパティのみを変更するとどうなりますか?

+0

もし私ができれば、私はこれをもう一度upvoteしたいと思います。 – dragonx

+1

また、SDK 1.7.1では、AppStatsが操作のコスト(有効にする必要がある)に関する統計情報を提供するので、これは本当に簡単にテストできます。それは、それぞれの操作がどのくらいの数の書き込みが行われたかを正確に伝えます。本当に便利な新機能。 –

答えて

3

あなたのすべての仮定は正しいです。それはあなたが書いているものが何であるかを知っているなら助けます。作成時の索引付きプロパティーごとの2つの書き込みは、各プロパティーの昇順および降順の単一プロパティー索引用であり、更新時の索引付きプロパティーごとの4つの書き込みは、古い値を削除し、それらの昇順索引および降順索引に挿入することです。

1

インデックス付きの3つのプロパティ(リストの1つ)とインデックスなしのプロパティが4つあるモデルを更新した実験を実行しました。

私は、索引付けされていないプロパティの1つを更新し、エンティティをPut()するためにmapreduce runを使用しました。

私が適切に計算した場合、3つのインデックス付きプロパティ(更新されていない)があっても、エンティティごとに1つの書き込み操作しか必要ないことを確認しました。

(mapreduceを使用してから、私の数学はちょっとしたことがあったかもしれませんし、mapreduce自体がデータストアの書き込みをたくさん行っています)#mapreduceの書き込み数を推定するために別の実験を行ったので、