3

私が次の種類のエンティティを持っていると仮定します。

class ExampleModel(db.Model):
    name = db.StringProperty()

mdl = ExampleModel(key_name='blah', name='abcd')
mdl.put()

パフォーマンスに違いはありますか

ExampleModel.get_by_key_name('blah')

ExampleModel.all().filter('name = ', 'abcd').get()

パフォーマンスに違いがある場合、それは(おおよそ)いくらですか?ExampleModelのインデックスを持つことは、結果にどのようにname影響しますか?

4

1 に答える 1

6

はい、パフォーマンス(および価格)に違いがあります。

クエリの場合、2つの読み取り操作を実行する必要があります。

  • インデックステーブルでの1つのルックアップ
  • エンティティテーブルでの1つのルックアップ

get_by_keyの場合、1回の読み取り操作のみを実行します。

  • エンティティテーブルの1回のルックアップ

また、インデックス付きプロパティに到達するには、インデックステーブルで追加の書き込みを1回行う必要があるため、インデックス付きプロパティも書き込みパフォーマンスとコストに影響を与えることに注意してください。

Feel free to take a look at this presentation about Datastore performance patterns and anti-patterns. By clicking the Run button on each side you can see the interactive appstats traces for each code snippets.

于 2013-01-05T01:58:25.423 に答える