4

NDBを使用して、AppEngineデータストアにいくつかの一般的な統計情報を照会しようとしています。それらは100%正確である必要はありません(つまり、結果整合性については心配していません)。それらは一般的にエンティティの数を反映する必要があります。

NDBでは、次のような単純なものを発行しています。

query = MyModel.query(MyModel.source==source, MyModel.created<=some_time).order(-MyModel.created)
count = query.count(keys_only=True)

これは約60秒後にタイムアウトになります。エンティティグループとトランザクションはかなり定期的に使用していますが、これらがこれらのカウントクエリに影響を与えないことを期待しています。現在、約420万のエンティティがMyModelありますが、sourceフィルターによってこれはおそらく210,000に制限されます。

カスタムmemcache-yロジックを使用せずに、この規模の数値をカウントする別の方法はありますか?数字は正確である必要はなく、単に「一般的に正しい」ことを忘れないでください。

4

1 に答える 1

4

以前は 1000 だった制限が削除されたと思います。したがって、実際の制限は、タイムアウトまでにカウントできる数です。

同様の質問がいくつか寄せられており、通常、この時点でシャード カウンターが表示されます。

しかし、カウンターをタスク (タイムアウトは 10 分) またはバックエンド (タイムアウトなし) で実行したほうがよいと思います。

Guido がコメントで指摘しているように、クエリには 60 秒以上かかることはありません。

編集: 1000 の制限は少し前に削除されました。1.3.6: リリース ノート:

Datastore は、カウントとオフセットに対して 1000 エンティティ制限を適用しなくなりました。これらを使用するクエリは、返されるか、アプリケーションがリクエストのタイムアウト制限に達するまで、安全に実行されます。

于 2013-01-08T15:12:32.390 に答える