我使用YCSB基准测试工具对Couchdb和Mongodb的性能进行基准测试。不幸的是,我似乎做错了,因为单个随机操作的性能差异很大:
工作负载A (50/50读取/更新),16个查询线程,120秒运行时间(结果与20分钟运行时非常相似):
CouchDB 1.6.1:总吞吐量: 1076 ops / sec ,第99百分位读取延迟为13毫秒,第99百分位更新延迟为13毫秒
MongoDB 3.0.6:总吞吐量: 11203 ops / sec ,第99百分位读取延迟为1毫秒,第99百分位更新延迟为1毫秒
正如您所看到的,CouchDB对随机读取和更新的速度非常慢。文档建议使用批量操作,这可能适用于插入,但我不知道如何考虑YCSB逐个要求读取的批量读取。
测试环境:
我尝试提高吞吐量:
CouchDB缓慢的可能解释:
问题:您是否看到了其他改善CouchDB性能的方法?
编辑:在couchdb中将delayeded_commit设置为true,因此我开始怀疑forced-fsync是原因。
答案 0 :(得分:1)
这里的答案很简单:CouchDB确保所有写入都使用fsync()调用命中磁盘,而MongoDB允许将它们保留在内存中一段时间并告诉您一切正常。在您丢失数据时,下一次意外关机。 RAM-vs-disk是它们之间的主要性能因素。
接下来是协议:HTTP是文本,而MongoDB使用自己的二进制文件。无需说明,二进制协议更加紧凑和高效。
但这里的主要问题是你的基准是合成的。您假定您的数据库用于愚蠢的读写,如数据包,而数据库则用于更复杂的操作,如查询,索引查找,连接,数据验证等。这里的业务逻辑很重要。
对于更真实的基准测试,您应该使用一些应用程序并使其与数据库和基准业务工作流程一起使用,而不是盲读/写。很确定,您的数字将被均衡,因为业务逻辑比任何数据库都要慢得多。
所以我很抱歉你浪费你的时间。