
在node.js里,可以自定义命令,借用commander包实现一些小工具。
假设数据库根据用户ID分库,那么如何知道一个userID分布在哪个库呢?
假设书库库根据用户ID分表,那么如何知道一个userID分布在哪个表呢?
我们可以用commander包来实现一个命令行工具,只需要输入用户ID就可以获取用户的分库分表信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 'use strict'
const program = require('commander')
program .version('0.0.1') .option('-u, --user <user>', '用户ID', String) .parse(process.argv);
let user = program.user if (!user) console.log('请输入用户ID')
let tableIndex = parseInt(user.slice(6, 8), 16) % 128
let server = parseInt(user.slice(-3), 16) % 28 + 1
let goldServer = parseInt(user.slice(-3), 16) % 16 + 1
console.log(`DB: ${server}, index: ${tableIndex}`) console.log(`goldcoin DB: ${goldServer}`)
process.exit(0)
|
在上述代码里,我们假设用户根据ID的后3位取16进制,并对28取模,加1后就是用户所在的库名。
然后根据ID的6-8位取16进制,并对128取模,就是用户所在的表名。
这样随机生成的userID会正态分布的落在这28库128表中。
大家根据自己公司的业务修改上述代码的分库分表,并安装在全局目录下,这样就可以在任务地方使用这个工具来查找用户信息了。
如果不知道你的命令有哪些参数,可以-h参数获取对应的信息。
1 2 3 4 5 6 7 8 9
| $ node summery/user-db-info.js -h
Usage: user-db-info.js [options]
Options:
-h, --help output usage information -V, --version output the version number -u --user <user> 用户ID
|
我这里没有制成全局命令,大家可以需要自行做。