架构-水平切分架构之基因法

Posted John_ABC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了架构-水平切分架构之基因法相关的知识,希望对你有一定的参考价值。

业务:查询用户的所有帖子、查询帖子详情。

字段:用户ID、帖子ID。

普通水平切分:

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

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

什么是基因法分库?
  

  如上图所示,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也能定位到库

  全局唯一ID也可以通过表自增位置和自增范围实现,比如用户ID哈希为 1 的表,自增位置为1,自增范围为 10。

以上是关于架构-水平切分架构之基因法的主要内容,如果未能解决你的问题,请参考以下文章

多key业务,数据库水平切分架构一次搞定

[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法

《架构漫谈》读后感 之“关于软件架构师如何工作”

数据库水平切分(拆库拆表)的实现原理解析(转)

MySQL之分库分表(MyCat)

数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器(转)