这是以前做的笔记,前东家的数据库分库分表策略,感觉挺有借鉴价值。
假设数据库数量为10
分库分表键为某个ID:
hash = Md5(key).subString(0,4);
bucket_index = hash.subString(0,3);
table_index = hash.subString(3,4);
解释
bucket_index,取3位16进制,取值范围是0 - 4095,对应某个数据库
table_index,取1位十六进制,取值范围是0 - 15,对应哪个分表
这样做的好处
1、当数据移植的时候只要锁定1/4096的记录即可,如果想继续减少影响的数据规模,可以增加bucket_index的取值范围;
2、通过hash,数据分布均匀。
这样做的缺点
1、无法区分出冷热数据;适应不区分冷热数据的服务场景;
2、线下定位某一条记录在哪里会比较麻烦,需要自己写工具对应;不过这个倒没太大关系。