gpt4 book ai didi

node.js - 使用 CouchDB 插入非常慢?

转载 作者:太空宇宙 更新时间:2023-11-04 03:10:43 25 4
gpt4 key购买 nike

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

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

如果我错了,请纠正我,但是在简单操作中,NoSQL 应该总是优于关系数据库吗?我没想到会有如此巨大的差异。也许我的测试很幼稚,我不应该以这种方式比较这些数据库?我知道 MySQL 驱动程序可以访问连接池,并且不必在每个请求上重新创建 TCP 连接,但这会带来如此大的差异吗?

CouchDB 插入应该这么慢吗?如果不是,该如何正确执行?

我在干净的 CouchDB 数据库(没有任何设计文档)/Macbook Pro 2.6Ghz i7、16GB RAM、SSD/CouchDB 1.4.0 上运行测试

测试脚本:

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 方面。客户端的库/驱动程序有些问题导致它们速度非常慢。使用 apache benchmark 进行的简单 POST 测试在 CouchDB 端显示了非常好的结果:

$ 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

最佳答案

您是否一次插入一个文档?您绝对应该使用批量文档加载工具来进行实际比较:

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

在此处了解有关 CouchDB 性能的更多信息:

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

关于node.js - 使用 CouchDB 插入非常慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20742045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com