美文网首页JAVA进阶
数据库横向分表(基因法)

数据库横向分表(基因法)

作者: lionel880 | 来源:发表于2022-04-02 10:07 被阅读0次

    架构-水平切分架构之基因法
    https://blog.csdn.net/weixin_30470857/article/details/95320795

    假设我们一条帖子的字段包含:帖子ID,发起的用户ID
    先考虑一个业务,用户要发帖子,数量很大,需要分库分表,如何进行拆分
    业务:查询用户的所有帖子、查询帖子详情。

    普通水平切分:
      根据帖子ID切分则无法一次查询用户的所有帖子;
      根据用户ID切分则需要先查帖子所属用户;

    什么是分库基因?
      通过uid分库,假设分为16个库,采用uid%16的方式来进行数据库路由,这里的uid%16,其本质是uid的最后4个bit决定这行数据落在哪个库上,这4个bit,就是分库基因。

    什么是基因法分库?

       image.png

    如上图所示,uid=666的用户发布了一条帖子(666的二进制表示为:1010011010):
      使用uid%16分库,决定这行数据要插入到哪个库中
      分库基因是uid的最后4个bit,即1010
      在生成tid时,先使用一种分布式ID生成算法生成前60bit(上图中绿色部分)
      将分库基因加入到tid的最后4个bit(上图中粉色部分)
      拼装成最终的64bit帖子tid(上图中蓝色部分)

    这般,保证了同一个用户发布的所有帖子的tid,都落在同一个库上,tid的最后4个bit都相同,于是:
        通过uid%16能够定位到库
        通过tid%16也能定位到库

    基因法为什么能实现这个特性和其他应用

    利用了基因的思想,从一个维度的信息里,摘取了一个分库基因,其他维度信息里也全会带上
    ,使得所有维度的信息都能通过此分库基因完成分库

    此思想也可以用于这类分流系统中

    相关文章

      网友评论

        本文标题:数据库横向分表(基因法)

        本文链接:https://www.haomeiwen.com/subject/hsrxwltx.html