首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CouchDB-Python查询性能

CouchDB-Python查询性能
EN

Stack Overflow用户
提问于 2012-08-22 19:46:59
回答 2查看 1.7K关注 0票数 1

我有几个CouchDB数据库。最大的是大约60万个文档,我发现查询非常长(几个小时或更长)。数据库很少更新(每月一次左右),只涉及添加新文档,从不更新现有文档。

查询的类型是:查找所有key1='a'或多键:key1='a', key2='b'.

我看不出永久视图在这里是实用的,所以一直在使用CouchDB 'query‘方法。

我已经尝试过几种方法,我不知道什么是最有效的,或者是为什么。

方法1:地图功能是:

代码语言:javascript
复制
    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秒后返回。如果我重复原来的用户,它也是快速的。

但有时我需要查询更多的键,所以我尝试:

代码语言:javascript
复制
    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树或其他什么的)。

因此,我的问题是:在couchdb中执行查询的最有效方法是什么,其中查询是临时的,涉及多个搜索条件键?

UI是基于QT的,下面使用PyQt。

EN

回答 2

Stack Overflow用户

发布于 2012-08-22 20:22:58

couchdb db.query()方法有两个注意事项:

  1. 它执行临时视图。这意味着代码流处理将被阻塞,直到所有文档都由此视图进行为止。每次通话都会发生这种情况。尝试保存视图并使用db.view()方法代替按需获取结果,并进行增量索引更新。
  2. 不管它有多大,它都能读到整个结果。db.query()或db.view()方法并不懒惰,因此如果视图结果是100 MB JSON对象,则必须在使用这些数据之前获取所有这些数据。若要以更多内存优化的方式查询数据,请尝试应用修补程序拥有db.iterview()方法--它允许您以分页方式获取数据。
票数 3
EN

Stack Overflow用户

发布于 2012-08-24 08:25:10

我认为解决问题的方法是为正在搜索的键创建一个索引。这就是你所说的永久观点。

请注意基于B树的表中映射/减少查询和SQL查询之间的差异:

  • 简单的SQL查询搜索键(如果有索引的话)从根到叶遍历B+树中的单个路径,
  • map函数读取所有的元素,如果它发出的结果很小,就会发生事件。

您所做的是针对每个查询。

  1. 阅读每一份文件(大部分费用)和
  2. 在发出的结果中搜索一个键(在B树中快速搜索)。

我认为你的解决方案必须慢下来。

如果重新设计数据库结构,使永久视图切实可行,(1.)只执行一次(2.)将对每个查询执行。添加到DB后,每个文档将由视图读取,查询将在B树中搜索,存储发出的结果。如果发出的集小于文档总数,则查询将搜索较小的结构,并且您将受益于SQL数据库。

临时视图的效率要低得多,而不是永久性的视图,只能用于发展。CouchDB被设计为与永久视图一起工作。要使map/还原高效,必须实现缓存或使视图永久化。我不熟悉CouchDB实现的细节,也许使用不同键的第二个查询更快,因为有些缓存。如果出于某种原因,您必须使用临时视图,那么CouchDB可能是一个错误,您应该考虑为MongoDB这样的在线查询创建和优化DBMS。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12080358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档