`
zhaohaolin
  • 浏览: 1003784 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

基于Hash算法的Mysql分表处理

阅读更多

下面为您介绍的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算法,才能生成更多的表,然数据查询的更迅速。

分享到:
评论

相关推荐

    kettle对数据分表插入

    总的来说,结合Kettle、Oracle数据库、Java脚本和哈希算法,我们可以构建出一个高效的数据分表插入解决方案,这对于大数据环境下的数据处理和分析具有重要意义。在实际工作中,理解并掌握这些技术,将有助于提升数据...

    mysql分库分表分区1

    与 HASH 分区不同,KEY 分区只能用整数值列,并且由 MySQL 自己控制哈希算法。同样,这里没有具体的 KEY 分区示例,但其一般形式为 `PARTITION BY KEY(COLUMN_NAME) PARTITIONS 4`。这适用于希望简化分区策略,让...

    MySQL分库分表,读写分离与Mycat的使用文章中字符串hash解析算法分片sql

    MySQL分库分表,读写分离与Mycat的使用文章中字符串hash解析算法分片sql

    MySQL分表和分区的具体实现方法

    MySQL数据库在处理大数据量时,可能会遇到性能瓶颈,这时就需要采取一些优化策略,其中分表和分区是常见的解决方案。本文将详细介绍这两种技术及其在MySQL中的具体实现。 **垂直分表**是将一个宽表(包含大量列)...

    MySQL分区分表的设计及实现-收藏备用.pdf

    本文提出的优化分区分表算法主要基于MySQL中的range分区和Merge存储引擎。通过合理的分区策略和高效的存储机制,该算法能够有效提升大规模数据查询的操作效率。 ##### 3.1 Range分区 Range分区是一种常见的分区...

    MySQL分库分表,读写分离与Mycat的使用文章中一致性hash分片sql

    MySQL分库分表,读写分离与Mycat的使用文章中一致性hash分片sql

    数据库技术与应用专场——02_58同城mysql分库分表实践-沈剑

    ### 数据库技术与应用专场——58同城MySQL分库分表实践 #### 一、基本概念 在数据库领域,为了应对大数据量所带来的挑战,通常会采用分库分表的技术手段来提升系统的整体性能和可扩展性。以下是几个关键概念: - ...

    第三版_基于Mycat的MySQL主从读写分离配置详解与示例

    本篇文章将深入探讨如何基于Mycat进行MySQL主从读写分离的配置,并提供相关示例。 一、Mycat简介 Mycat是一款由中国人自主研发的开源数据库中间件,它支持分布式事务、分库分表、读写分离等功能。Mycat的核心设计...

    mysql-5.7.34-winx64.zip

    哈希分表通过特定算法(如MD5或自定义函数)计算出哈希值,根据哈希值将数据分布到不同的表;范围分表则依据列值的范围来划分,比如按时间区间进行分表;列表分表则是预先定义好的一组值,将数据按照这些值分配到...

    记录一些MySQL、Redis面试题以及一些常见的算法题 获取最新MySQL面试题

    8. **分区与分表**:理解MySQL的分区策略,以及如何通过水平/垂直切分来解决大数据量问题。 对于Redis,你需要关注的点有: 1. **数据结构**:Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合,理解...

    第五节课交易分库分表详解一1

    - **散列 Hash**:通过哈希算法将数据均匀分布到各个库表,减少数据热点,但扩展性较差,因为扩容可能导致数据迁移。 - **范围 Range**:按数据范围分配,易于扩展,但难以解决数据热点问题。 3. 实战应用: - *...

    mysql源码

    2. 查询优化器:解析后的查询会被查询优化器处理,选择最佳的执行计划,如决定使用索引、选择合适的连接算法(Nested Loop Join, Merge Join, Hash Join)等。 3. 执行器:执行优化后的计划,与存储引擎交互,完成...

    1亿条数据如何分表100张到Mysql数据库中(PHP)

    最后,为了方便查询所有分表中的数据,可以使用MySQL的`MERGE`存储引擎来实现一个逻辑上的“虚拟表”。通过创建一个`MERGE`表,将所有分表作为子表,这个`MERGE`表本身不存储任何数据,只是提供了统一的查询接口。...

    mysql分区

    4. **键分区(Key)**:类似于哈希分区,但使用MySQL内部算法来计算哈希值。 5. **复合分区(Composite)**:结合两种或更多分区方法,例如范围-列表分区。 **分区的优势** 1. **查询性能**:通过减少扫描的数据量...

    mysql性能优化教程.pdf (by caoz)

    - **解决方案**:通过预排序IP地址表并在内存中维护,利用折半查找算法进行查询。 - **实战案例2:查询同一地区的异性用户** - **挑战**:在一个高并发社区中,根据地区和性别快速找到最近登录的用户。 - **查询...

    Mysql性能优化教程.doc

    - **背景**: 针对已具备一定MySQL使用经验的工程师,特别是适用于高并发、海量数据处理的互联网环境。 - **目标**: 通过对MySQL性能优化的学习与实践,提升系统的响应速度和承载能力。 **1.2 认识数据索引** - **...

    去哪儿MySQL开发规范

    3. **用HASH进行散表**:通过哈希算法实现数据分布均衡,表名后缀使用十进制数,从0开始递增。 4. **按日期时间分表**:对于日志类数据或具有时间属性的数据,可以按照年月日小时等格式进行分表,便于管理和查询。 ...

Global site tag (gtag.js) - Google Analytics