tribedb
Version:
Unlimited expansion MySQL cluster storage system
139 lines (94 loc) • 2.62 kB
JavaScript
/**
*
* 分表分库配置
*
*/
const util = require('util');
// 数据库配置
exports.databases = {};
// 数据表路由
exports.tableRouter = {};
// 数据适配器
exports.dataAdapter = {};
/**
* 为数据表划分分区
*/
exports.div = function(dbname, table, opt)
{
let tr = exports.tableRouter;
if( Array.isArray(table) ){
table.forEach(t=>{
tr[t] = dbname;
});
}else if( typeof table == 'string' ){
tr[table] = dbname;
}else{
throw new Error('Unsupported table divide configuration !');
}
// log(tr);
}
/**
* 增加或修改数据库链接配置
*/
exports.db = function(name, cnf, opt)
{
let confobj = getDatabaseConf(cnf, opt);
// add
exports.databases[name] || (exports.databases[name] = []);
exports.databases[name].push( confobj );
// log(confobj);
}
/**
* 解析并获取数据库配置
*/
function getDatabaseConf(cnf, opt)
{
let confobj = {};
if( Array.isArray(cnf) ){
confobj['host'] = cnf[0] || '127.0.0.1';
confobj['port'] = cnf[1] || '3306';
confobj['user'] = cnf[2] || 'root';
confobj['password'] = cnf[3] || '';
confobj['database'] = cnf[4] || null;
confobj['charset'] = cnf[5] || null;
// confobj['connectionLimit'] = 25; // 连接池最大值
}else if( typeof cnf == 'string' ){
return getDatabaseConf(cnf.split(','), opt);
}else if( cnf instanceof Object ){
confobj = Object.assign(confobj, cnf);
}else{
throw new Error('Unsupported database configuration !');
}
return Object.assign(confobj, opt);
}
/**
* 返回默认库名字
*/
var main_database_name;
exports.mainDatabaseName = function()
{
if( main_database_name )
return main_database_name;
if( exports.databases['main'] ){
main_database_name = 'main';
return 'main';
}
for (let dbname in exports.databases) {
for(let i in exports.databases[dbname]){
if(exports.databases[dbname][i].main){
main_database_name = dbname;
return dbname;
}
}
};
// 错误
throw new Error('TribeDB need a main database config !');
}
/**
* 数据适配器 注册
*/
exports.adapter = function(tbname, handle)
{
exports.dataAdapter[tbname] = exports.dataAdapter[tbname] || [];
exports.dataAdapter[tbname].push(handle);
}