我使用以下代码连接CouchBase
couchbase.connect(config.CouchBaseConnector, function (err, CouchBaseDB) {
if (err) {
throw (err)
}
CouchBaseDB.set(keyPush, docPush, function (err, meta) {
if (err) { console.log(err); }
});
}
但是它创建了多个连接数。
有人可以帮我解决问题。基本上我想做连接池之类的事情并继续重复使用。
<小时/> 我遇到了CouchBase关于此问题的文档。但是无法弄清楚它是如何工作的以及在Windows 7 64位版本上部署它的步骤。
答案 0 :(得分:2)
Couchbase Node SDK本身就是一个连接池。它负责管理与集群的连接,警告服务器拓扑中的任何更改(添加/删除/失败节点)
这就是为什么大多数时候将代码放在全局回调方法中并重用连接
var express = require('express'),
driver = require('couchbase'),
routes = require('./routes');
dbConfiguration = {
"hosts": ["my-couchbase-server:8091"],
"bucket": "bucket"
}
driver.connect(dbConfiguration, function(err, cb) {
if (err) {
throw (err)
}
// put your application logic here
});
如果要使用全局变量,则需要等待回调并确保在使用之前建立连接。
答案 1 :(得分:0)
您可以将常规资源池模块用于节点:node-pool
它是通用池,因此您可以根据自己的需要进行调整。
修改强>
以下是示例代码:
var poolModule = require('generic-pool');
var pool = poolModule.Pool({
name : 'couch',
create : function(callback) {
couchbase.connect(config.CouchBaseConnector, function (err, couchbaseOpenCon) {
if (err)
return console.log("Failed to connect to the CouchBase");
else {
CouchBaseDBConnection = couchbaseOpenCon
callback(null, couchbaseOpenCon);
}
});
},
destroy : function(client) { client.end(); },
max : 10,
// specifies how long a resource can stay idle in pool before being removed
idleTimeoutMillis : 30000,
// if true, logs via console.log - can also be a function
log : true
});
// acquire connection - callback function is called once a resource becomes available
pool.acquire(function(err, client) {
if (err) {
// handle error - this is generally the err from your
// factory.create function
}
else {
console.log("do whatever you want with the client ...");
pool.release(client);
});
}
});
答案 2 :(得分:0)
我发现以下代码对我有用。 请任何人有更好的解决方案,请发布,我总是欢迎。
GLOBAL.CouchBaseDBConnection = undefined;
function OpenCouchBase(callback) {
if (CouchBaseDBConnection == undefined) {
couchbase.connect(config.CouchBaseConnector, function (err, couchbaseOpenCon) {
if (err)
return console.log("Failed to connect to the CouchBase");
else {
CouchBaseDBConnection = couchbaseOpenCon
callback(null, couchbaseOpenCon);
}
});
}
else { callback(null, CouchBaseDBConnection); }
};
module.exports.OpenPoolCouchBase = OpenCouchBase;