我开发移动社交网络。存储在MySQL中的所有数据(通过分片)。热数据存储在Redis中,Redis中也有碎片地图。
Backend = node.js(express)
从移动客户端向后端发出的一个请求中向不同MySQL服务器快速请求的正确方法是什么?
示例:
客户端向服务器请求id = 1的用户配置文件,我们将其存储在服务器mysql-1 shard#1上。同时,另一个客户端向服务器请求id = 2的用户配置文件,我们将其存储在服务器mysql-2 shard#2上。
mysql服务器数量将增长。对服务器的请求数量也会增加。
在每个请求后初始化与MySQL的新连接 - 我认为这不是一个好主意。答案 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();