什么是同时使用Node.js的许多MySQL服务器的正确方法?

时间:2013-12-20 12:23:41

标签: mysql node.js express

我开发移动社交网络。存储在MySQL中的所有数据(通过分片)。热数据存储在Redis中,Redis中也有碎片地图。

Backend = node.js(express)

从移动客户端向后端发出的一个请求中向不同MySQL服务器快速请求的正确方法是什么?

示例:

客户端向服务器请求id = 1的用户配置文件,我们将其存储在服务器mysql-1 shard#1上。同时,另一个客户端向服务器请求id = 2的用户配置文件,我们将其存储在服务器mysql-2 shard#2上。

mysql服务器数量将增长。对服务器的请求数量也会增加。

在每个请求后初始化与MySQL的新连接 - 我认为这不是一个好主意。

1 个答案:

答案 0 :(得分:2)

欢迎@Dmitry,一个aproach可以使用pool-cluster个连接。

此模块https://github.com/felixge/node-mysql可以为您提供帮助。

// create

var poolCluster = mysql.createPoolCluster();
poolCluster.add(config); // anonymous group
poolCluster.add('MASTER', masterConfig);
poolCluster.add('SLAVE1', slave1Config);
poolCluster.add('SLAVE2', slave2Config);

// Target Group : ALL(anonymous, MASTER, SLAVE1-2), Selector : round-robin(default)
poolCluster.getConnection(function (err, connection) {});

// Target Group : MASTER, Selector : round-robin
poolCluster.getConnection('MASTER', function (err, connection) {});

// Target Group : SLAVE1-2, Selector : order
// If can't connect to SLAVE1, return SLAVE2. (remove SLAVE1 in the cluster)
poolCluster.on('remove', function (nodeId) {
  console.log('REMOVED NODE : ' + nodeId); // nodeId = SLAVE1 
});

poolCluster.getConnection('SLAVE*', 'ORDER', function (err, connection) {});

// of namespace : of(pattern, selector)
poolCluster.of('*').getConnection(function (err, connection) {});

var pool = poolCluster.of('SLAVE*', 'RANDOM');
pool.getConnection(function (err, connection) {});
pool.getConnection(function (err, connection) {});

// destroy
poolCluster.end();