UNPKG

tribedb

Version:

Unlimited expansion MySQL cluster storage system

139 lines (94 loc) 2.62 kB
/** * * 分表分库配置 * */ 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); }