基因分库分表

Posted Dreamer who

tags:

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

场景:

    数据存储中,相互关系的表,尽量分库时落到同一个库中,避免遍历多个库查询,而且还能避免分布式事务。

  一般分库或者分表我们采用取余操作,余数相同的id落到相同的库中,或分表规则一致。

 

解决理论:

参考:https://stackoverflow.com/questions/6670715/mod-of-power-2-on-bitwise-operators

根据理论:

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位数。所有我们可以位操作符把高位清零就可以得到余数。

int mod = number & ~(-1 << n)

所以,n的取舍关系到分库的数量或者分表的数量,即2^n 个库或表。故我们把二进制的最后n位数,即上述代码中的mod称为分库分表因子。

 

所以,需要生成的新id只要最后末尾放入分库或分表因子就达到了我们的目的。

 

参考:

 

https://github.com/baidu/uid-generator

https://github.com/johnhuang-cn/snowflake-uid

https://gitee.com/yu120/sequence

https://mp.weixin.qq.com/s/ad4tpM6cdi9r6vgfbaTzxg

https://github.com/sumory/uc/blob/master/src/com/sumory/uc/id/IdWorker.java

https://mp.weixin.qq.com/s/AHRCYOjnXAgcy2j6vziukQ

http://mziccard.me/2015/05/08/modulo-and-division-vs-bitwise-operations/

https://stackoverflow.com/questions/3072665/bitwise-and-in-place-of-modulus-operator

https://stackoverflow.com/questions/6670715/mod-of-power-2-on-bitwise-operators

https://stackoverflow.com/questions/3072665/bitwise-and-in-place-of-modulus-operator

https://github.com/Predictor/javasnowflake/blob/master/IdGenerator/src/org/predictor/idgenerator/BasicEntityIdGenerator.java

https://gitee.com/simpleweb/id-generator

以上是关于基因分库分表的主要内容,如果未能解决你的问题,请参考以下文章

EFCore动态切换Schema

数据库Sharding的基本思想和切分策略

分库分表 ---SpringBoot + ShardingSphere 实现分库分表

AppBoxFuture: 分而治之

分库分表技术及技术方案

分库分表 ---SpringBoot + ShardingSphere 实现分表