【这是一猿小讲的第 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 算出当前数据落到对应表的下标。