我做了一些速度测试来比较MongoDB和CouchDB.测试时仅插入.我使MongoDB比CouchDB快15倍.我知道这是因为套接字vs http.但是,对我来说非常有趣的是如何在CouchDB中优化插入?
测试平台:Windows XP SP3 32位.我使用了最新版本的MongoDB,MongoDB C#驱动程序和最新版本的CouchDB for Windows 安装包.
谢谢!
只是迭代套接字与HTTP和fsync与内存中的对话.
默认情况下,MongoDB不会在写入调用时返回响应.您只需将数据写入套接字并假设它在数据库中并且可用.在并发负载,这可能会得到备份并没有知道蒙戈多快的好办法确实是,除非你使用可选的呼叫,一旦数据可用,将返回写入响应.
我不是说Mongo插入性能不比Couch快,插入内存比fsyncing到光盘要快得多,这里更大的区别在于MongoDB和CouchDB在一致性和持久性方面的目标差异.但是我见过的用于测试Mongo的所有"性能"工具都使用默认的写入API,因此您并没有真正测试插入性能,而是测试了刷新到套接字的速度.
我已经看到很多基准测试显示Mongo比Redis和memcached更快,因为他们没有意识到Redis和Memcached在数据在内存中时返回响应而Mongo没有.蒙戈绝对不超过Redis的快:)
为了以批量方式将大量数据插入到数据库中,CouchDB支持批量插入,这些插入在HTTP批量文档API下的wiki中进行了描述.
此外,请查看delayed_commits
配置选项以及batch=ok
上述链接中描述的选项.这些选项启用类似的内存缓存行为,并对磁盘进行定期同步.
我不认为套接字和http之间的区别是唯一的区别.差异还与磁盘同步(fsync)有关.这会影响耐久性.MongoDB首先将所有内容存储在RAM中,它只会以特定间隔同步到磁盘,除非您明确告诉MongoDB执行fsync.
阅读有关耐久性和MongoDB的信息:http://blog.mongodb.org/post/381927266/what-about-durability和fsync:http://www.mongodb.org/display/DOCS/fsync+Command