优化CouchDB的读性能
来源:互联网 发布:犀牛软件培训班 编辑:程序博客网 时间:2024/05/17 04:59
转自:http://blog.nosqlfan.com/html/3776.html
优化CouchDB的读性能
CouchDB可能是我见过最有创意的NoSQL产品。它通过append only的方式去组织数据,这样就能够通过对增量数据执行MapReduce的方法来生成数据视图。这一套方法背后是一个完整的体系。
当然,这也会引发一些问题,因为CouchDB默认是在读时合并修改的,也就是说,在数据读取时,CouchDB会先判断上次视图更新后又有多少新的写操作,然后将这些写操作通过MapReduce方法合并到视图中。并记录这一次更新的操作点。
很显然,这样每次进行合并更新可能降低读性能。特别是当遇到两次读之间的间隔过大时。可能会导致大量的写操作需要合并进视图,从而让读操作变得很慢。
那有什么方法可能解决这个问题。下面是一些具体的做法,你是否能接受这些做法可能还得看你的业务情况。
1.使用旧的视图
CouchDB在视图时,默认会进行写操作合并工作,这是我们上面讲过的。但是这里也说了,这只是一个默认,实际上你完全可以通过设置让其不更新视图,直接返回数据。当然,不更新,也就意味着你的数据不是最新的。所以说这需要你的业务能够接受。具体做法如下:
GET http://couchbase:5984/recipes/_design/recipes/_view/by_recipe?stale=ok
说白了就是添加一个stale=ok的参数。
2.延迟合并
如果我们一直使用上面的方法。那么我们的数据可能就再也不会进行合并更新了。相信这是任何业务都难以忍受的。所以CouchDB还提供另一个stale的设置值,你可以设置它在读操作中返回旧的数据。然后CouchDB在返回数据后再自己执行合并工作。具体做法:
GET http://couchbase:5984/recipes/_design/recipes/_view/by_recipe?stale=update_after
跟上面的很像,只是stale参数值变成了update_after,也就是随后更新。
3.定时更新
如果上面两种方式都不能让你满意,我们来看一下下面一个。CouchDB支持一个叫_change feed的特性,它像是订阅一样,会将所有变更操作推给订阅了此消息的客户端。于是我们就可以通过脚本去订阅变更。并且在变更时主动更新视图了。这里使用python客户端为例,具体做法如下:
from couchdb importServer cdbs = Server('http://localhost:5984/')db = cdbs['recipes']# the since parameter defaults to 'last_seq' when using continuous feedch = db.changes(feed='continuous',heartbeat='1000') counter = 0 for line in ch: counter=counter+1 if (counter > 10): db.view('recipes/by_name') counter = 0
上面例子中有一个counter计数,每当有更新时,将counter加1,当counter达到10时,就去主动更新视图。也就是制定每10次写操作就更新一次视图。这样读客户端就可以永远使用stale=ok的方式来读取数据就行了。
实际上,如果你设定counter为1时就更新视图,那么CouchDB就退化成为我们通常使用的写时更新索引的存储系统了。比如MongoDB或者MySQL。
英文原版:http://blog.safaribooksonline.com/2012/03/14/improving-couchdb-performance/
- 优化CouchDB的读性能
- 优化CouchDB,突破C10K限制
- couchDB的一些介绍
- MongoDB CouchDB CouchBase性能评测报告
- 关于 CouchDB 的一些知识
- CouchDB与MySQL的选择
- CouchDB与CouchBase的比较
- CouchDB与MySQL的选择
- 【Android性能优化】布局的性能优化
- 性能优化,vewpage的优化
- Java 性能的优化
- Java性能的优化
- Java性能的优化
- SQL 性能的优化
- Java性能的优化
- Java性能的优化
- Java性能的优化
- Java性能的优化
- Linux环境下Java开发 Linux和Windows比较
- freemarker内置函数
- 正则表达式,多行匹配
- 再怎么幸福,请不要忘记高中的好友。也许那才是真正的幸福…看完我流泪了,真的好想你们! - Qzone日志
- block块结构
- 优化CouchDB的读性能
- 简单把 Win7 打造成 Win8
- SqlServer数据类型、C#SqlDbType对应关系及转换
- 用Jdbc连接MySql数据库
- 龙博databinder类绑定远程数据源
- 在wince中DataGrid的样式设置(宽度),智能设备开发,PDA
- Knuth's 33 Constants
- 5.0学习外语的最好方法(我认为)欢迎pk
- vc++ 与delphi开发的程序传递数据