강력하게 일치하는 샤드 드 카운터를 만들려면 쿼리가 아닌 키를 사용해야합니다.
#for getting
total = 0
shard_keys = []
for i in range(20): #20 shards
key_name = shard + str(i)
shard_keys.append(db.Key.from_path('Counter', key_name))
counters = db.get(shard_keys)
for counter in counters:
if counter:
total += counter.count
#for incrementing a shard
import random
key_name = 'shard' + str(int(random.random()*20)) #choose a random shard
counter = Counter.get_by_key_name(key_name) #try to retrieve from datastore
if not counter:
counter = Counter(key_name=key_name) #shard doesn't exist, create one
counter.count += 1
db.put(counter)
일관성을 유지하기 위해 트랜잭션 내에서 증가를 수행하십시오.
정확하게 대답은 아니지만 'my_sum = sum (Counter.all())의 카운터에 counter.count'를 수행 할 수 있음을 알고 있으며 물론 'sum'변수를 호출하면 문제를 묻는 중입니다. – hochl
좋은 점, 그 점을 잊어 버렸습니다. –