0

各ドキュメントに一意の id (文字列) があるcouchdb dbインスタンスがあります。データベース内の各ドキュメントを調べて、各ドキュメントの内容に基づいて外部操作を実行したいと思います (たとえば、別の Web サーバーに接続して特定の詳細を取得するなど)。ただし、各ドキュメントを順番に調べるのではなく、最初に開始キー + 終了キー (id はキー) で表されるこれらのドキュメント キーの k 個のバケットのリストを取得し、次にこれらのそれぞれのすべてのドキュメントをクエリすることは可能ですか?バケットを個別に作成し、各バケットのドキュメントに対して外部操作を並行して実行しますか?

現在、db +ビューにアクセスするためにcouchdb-pythonを使用しています。たとえば、これは私が現在使用しているコードです。

for res in db.view("mydbviews/id"):
  doc = db[res.id]
  do_external_operation(doc) # Time consuming operation

上記のループに対して「並列 for」みたいなことができればいいのですが。

4

1 に答える 1

0

ビュー内のドキュメントごとに 1 つの結果のみを出力すると仮定すると、ここではおそらく開始キーと終了キーを使用してビューを実行し、いくつかの Python 並列化手法で十分です。@Ved が言うように、ここでのより大きな問題は、ドキュメントのサブセットを生成することではなく、並列処理です。次のように、 multiprocessing モジュールをお勧めします。

def work_on_subset(viewname, key_low, key_high):
    rows = db.view(viewname, startkey=key_low, endkey=key_high)
    for row in rows:
        pass # Do your work here

viewname = '_design/designname/_view/viewname'
key_list = [('a', 'z'), ('1', '10')] # Or whatever subset you want
pool = multiprocessing.Pool(processes=10) # Or however many you want
result = []
for (key_low, key_high) in key_list:
    result.append(pool.apply_async(work_on_subset, args=(viewname, key_low, key_high)))
pool.close()
pool.join()
于 2014-08-26T13:32:04.400 に答える