zoukankan      html  css  js  c++  java
  • 架构-水平切分架构之基因法

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

    字段:用户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。

  • 相关阅读:
    使用路由传参时,query与params的区别!
    写前端页面步骤----vue+iview
    使用vue做表单验证
    vue中find函数
    @Controller和@RestController的区别?
    JavaScript 拥有动态类型
    Console的9种用法
    Navicat连接Oracle报ORA-12737错误
    oracle查询数据库连接数相关
    oracle存储过程把查询到的值更新到别的表
  • 原文地址:https://www.cnblogs.com/JohnABC/p/7145257.html
Copyright © 2011-2022 走看看