`
liudaoru
  • 浏览: 1578614 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用HSCALE实现MySQL的数据分布式存储

    博客分类:
  • java
阅读更多

From:http://www.ningoo.net/html/2008/using_hscale_for_mysql_partition_.html

 

针对单个表过大造成的性能问题,MySQL在5.1开始引入了分区表(partition),可以将数据在内部拆分存储,对应用透明,但是分区表只能将表在同一个数据库内部分解,而且对于表的维护(比如执行alter table)还是比较麻烦。手工分表也是一个解决方法,手工分表还有一个好处是可以将表分布到不同的服务器中,实现分布式存储。但是手工分表要求应用程序做相应的改写,以支持从不同的表中来存取数据。

HSCALE简单来说就是一个支持手工分表的中间层,对于应用来说看起来还是一个表,而由HSCALE来负责底层子表的数据存取。HSCALE是基于MySQL Proxy的一个插件应用,通过MySQL Proxy的lua脚本拦截分拆对应的SQL语句来实现数据的分布存储,而且使用lua脚本可以自由定制分表策略,比起MySQL自己的partition更加灵活些。现在版本还是0.2,功能有限,只能实现同库分表,但是基于MySQL Proxy的架构,未来要实现示分库分表也不是什么难事。

作者利用mysqlslap对HSCALE和MySQL Proxy做了几组性能测试,结果参考这里,还有这里

当然,现在MySQL Proxy和HSCALE都是刚刚起步,要在产品库中应用还有很长的一段路要走,从上面的性能测试中可以看到基于最新的MySQL Proxy 0.7版的HSCALE性能有了较大的提升,期待后续版本有更好的表现。

本文网址:http://www.ningoo.net/html/2008/using_hscale_for_mysql_partition_.html

分享到:
评论
1 楼 liudaoru 2009-10-15  
MySQL Proxy工作机制浅析
From:http://www.ningoo.net/html/2008/how_mysql_proxy_works.html

MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断、改变并转发客户端和后端数据库之间的通信来实现其功能,这和WinGate之类的网络代理服务器的基本思想是一样的。代理服务器是和TCP/IP协议打交道,而要理解MySQL Proxy的工作机制,同样要清楚MySQL客户端和服务器之间的通信协议,MySQL Protocol包括认证和查询两个基本过程:

认证过程包括:

客户端向服务器发起连接请求
服务器向客户端发送握手信息
客户端向服务器发送认证请求
服务器向客户端发送认证结果
如果认证通过,则进入查询过程:

客户端向服务器发起查询请求
服务器向客户端返回查询结果
当然,这只是一个粗略的描述,每个过程中发送的包都是有固定格式的,想详细了解MySQL Protocol的同学,可以去这里看看。MySQL Proxy要做的,就是介入协议的各个过程。首先MySQL Proxy以服务器的身份接受客户端请求,根据配置对这些请求进行分析处理,然后以客户端的身份转发给相应的后端数据库服务器,再接受服务器的信息,返回给客户端。所以MySQL Proxy需要同时实现客户端和服务器的协议。由于要对客户端发送过来的SQL语句进行分析,还需要包含一个SQL解析器。可以说MySQL Proxy相当于一个轻量级的MySQL了,实际上,MySQL Proxy的admin server是可以接受SQL来查询状态信息的。

MySQL Proxy通过lua脚本来控制连接转发的机制。主要的函数都是配合MySQL Protocol各个过程的,这一点从函数名上就能看出来:

connect_server()
read_handshake()
read_auth()
read_auth_result()
read_query()
read_query_result()
至于为什么采用lua脚本语言,我想这是因为MySQL Proxy中采用了wormhole存储引擎的关系吧,这个虫洞存储引擎很有意思,数据的存储格式就是一段lua脚本,真是创意无限啊。

相关推荐

    HSCALE-开源

    通过HSCALE,用户可以将单一的MySQL数据库表拆分成多个分区,并将这些分区分布到不同的MySQL服务器上,从而实现水平扩展,提升系统的读写性能和并发处理能力。 一、HSCALE的工作原理 1. 分区策略:HSCALE支持多种...

    通过Java实现对PDF页面的详细设置

    通过Java实现对PDF页面的详细设置是指使用Java语言对PDF文件进行个性化设置的过程,通过使用Free Spire.PDF of Java 2.2.2(免费版)库,我们可以轻松地实现对PDF页面的详细设置,并生成高质量的PDF文件。

    控件自适应窗体大小

    #### 二、结构设计与数据存储 为了实现控件自适应,需要定义一个结构体`controlRect`来存储每个控件的位置和尺寸信息: ```csharp public struct controlRect { public int Left; public int Top; public int ...

    【JavaScript源代码】Vue实现大屏页面的屏幕自适应.docx

    本文档将详细讲解如何使用Vue框架来实现大屏页面的屏幕自适应功能,并提供具体的代码示例与实践指导。 #### 设置大屏设计尺寸 首先,为了确保页面能够在不同大小的大屏上正确显示,我们需要在项目的配置文件中设置...

    pdf417二维码 c++封装

    int _stdcall MakePdf417(char *StrText,int hscale,int vscale,char *path = ""); /* StrText 文本 nLevel 纠错等级 0-3 nVersion 版本0-40 bAutoExtent 传1 nMaskingNo 掩膜方式 -1 到 7 path 临时图片生成路径 ...

    pdf417 c++ 上个资源有问题重新上传

    int _stdcall MakePdf417(char *StrText,int hscale,int vscale,char *path = ""); /* StrText 文本 nLevel 纠错等级 0-3 nVersion 版本0-40 bAutoExtent 传1 nMaskingNo 掩膜方式 -1 到 7 path 临时图片生成路径 ...

    opencv中图片添加文字

    主函数中,我们创建了一个500x600像素的8位RGB图像,用黑色填充。接着,我们在图像上两个不同的位置添加了文字,坐标分别为(35, 40)和(122, 230),并且在两个位置之间画了一条黄色的线作为连接。最后,我们创建了一...

    java缩略图

    double hScale = ((double) width) / ((double) outWidth);// 宽缩小的倍数 double vScale = ((double) height) / ((double) outHeight);// 高缩小的倍数 int winX0, winY0, winX1, winY1; int valueRGB = 0; ...

    Perl.GTK.Reference.pdf

    Packageindex Gtk.......................................................................................................................................................................................3...

Global site tag (gtag.js) - Google Analytics