1

20 件の結果を取得する keys_only クエリを実行しています。

result_keys, cursor, more = ActivityIndex.query(cls.followers  == key)\
                                        .order(-cls.date_created)\
                                        .fetch_page(num_results,
                                                    start_cursor = cursor,
                                                    keys_only=True)

次に、 activityIndex オブジェクトの親を取得します。

keys = []
for k in result_keys:
    for pair in k.parent().pairs():
        keys.append(ndb.Key(pairs=[pair]))

activities_related = ndb.get_multi(keys)

キーごとにオブジェクトのバッチを取得していたので、これは速いと思いました。ただし、appstats docsdatastore_v3.Nextによると、クエリは call のようで、これは「悪い」ものであり、実行時間のかなりの部分を占めています。

不要な Next 呼び出しを避けることで、アプリの速度が向上する可能性があります。

上記のクエリの Appstats (get_multi 呼び出しを使用) get_multi を有効にした Appstats ビュー

上記のクエリの Appstats ですが、get_multi を呼び出していません (next() が応答するまでの短い時間)。 次の応答までの短い時間

datastore_v3.next()を呼び出すときに、呼び出しの実行に時間がかかるのはなぜget_multi()ですか? get_multi が返す結果の数に依存しますか? get_multi で返されるオブジェクトの一部にはリスト プロパティ (リスト内の最大 10 アイテム) がありますが、これはパフォーマンスに影響しますか?

この問題を回避するには、設計を変更し、タスクレットで必要なエンティティをフェッチする方がよいでしょうか? 他の提案はありますか?

編集:

私がやろうとしていることについてのもう少しの情報: アプリケーションにアクティビティ ストリームがあり、すべてのユーザー アクティビティが表示されます。たとえば、Rob が画像にコメントしたなどです。アクティビティの説明と表示する情報を構築するオブジェクト。これらすべてのオブジェクトのキーを の親として設定しActivityIndexました。したがって、上記のクエリから、ndb.get_mult(keys)Activity、User、および Picture オブジェクトを取得します。キー リストには 50 個以上のキーが含まれている可能性があるため、これが長いdatastore_v3.Next呼び出しの原因である可能性があります。

4

1 に答える 1

2

dev_appserver でこれを行っていますか? (そのパフォーマンスは本番環境のパフォーマンスとはまったく無関係であり、これについて議論するのに時間を無駄にしているので、そうならないことを願っています。)

何か怪しいことが起こっているようです。Next 呼び出しが非同期にスケジュールされ、場合によっては実際には必要ないことを示す ISTR。これは、呼び出しをオーバーラップさせていなくても、最初のグラフでは Next が memcache get 呼び出しとオーバーラップしていることを示しています。

それでも、それほどの遅延はないはずです。get_multi() を呼び出す前に、表示されていない余分なことをしていますか?

ところで、ペアで行っていることは複雑すぎるように見えます。複数のペアを持つ親が存在する場合、無効なキーが生成されます。親のレベルは 1 つしかないと思いますが、それらを取得したいだけです。そうであれば、これで十分なはずです。

keys = [k.parent() for k in result_keys]

最後に問題 118 を参照してください: http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=118 -- 私たちはあなたが試みていると思われるトリックを測定しました。命中率はかなり高いです。

于 2012-11-03T05:33:16.797 に答える