でエンティティのバッチを取得、変更、配置する最も効率的な方法は、私はいくつかのバッチ処理を実行します。 残念ながら、これは時々、400-500のエンティティを更新するために永遠に必要です。 私が持っているものはすべてエンティティキーです、私はそれらを取得し、プロパティを更新し、データストアに保存し、それらを保存することが何を探しているものではない40~50秒かかることがあります。私のアプリでndb
は病気(とにかく非常に簡単である)私は何をすべきかを説明するために私のモデルを単純化:
はclass Entity(ndb.Model):
title = ndb.StringProperty()
keys = [key1, key2, key3, key4, ..., key500]
entities = ndb.get_multi(keys)
for e in entities:
e.title = 'the new title'
ndb.put_multi(entities)
取得し、変更することはあまり時間はかかりません。 get_asyncをタスクレットに入れようとしましたが、getまたはforloopがもっと時間がかかる場合にのみ変更可能なものがあります。
が、何本当に私を気にすることはプットが50秒までかかることである...時間のまともな量で、この操作(複数可)を行うための最も効率的な方法は何か
。もちろん、私はエンティティの複雑さのような多くの要素に依存していることを知っていますが、それを置くのにかかる時間は本当に私にとって許容可能な限界を超えています。
私はすでに非同期操作、タスクレットを試していました...
すべてのエンティティが同じエンティティにありますいくつかのテストの後で、タスクレットを使用してエンティティを遅延タスクの中に50でバッチすると、この操作はずっと迅速になります。私が心に持っていたものではなく、50秒よりもずっと優れている完全な更新について約5~10秒間話しています。 – aschmid00
私はこれが驚くべきことだと思います。彼らがすべて同じグループにいれば、異なるバッチを持たないので、あなたは1書き込み/秒/グループの上限に達するでしょうか? – Alexis
1バッチ/秒の音が彼が得ていることについて... –