​业务开发中你用到了哪些算法(续)?

本文介绍了在业务开发中如何利用简单的哈希算法进行分库分表,通过function(key) % num公式实现数据定位。同时讨论了在分布式环境中,Nginx的ip_hash策略如何临时解决会话保持问题,并引出一致性哈希算法来减少节点变化带来的影响,降低数据迁移范围。
摘要由CSDN通过智能技术生成

【这是一猿小讲的第 74 篇原创分享】

上次我们一起聊了聊普通 hash 算法在实际中的应用,但是按照一猿小讲的风格,绝不能止于应用,为了能让面试官再喝一壶,还是要稍微升华一下,话不多说,本期的分享正式开始(建议一定要读到最后)。

01. 闷头看代码


一、回首上期,提炼精华。

栗1:假如订单表要分 3 张,首先用当前数据库的时间与某一固定的时间计算出的相差的天数 days;然后用 days % 3 算出当前数据应该放到订单表的下标。

庖丁解牛,解剖栗子。

步骤1:days 是当前时间(key)与某一固定的时间计算出的相差的天数,简化为 days = function(key);

步骤2:订单表分 3 张,那么订单表的下标 = days % 3;

结论1:int position = function(key) % 3

栗2:假如数据库要分 dbNum 节点,首先用分库依据字段 key 经过 crc32 加工得到值 x;然后用 x % dbNum 算出当前数据落到对应库的下标。

庖丁解牛,解剖栗子。

步骤一:x 是经过 crc32 加工之后的值,简化为 x = function(key);

步骤二:数据库分 dbNum 节点,那么数据库的下标 =  x % dbNum;

结论2:int position = function(key) % dbNum

栗3:假如在 dbNum 个数据库下再分 tableNum 张表,首先用分库依据字段 key 经过 crc32 加工得到值 x;然后用 x % tbaleNum 算出当前数据落到对应表的下标。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值