【发布时间】:2012-08-22 19:46:59
【问题描述】:
我有几个 CouchDB 数据库。最大的是大约 600k 个文档,我发现查询时间过长(几个小时或更长时间)。数据库不经常更新(大约一个月一次),只涉及添加新文档,从不更新现有文档。
查询的类型为:查找所有包含key1='a' 或多个键的文档:key1='a', key2='b'...
我认为永久视图在这里并不实用,因此一直在使用 CouchDB-Python 的“查询”方法。
我尝试了几种方法,但我不确定哪种方法最有效,或者为什么。
方法一: 地图功能是:
map_fun = '''function(doc){
if(doc.key1=='a'){
emit(doc.A, [doc.B, doc.C,doc.D,doc.E]);
}
}'''
Python 查询是: 结果 = ui.db.query(map_fun, key2=user)
然后对 results.rows 进行一些操作。这占用的时间最多。
“results.rows”大约需要一个小时才能返回。如果我将 key2 更改为其他内容,它会在大约 5 秒内返回。如果我重复原始用户,它也很快。
但有时我需要查询更多的键,所以我尝试:
map_fun = '''function(doc){
if(doc.key1=='a' && doc.key2=user && doc.key3='something else' && etc.){
emit(doc.A, [doc.B, doc.C,doc.D,doc.E]);
}
}'''
并使用 python 查询:
结果 = ui.db.query(map_fun) 然后对 results.rows 进行一些操作
第一次查询需要很长时间。当我更改 key2 时,又需要很长时间。如果 我将 key2 改回原始数据,花费相同的时间。 (也就是说,似乎没有任何东西被缓存,B-tree'ed 或其他)。
所以我的问题是:在 couchdb-python 中进行查询的最有效方法是什么,其中查询是临时的并且涉及搜索条件的多个键?
UI 是基于 QT 的,在底层使用 PyQt。
【问题讨论】:
标签: python performance couchdb