私の小さなmapreduceルーチン(Python、Google Appengine)でロックンロールする準備はできていますが、私のデータベースに感染するバグ表。私の処理機能は、次のようになります。私のmapreduceをいくつかのエンティティで操作してテストしたい
def promote(nrhp_aux_entity):
...
# I form a query, and use it to get an "nrhp_record". That's the item
# I'm actually changing
results1 = query1.fetch(limit=1)
nrhp_record = results1[0]
...
yield op.db.Put(np_record)
私はそれがnrhp_aux_entityオブジェクトのちょうど少数、その後、ちょうど終了上で実行したいのですが。それから、私は結果を見て、それをテーブル全体で動作させることに決めました。だから、良い計画はある種の世界的なカウンターを持って、そして、例えば、カウンターが5のようないくつかの小さな番号になると、全体のmapreduceを終了することでしょうか?もしそうなら、グローバルカウンターを導入する良い方法は何ですか?
これを行うと、データベーステーブルの5つのエンティティ(約76,000のエンティティを含む)でしか動作していないため、マップリューデンスはすべて1分ほどで完了すると思いますか?
代わりに照会している型をマッピングするか、代わりにgetを使うなど、すべてのマッパー呼び出しでクエリを実行しないようにする方法はありますか?それは通常の地図作成よりもずっと遅くなり、コストも高くなります。また、 'query1.fetch(limit = 1)[0]'よりはるかに簡単です。 'query1.get()'は最初の結果を返します。 –
今、私はremote_apiを使用しています。なぜなら、私はより安全ですからです。しかし、query1.get()に関するヒントをありがとう。状況は私が2つのテーブルを持っているということです。表Bには、私が本当に望んでいたいくつかの余分なフィールドが表Aにありました。テーブルBの項目は少なくなりますが、テーブルBのすべての行について、テーブルAにはその行のすべてのフィールドを「昇格」したい行が1つだけあります。だから、私はテーブルBの各行を繰り返し、すべてのフィールドをテーブルAに昇格しています。テーブルAとテーブルBは "refnum"というフィールドを共有しています。 – egilchri
どこにでもキー名を使用していますか?クエリの代わりに単純なデータストア参照を行うことはできますか? –