关于分库分表之基因法
在新业务表中,因考虑到后续表数据量较大,对于数据的查询等操作有很大的影响,所以考虑分库分表操作.
1 分库分表
参考阿里巴巴Java开发手册,单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表(三年内数据)资料, 对现有表结构进行设计.主要包括用户表,订单表.
最初,设计一张中间映射表, 即每次用户查询,先查询映射表,得到对应的表或库信息,再去查询表信息. 这种方式虽然能解决数据分库分表查询,但是需要多维护一张额外的表,并且查询也比较复杂,多了一次查询.
用户表001(uid)映射表1 库1 001(uid)
后续查询相关资料,发现基因法更好的解决问题,并且更符合项目表设计的需求.
2 基因法
基因分库法: 使用基因的思想,从一个维度的信息里,摘取了一个分库基因,其他维度信息里也全会带上,使得所有维度的信息都能通过此分库基因完成分库.
关于分库方法,参考理论:
He meant that taking number mod 2^n
is equivalent to stripping off all but the n
lowest-order *(right-most)* bits of number
.
即: 一个数取余2的n次方,那么余数就是这个数的二进制的最后n位数。所有我们可以位操作符把高位清零就可以得到余数.
所以分库分表的数量是2的n次方,那么二进制的n个位数,就是分库的因子.
以用户表和订单表为例:
如果我们按照2的2次方,即分成四个表 n=2 ,那么二进制的最后两位数就表示数据分到那个表中.
用户的uid为9, 那么 9%49 40001 0000 0100按照最后两位作为分库因子 00订单表 oid(64位) 使用分布式ID生成62位(如雪花算法) + 分库因子按照上述方法,可以保证同一个用户的所有订单,都落在同一个库上,可以通过用户uid%4定位库,也可以通过oid%4定位到库
作者:韩_师兄
来源链接:https://blog.csdn.net/ABestRookie/article/details/124160714
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。