设计思想赏析-基因算法

简介: 设计思想赏析-基因算法

这是我的第6篇原创


亲爱的同学们~~~今天给大家介绍一个超牛的解决方案,我第一次知道的时候都惊呆了!这就是~~~


基因 法算


    之前给大家介绍过单表超大的时候,需要分表,一般都是用主键进行hash,或者直接用雪花算法生成全局唯一id,然后按2^n取模,把一张超多数据的表,分成2^n个表。这个时候,问题来了:

如果一个业务里有多个key,例如订单中心,有buyer_id、order_id、seller_id等,我们希望相关的业务都入到同一个库或者同一个表,这样能减少跨库、跨表操作,增加效率。这该怎么办呢?


SX方案设计



彭小贝拍了拍脑袋说:这个简单啊,分库前,先用业务id关联一下分库的那个id,然后就知道在哪个库里了,然后再分出去就好了。

然后彭小贝就因为系统资源开销太大,访问效率极低, 被领导骂了一通,灰溜溜的回家了

彭小贝回到家,掏出钥匙准备打开公寓大门,发现隔壁小美也掏出钥匙正对着他笑。彭小贝愣愣的看着小美手上的钥匙突然想到了什么,转身往公司跑,回身没忘喊了一句“谢谢小美~~~”


设计思路

分库/表策略还得关联表,那肯定是不行的,那怎么做才能直接定位到我们期望的库/表呢?绝对不能等分的时候才去找,那样太慢了。能不能在之前就先定好呢?就像给公寓每个人分配一个大门钥匙那样,有钥匙的就能进公寓,这就不会错了。

彭小贝拿出了雪花算法生成图:

如果我们对一个10进制的数字按10取模,取模的结果与这串数的前面所有位都没有任何关系,最后1位决定取模结果:

MOD(18739,10) = 9
MOD(45314321432149,10) = 9
MOD(19,10) = 9
MOD(666669,10) = 9

同理,按100取模,最后2位决定取模结果,按1000取模,最后3位决定取模结果:

MOD(18739,10) = 9
MOD(18739,100) = 39
MOD(18739,1000) = 739

同理:一个二进制的值,按2^n取模,也是最后n位决定取模结果:

MOD(199,16) = 7
DEC2BIN(199) = 11000111
DEC2BIN(7) = 0111

所以能不能把全局唯一用户id的最后几位作为公寓 钥匙一样,其他id生成的时候带上这把钥匙,就能把一个用户的所有数据都放到同一个公寓(库/表中呢?理论是可以的!


彭小贝在雪花算法的图下加入了订单id生成的示意图, 假定需要分16张表,则需要截取二进制订单id的最后LOG(16,2)=4位,作为分库/分表基因。

然后对订单id用hash生成60位,加上从用户id那边获取的4位基因,形成最终的订单id。其他业务id也使用相同的办法处理。

分库/分表策略时,直接设定使用该id进行水平切分。由于所有业务都有相同的最后4位,这样sharding时都会进入相同的库/表。简直太完美了!


彭小贝赶忙拿起手机给小美发了一条感谢的微信~~


相关文章
|
2月前
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩分享分库分表的基因算法设计,涵盖分片键选择、水平拆分策略及基因法优化查询效率等内容,助力面试者应对大厂技术面试,提高架构设计能力。
美团面试:百亿级分片,如何设计基因算法?
|
2月前
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩在读者群中分享了关于分库分表的基因算法设计,旨在帮助大家应对一线互联网企业的面试题。文章详细介绍了分库分表的背景、分片键的设计目标和建议,以及基因法的具体应用和优缺点。通过系统化的梳理,帮助读者提升架构、设计和开发水平,顺利通过面试。
美团面试:百亿级分片,如何设计基因算法?
|
6月前
|
算法
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
|
7月前
|
机器学习/深度学习 算法 测试技术
【深度优先搜索】【树】【C++算法】2003. 每棵子树内缺失的最小基因值
【深度优先搜索】【树】【C++算法】2003. 每棵子树内缺失的最小基因值
|
算法 Oracle 关系型数据库
设计思想赏析-分布式id生成算法-雪花算法
设计思想赏析-分布式id生成算法-雪花算法
|
算法 数据可视化 Python
一种基于R语言tidyverse的算法:批量查找SNP位点连锁区内对应的QTL以及基因
一种基于R语言tidyverse的算法:批量查找SNP位点连锁区内对应的QTL以及基因
|
机器学习/深度学习 人工智能 算法
Nature子刊:AI算法破解癌细胞基因特征,准确率可达99%!
Nature子刊:AI算法破解癌细胞基因特征,准确率可达99%!
122 0
|
算法 C++ Python
BFS逛街算法模板-附LeetCode习题-433. 最小基因变化-广度优先搜索
BFS逛街算法模板-附LeetCode习题-433. 最小基因变化-广度优先搜索
|
算法 搜索推荐 数据库
Nat. Commun | 用于全基因组药物重定位的系统网络算法
Nat. Commun | 用于全基因组药物重定位的系统网络算法
263 0
Nat. Commun | 用于全基因组药物重定位的系统网络算法
|
人工智能 达摩院 算法
阿里达摩院AI算法上线:疑似病例基因分析缩短至半小时!
刚刚浙江省疾控中心宣布,利用阿里达摩院AI算法,首次将原本数小时的疑似病例基因分析缩短至半小时!
1107 0
阿里达摩院AI算法上线:疑似病例基因分析缩短至半小时!