我有一个couchdb数据库实例,其中每个文档都有一个唯一的id(字符串)。我想查看数据库中的每个文档,并根据每个文档的内容执行一些外部操作(例如:连接到另一个Web服务器以获取特定的详细信息等)。但是,不是按顺序遍历每个文档,而是可以首先获取由起始键+结束键(id是键)表示的这些文档键的k个桶列表,然后查询每个文档中的所有文档。水桶分开&对每个存储桶文件并行进行外部操作?
我目前使用couchdb-python来访问我的db +视图。例如,这是我目前使用的代码:
for res in db.view("mydbviews/id"):
doc = db[res.id]
do_external_operation(doc) # Time consuming operation
如果我可以做一些类似于'并行的话,那会很棒。对于上述循环。
答案 0 :(得分:0)
假设您在视图中每个文档只发出一个结果,那么可能在这里使用开始和结束键以及一些python并行化技术运行视图就足够了。正如@Ved所说,这里更大的问题是并行处理,而不是生成文档的子集。我推荐多处理模块,如下所示:
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()