zoukankan      html  css  js  c++  java
  • 多重分表分库一般解决方案

    1 设 d个地区,每个地区c个集群,每个集群b个库,每个库a个表

    index=hash % (a*b*c*d)

    地区所在:index/(a*b*c)

    index=index % (a*b*c)

    集群所在:index/(a*b)

    index=index % (a*b)

    库所在:index/(a)

    index=index % (a)

    表所在:index

    2 举个例子

    1个地区d

    2个集群c

    4个库b

    5个表a

    某个key初始index=28,共40个槽,我们可以想出,27所在第1个地区,第2个集群,第2个库,第4个表(0、1、2、3)

    我们用公式:

    地区=28/40=0;index=28

    集群=28/20=1;index=8

    库   =  8/  5=1;index=3

    表   =3

    索引从0开始

    3 分表分库

    此时d=c=1,公式简化为:

    index=hash % (a*b*1*1)=hash %(a*b)

    地区所在:index/(a*b*1)=0

    index=index % (a*b*1)=hash %(a*b)

    集群所在:index/(a*b)=0

    index=index % (a*b)=hash %(a*b)

    库所在:index/(a)

    index=index % (a)

    表所在:index

    4 分表

    index=index % (a*b)=hash %(a*b)=hash %(a)

    库所在:index/(a)=0

    index=index % (a)=hash %(a)

    表所在:index

    ip白名单算法(pdd活跃用户) 

    a=8(每个字节存8个bit,一个bit一个ip),b=0.5g

    index=index % (a*b)=hash %(a*b)=hash=val 属于 [0, 2^32-1]

    注意,java的hash用int型,浪费一个符号位,其取值属于 [0, 2^31-1],且所有ip在[0, 2^31-1]上均匀不重合分布

    b所在:index/(a)=val / 8

    index=index % (a)=val % 8

    a所在:index

    6 ip白名单redis版,同样在上面那片文章中

    d=1,c=4(4个redis实例),b=128m,a=8

    index=hash % (a*b*c*d)=val % (a*b*c)=val % 4g=val % 2^32=val(because:val [0, 2^32-1])

    地区所在:index/(a*b*c)=0

    index=index % (a*b*c)=val

    集群c所在:index/(a*b)=val / 1g

    index=index % (a*b)=val % 1g

    库b所在:index/(a)=val % 1g / 8

    index=index % (a)=val % 1g % 8

    表a所在:index

  • 相关阅读:
    JS---元素属性的操作
    JS---异常
    JS---OOP
    T-SQL---分页语句
    mui---在关闭webview之前给出提示
    mui---通过plus.webview.create创建webview并打开新页面并传参到新页面
    mui---要打开的页面loaded不自动显示,等服务器返回数据后,再做处理逻辑
    winform/timer控件/权限设置/三级联动
    winform 进程、线程
    winform 之MDI容器
  • 原文地址:https://www.cnblogs.com/silyvin/p/12650190.html
Copyright © 2011-2022 走看看