在大型的应用中,我们经常碰到MySQL的表数据需要无限扩充的情形。我们通常有以下一些解决方案,但是现成的方案都不是完美的。
比如,
MySQL master/slave: 只适合大量读的情形,未必适合海量数据。
MySQL cluster: 提供的可能不是大家想要那种功能。
MySQL proxy: MySQL master/slave配合
MySQL 5.1 partition: 只是将一个表存储上逻辑分开,部分改善了性能,但是可扩展性仍然是问题。
MySQL 按应用逻辑分表和分数据库,通过程序来决定数据存放的表,目前很多公司都是这么做的。它的主要问题是跨区查询,可参考Tim以前的文章MySQL分表实现上百万上千万记录分布存储的批量查询设计模式
使用程序来分表分服务器最大的问题是比较繁琐,需要程序做很多特殊处理,需要程序员了解数据存放在哪个服务器哪个表,这样,几乎所有的程序员都牵涉了进来, 也容易出错。那如果我们把分表的逻辑放到中间层则上层的应用就简单很多,而且可以单点控制分表的逻辑,方便调整与扩展。
HSCALE分表分数据库的思路
HSCALE就是这样一个产品,它是在MySQL proxy的基础上,在MySQL proxy的层面将上层的请求分配到实际的表上。实际的原理是通过拦截SQL进行替换和服务器重定向再将SQL传递到目标服务器上。它的分表算法可以由自定义的Lua脚本来实现,非常灵活。目前已经能支持同数据库分表,跨数据库的实现也将增加,因为在MySQL proxy的框架下,这并不是很困难的事情。现在的版本或许不是很成熟,但是在原理上我觉得是基本上没多大障碍,发展下去将是一个不错的选择。
HSCALE具体的性能测试简单介绍如下。
使 用HSCALE有2个开销,一是网络层面的,下面的测试环境大约MySQL proxy对每个SQL会增加0.02ms的网络延迟,如果增加了HSCALE, 则会增加到0.3ms,第2个开销则是MySQL proxy, Lua, SQL解析,HSCALE算法等造成,可看下面数据。
(图片来源:pero.blogs.aprilmayjune.org)
结论是最极端的情况下,在10个线程的情况下,使用MySQL proxy会需要大约3倍时间,HSCALE则是10倍。
注意结论是MySQL方面最优化的情况,查找一个三条记录的表。在实际环境中的latency和这个没有直接比例关系(比如1:3)。测试结果不太令人满意,幸好后面新版本MySQL proxy的测试数据得到了改善。
使用了MySQL proxy 的 svn版本,性能提升很大。MySQL/MySQL proxy从1:3提升到1:2, HSCALE同样也提升比较大。具体结果见连接。但是仍然迫切希望作者再有提升。
今天说到大部分技术Blog都以介绍国外技术与产品的文章为主,没有深度,当然我这篇也不例外。:)
- 大小: 24.5 KB
- 大小: 28.5 KB
分享到:
相关推荐
MySQL数据库之分库分表方案_ITPUB博客.mhtml MySQL数据库之分库分表方案_ITPUB博客.mhtml MySQL数据库之分库分表方案_ITPUB博客.mhtml
mysql分表分库demo
Python+MySQL分表分库实战. 值得收藏与下载哦....!!!!!!!!!!!!
Python与MySQL分表分库实战,压缩包文件,欢迎下载。11
本文讲的是mysql大数据分库和分表 php解决方案。 mysql分库分表方案、mysql 分库方案、php实现mysql分库分表、mysql高并发解决方案。
其中有每个命令的使用说明与注释。并增加了清理数据的方式。以及导入输入的注意事项
MySQL分表及分表后插入sql语句,表为订单表,可以参考一下
mysql分表的3种方法 MySQL数据库扩展小记 mysql架构方案 MySQL水平分区表实际操作总结 Mysql水平分表 mysql水平分表和垂直分表和数据库分区 sysbench mysql 坚持不懈 sysbench安装和使用 SHOW INNODB STATUS 探秘 ...
mysql, 面试题, 数据库, 数据管理, 数据库管理, 数据库设计, sql, 数据查询, 数据库优化, 数据库安全, 数据库备份, 数据库恢复, 数据库性能, 数据库索引, 数据库事务, 数据库存储引擎, 数据库连接池, 数据库分库分表...
PHP操作mysql数据库分表的方法_.docx
Node.js 实现的 MySQL 分表分库中间件,用于海量数据的分布式集群储存管理和高并发访问。
使用mysql5.7+sharding-proxy实现分表,策略为每半年时间分一次表
基于hibernate的mysql分表分库实例-mysql-cluster-hibernate
MySQL数据库分表批量主键查询代理-mysql-partitions-proxy
一个MySQL分库分表php类。当一个表数据记录过大时就会出现性能瓶颈,而一般对应的解决办法是要么做分区表,要么分表,分区表就...而分库则可以很方便的转移数据库的压力,比如将一个很大库的分 别放在不同的服务器上。
数据库分库分表 数据库分库分表 数据库分库分表
mysql分表分库-mysqlfenbaiofenku
Python后端运维工程师的可靠参考书,重点介绍如何优化mysql数据库性能。
MySQL分表和分区最佳攻略 word版本,