首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >很慢的插入与CouchDB?

很慢的插入与CouchDB?
EN

Stack Overflow用户
提问于 2013-12-23 10:55:10
回答 1查看 1.6K关注 0票数 1

我想检查一下,与CouchDB相比,MySQL还能处理多少插入。我的测试很简单:10秒内,继续插入{firstName: "Testing 001", lastName: "Testing 002"}并比较文档/行的数量。我得到的结果与我的预期相去甚远:

  • MySQL MyIsam: 11万行
  • MySQL InnoDB: 52,000行
  • CouchDB:3,300个文档!

如果我错了,请纠正我,但是在简单操作中,NoSQL应该总是优于关系数据库吗?我不认为会有如此巨大的差异。也许我的测试太天真了,我不应该以这样的方式比较那些数据库?我知道MySQL驱动程序可以访问连接池,不需要在每个请求上重新创建一个TCP连接,但这会带来这么大的差异吗?

CouchDB插入是否应该如此缓慢,如果不是的话,应该如何做好呢?

我在一个干净的CouchDB数据库(没有任何设计文档)/ Macbook Pro2.6Ghz i7、16 i7内存、SSD / CouchDB 1.4.0上运行测试

测试脚本:

代码语言:javascript
复制
var nano = require('nano')('http://localhost:5984');
var async = require('async');
var db = nano.db.use('test');
var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '',
  database: 'test'
});

/*
connection.connect(function(err){
    var t = new Date().getTime() + 10000;
    var i = 0;

    var page = 2,
        lastPage = 100;

    async.whilst(function () {
      return new Date().getTime()  < t;
    },
    function (next) {
        connection.query('INSERT INTO test (firstName, lastName) VALUES ("Testing 001","Testing 002")', function(err, rows, fields) {
          i += 1;
          next();
        });
    },
    function (err) {
        console.log( i );
        connection.end();
    });
});
*/

var t = new Date().getTime() + 10000;
var i = 0;

var page = 2,
    lastPage = 100;

async.whilst(function () {
  return new Date().getTime()  < t;
},
function (next) {
  db.insert({firstName: "Testing 001", lastName: "Testing 002"}, 'id-' + i, function(){
    i += 1;
    next();
  });
},
function (err) {
    console.log( i );
    connection.end();
});

//编辑:

事实证明,问题并不在CouchDB方面。客户端的库/驱动程序有些地方会使它们变得非常慢。使用进行的简单的POST测试在CouchDB端显示了非常好的结果:

代码语言:javascript
复制
$ ab -n 10000 -c 100 -p post-data -T "application/json" "http://192.168.50.102:5984/test/"
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.50.102 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        CouchDB/1.5.0
Server Hostname:        192.168.50.102
Server Port:            5984

Document Path:          /test/
Document Length:        95 bytes

Concurrency Level:      100
Time taken for tests:   1.149 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      4120412 bytes
Total POSTed:           1920960
HTML transferred:       950095 bytes
Requests per second:    8704.85 [#/sec] (mean)
Time per request:       11.488 [ms] (mean)
Time per request:       0.115 [ms] (mean, across all concurrent requests)
Transfer rate:          3502.69 [Kbytes/sec] received
                        1632.98 kb/s sent
                        5135.67 kb/s total

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       2
Processing:     6   11   2.6     11      23
Waiting:        6   11   2.6     11      22
Total:          6   11   2.6     11      25
EN

回答 1

Stack Overflow用户

发布于 2013-12-23 10:58:47

是否一次插入一个文档?您肯定应该使用大容量docs加载工具来进行实际比较:

http://docs.couchdb.org/en/latest/api/database/bulk-api.html#db-bulk-docs

在这里阅读有关CouchDB性能的更多信息:

http://guide.couchdb.org/draft/performance.html (有点过时,但大多仍然相关)

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

https://stackoverflow.com/questions/20742045

复制
相关文章

相似问题

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