下面为您介绍的Mysql分表处理是基于Hash算法的,在了解该Mysql分表处理方法之前,让我们先来了解一下Hash算法。
我们知道Hash表就是通过某个特殊的Hash算法计算出的一个值,这个值必须是惟一的,并且能够使用这个计算出来的值查找到需要的值,这个叫做哈希表。
我们在分表里的hash算法跟这个思想类似:通过一个原始目标的ID或者名称通过一定的hash算法计算出数据存储表的表名,然后访问相应的表。
继续拿上面的贴吧来说,每个贴吧有版块名称和版块ID,那么这两项值是固定的,并且是惟一的,那么我们就可以考虑通过对这两项值中的一项进行一些运算得出一个目标表的名称。
现在假如我们针对我们这个贴吧系统,假设系统***允许1亿条数据,考虑每个表保存100万条记录,那么整个系统就不超过100个表就能够容纳。按照这个标准,我们假设在贴吧的版块ID上进行hash,获得一个key值,这个值就是我们的表名,然后访问相应的表。
我们构造一个简单的hash算法:
function get_hash($id){$str = bin2hex($id);$hash = substr($str, 0, 4);if (strlen($hash)<4){$hash = str_pad($hash, 4, “0”);}return $hash;}
算法大致就是传入一个版块ID值,然后函数返回一个4位的字符串,如果字符串长度不够,使用0进行补全。
比如:get_hash(1),输出的结果是“3100”,输入:get_hash(23819),得到的结果是:3233,那么我们经过简单的跟表前缀组合,就能够访问这个表了。那么我们需要访问ID为1的内容时候哦,组合的表将是:topic_3100、reply_3100,那么就可以直接对目标表进行访问了。
当然,使用hash算法后,有部分数据是可能在同一个表的,这一点跟hash表不同,hash表是尽量解决冲突,我们这里不需要,当然同样需要预测和分析表数据可能保存的表名。
如果需要存储的数据更多,同样的,可以对版块的名字进行hash操作,比如也是上面的二进制转换成十六进制,因为汉字比数字和字母要多很多,那么重复几率更小,但是可能组合成的表就更多了,相应就必须考虑一些其它的问题。
归根结底,使用hash方式的话必须选择一个好的hash算法,才能生成更多的表,然数据查询的更迅速。
【编辑推荐】
MySQL 服务器 的内部锁定
Mysql Merge表的优点
带您深入了解Mysql临时表
MySQL Show语句用法介绍
地方时和区时的计算公式?
1、求时区:时区数=已知经度/15°(商四舍五入取整数,即为时区数)2、求区时:所求区时=已知区时±时区差(东加西减)3、求地方时:所求地方时=已知地方时±4分钟/度×经度差(东加西减)1.地方时
①概念:因经度而不同的时刻
②成因:地球自西向东自转,使同纬度偏东地点时刻早。 经度每隔15º,地方时相差1小时。
③计算公式:
所求地方时=已知地方时± (经度差)×4分钟
(所求地在东,“±”号取“+”号,反之取“-”号)
2.时区和区时
①时区:理论上全球划分成24个时区,每隔经度15º划为一个时区。
②区时:各时区同一使用本时区中央经线的地方时作为全区共同使用的时间就叫区时。 时刻为东早西晚。 相邻两时区的区时相差1小时。
③计算公式:
所求区时=已知区时±时区差(东加西减)
9点30到12点20,是几个小时,计算公式是怎样的
12时20分一9时30分=11时80分一9时30分=2小时50分

百分数达标率计算公式
达标率=达标人数÷总人数×100%
发表评论