什么是重用CouchBase连接的最佳方法

时间:2013-05-16 13:26:17

标签: node.js connection-pooling couchbase

我使用以下代码连接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位版本上部署它的步骤。
更新
我认为截至目前,Windows操作系统尚未发布moxi-server

3 个答案:

答案 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;