当前位置: 首页 >数据库 > 关于分库分表之基因法

关于分库分表之基因法

关于分库分表之基因法

在新业务表中,因考虑到后续表数据量较大,对于数据的查询等操作有很大的影响,所以考虑分库分表操作.

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),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/112445.html

标签:分库分表
分享给朋友:

“关于分库分表之基因法” 的相关文章

mysql 查询1小时内 2022年06月06日 12:59:30
MySQL 查询指定时间范围内的数据 2022年06月06日 16:59:25
shell简单处理mysql查询结果 2022年06月10日 23:22:02
关于mysql查询时间范围的问题 2022年06月12日 21:19:01
mysql的查询操作 2022年06月14日 12:38:40
MySQL 查询结果替换 2022年06月15日 10:48:11
mysql查询数据库的名称 2022年06月17日 22:38:25