1

したがって、このコード:

all_nodes = Nodes.query()
country_nodes = []
for n in all_nodes:
    country_nodes.append([n.country, all_nodes.filter(Nodes.country == n.country).count()])

Datastore Small Operations操作を終了することさえせずに、クォータを削除しただけですか?

上記のリストを取得する正しい方法は何ですか?

4

2 に答える 2

1

GAE では、新しいレコードを作成するときに、各国の合計を追跡した方がよい場合があります。次に、1 回の読み取りで国の合計を調べることができます。たとえば、新しいモデル タイプを追加できます。

class Country(db.Model):
    name = db.StringProperty()
    count = db.IntegerProperty()

次に、新しいノードを追加すると、対応するCountryレコードを取得してそのcountプロパティをインクリメントできます。

あなたの例ではall_nodes.filter(...)、 を実行すると、 のそれぞれに対して新しいクエリを実行していnますall_nodes。以下は、合計を計算する安価な方法です。ただし、新しいレコードを作成する場合、国の合計を追跡するよりもコストがかかる可能性があります。

from collections import defaultdict

country_nodes = defaultdict(int)
for n in Nodes.query():
    country_nodes[n.country] += 1
于 2013-05-13T13:13:31.473 に答える
0

たとえば、 レコードが存在するかどうかを調べるには、またはFor でlimit=n( n=余裕のある最小限の) を使用します。レコードの大規模なデータベースで「Datastore Small Operations quota exceeded」というメッセージが表示されるのは非常に簡単です。結果にいくつのレコードが存在するか、または内部でインデックスなしで処理される可能性があることを常に考えてください:)count()fetch()count(limit=1)filter()count()

于 2015-01-18T19:13:43.790 に答える