- 浏览: 50287 次
- 性别:
文章分类
- 全部博客 (103)
- 一致性哈希算法 (1)
- 云计算 (2)
- Cassandra学习 (2)
- Java网络通信与笔记 (14)
- ZooKeeper学习 (1)
- HBase学习 (1)
- Sqoop学习 (1)
- Java网页开发之 (2)
- Java网络通信框架 (5)
- (memcached)分布式内存对象缓存系统 (1)
- Redis学习 (5)
- Shell学习 (14)
- Linux学习 (10)
- MySQL优化 (17)
- C++ (7)
- HTML5 (5)
- Android学习 (5)
- 网络 (2)
- Node.js (1)
- D3.js (1)
- R语言学习 (3)
- Spark (1)
- CAN协议 (2)
- 解决方案 (0)
最新评论
下面为您介绍的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算法,才能生成更多的表,然数据查询的更迅速。
我们知道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算法,才能生成更多的表,然数据查询的更迅速。
发表评论
-
数据库中表散列
2015-10-29 00:52 589数据库中的散列法 ... -
mysql大数据高并发处理
2015-10-26 22:00 427一、数据库结构的设计 ... -
优化SQL查询:如何写出高性能SQL语句
2015-10-17 17:41 446优化SQL查询:如何写出高性能SQL语句 这个问题 ... -
MySqL性能优化
2015-09-06 21:26 0I 硬件配置优化 Ø CPU选择:多核 ... -
Mysq日志管理(错误日志、查询日志、慢查询日志)
2015-09-06 21:01 0错误日志 记录内容:包含了当mysqld启动和停止时,以及服 ... -
MySql均衡负载
2015-09-06 21:01 01) 利用mysql 复制分流查询操作 利用mysql的主从复 ... -
如何减少对Mysql的访问以优化SQL语句
2015-09-06 21:00 0避免对同一数据做重复 ... -
使用mysql连接池提高性能
2015-09-06 20:59 0对于访问数据库来说,建立连接的代价比较昂贵,因此,我们有必要建 ... -
Mysql锁的优化
2015-09-06 20:59 0获取锁等待情况 可以 ... -
Mysql数据表的优化
2015-09-26 22:26 435优化表的数据类型 表需要使用何种数据类型,是需要根据应用来判 ... -
调整Mysql中insert、update、delete的顺序来以提高效率
2015-09-26 22:26 620MySQL还允许改变语句调度的优先级,它可以使来自多个客户端的 ... -
Mysql join语句的优化
2015-09-26 22:25 346Mysql4.1开始支持SQL的子查询。这个技术可以使用SEL ... -
Mysql order by语句的优化
2015-09-19 11:56 404在某些情况中,MySQL可以使用一个索引来满足ORDER BY ... -
Mysql group by语句的优化
2015-09-13 16:01 387默认情况下,MySQL排序所有GROUP BY col1, c ... -
Mysql insert语句的优化
2015-09-08 22:59 3461) 如果你同时从同一客户插入很多行,使用多个值表的INSER ... -
Mysql大量插入数据时SQL语句的优化
2015-09-11 22:00 4741) 对于Myisam类型的表,可以通过以下方式快速的导入大量 ... -
Mysql索引优化教程
2015-09-08 22:59 417索引的存储分类 myisam表的数据文件和索引文件是自动分开 ... -
Mysql下优化SQL的一般步骤
2015-09-07 11:50 348通过show status和应用特点了解各种SQL的执行频率 ... -
Mysql SQL Mode详解
2015-09-07 11:50 470Mysql SQL Mode简介 MySQL服务器能够工作在 ... -
Mysql使用SQL的安全问题,Mysql防止SQL注入
2015-09-07 11:50 405SQL注入简述 SQL Injection ...
相关推荐
总的来说,结合Kettle、Oracle数据库、Java脚本和哈希算法,我们可以构建出一个高效的数据分表插入解决方案,这对于大数据环境下的数据处理和分析具有重要意义。在实际工作中,理解并掌握这些技术,将有助于提升数据...
与 HASH 分区不同,KEY 分区只能用整数值列,并且由 MySQL 自己控制哈希算法。同样,这里没有具体的 KEY 分区示例,但其一般形式为 `PARTITION BY KEY(COLUMN_NAME) PARTITIONS 4`。这适用于希望简化分区策略,让...
MySQL分库分表,读写分离与Mycat的使用文章中字符串hash解析算法分片sql
MySQL数据库在处理大数据量时,可能会遇到性能瓶颈,这时就需要采取一些优化策略,其中分表和分区是常见的解决方案。本文将详细介绍这两种技术及其在MySQL中的具体实现。 **垂直分表**是将一个宽表(包含大量列)...
本文提出的优化分区分表算法主要基于MySQL中的range分区和Merge存储引擎。通过合理的分区策略和高效的存储机制,该算法能够有效提升大规模数据查询的操作效率。 ##### 3.1 Range分区 Range分区是一种常见的分区...
还讲解了 MySQL 数据库水平分库分表的常见策略,如 range、hash 取模等。 课程对常见的分库分表中间件进行了介绍,重点讲解了 Apache ShardingSphere 和 Sharding-Jdbc 的相关知识,包括常见概念术语和分片算法。在...
MySQL分库分表,读写分离与Mycat的使用文章中一致性hash分片sql
### 数据库技术与应用专场——58同城MySQL分库分表实践 #### 一、基本概念 在数据库领域,为了应对大数据量所带来的挑战,通常会采用分库分表的技术手段来提升系统的整体性能和可扩展性。以下是几个关键概念: - ...
哈希分表通过特定算法(如MD5或自定义函数)计算出哈希值,根据哈希值将数据分布到不同的表;范围分表则依据列值的范围来划分,比如按时间区间进行分表;列表分表则是预先定义好的一组值,将数据按照这些值分配到...
本篇文章将深入探讨如何基于Mycat进行MySQL主从读写分离的配置,并提供相关示例。 一、Mycat简介 Mycat是一款由中国人自主研发的开源数据库中间件,它支持分布式事务、分库分表、读写分离等功能。Mycat的核心设计...
8. **分区与分表**:理解MySQL的分区策略,以及如何通过水平/垂直切分来解决大数据量问题。 对于Redis,你需要关注的点有: 1. **数据结构**:Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合,理解...
- **散列 Hash**:通过哈希算法将数据均匀分布到各个库表,减少数据热点,但扩展性较差,因为扩容可能导致数据迁移。 - **范围 Range**:按数据范围分配,易于扩展,但难以解决数据热点问题。 3. 实战应用: - *...
2. 查询优化器:解析后的查询会被查询优化器处理,选择最佳的执行计划,如决定使用索引、选择合适的连接算法(Nested Loop Join, Merge Join, Hash Join)等。 3. 执行器:执行优化后的计划,与存储引擎交互,完成...
最后,为了方便查询所有分表中的数据,可以使用MySQL的`MERGE`存储引擎来实现一个逻辑上的“虚拟表”。通过创建一个`MERGE`表,将所有分表作为子表,这个`MERGE`表本身不存储任何数据,只是提供了统一的查询接口。...
4. **键分区(Key)**:类似于哈希分区,但使用MySQL内部算法来计算哈希值。 5. **复合分区(Composite)**:结合两种或更多分区方法,例如范围-列表分区。 **分区的优势** 1. **查询性能**:通过减少扫描的数据量...
- **解决方案**:通过预排序IP地址表并在内存中维护,利用折半查找算法进行查询。 - **实战案例2:查询同一地区的异性用户** - **挑战**:在一个高并发社区中,根据地区和性别快速找到最近登录的用户。 - **查询...
- **Hash索引**:对于内存表等特定类型的表,MySQL也会使用Hash索引。Hash索引通过哈希函数计算索引值对应的存储位置,适用于等值查询,但在范围查询或排序方面不如B树索引高效。 ##### 实战范例:IP地址反查 假设...
- **背景**: 针对已具备一定MySQL使用经验的工程师,特别是适用于高并发、海量数据处理的互联网环境。 - **目标**: 通过对MySQL性能优化的学习与实践,提升系统的响应速度和承载能力。 **1.2 认识数据索引** - **...