一种对phpmysql数据库进行分表的方法

文档序号:6358014阅读:830来源:国知局
专利名称:一种对php mysql数据库进行分表的方法
技术领域
本发明涉及数据库技术领域,尤其涉及一种对PHP MYSQL数据库进行分表的方法。
背景技术
随着软件的WEB化,越来越多的系统都采用WEB形式来实现。而LAMP则是WEB 开发中最经典、最流行的开发模式。PHP是一门解释型语言,开发速度快,跨平台,可以快速适应各种业务需求的变化。Mysql是目前应用最广泛的开源关系数据库,以高并发、高效率著称。在web2. O时代,数据急剧膨胀,以社会性网络服务(Social NetworkingServices, SNS)为例,比如用户达到百万级以后,其所带来的站内信、系统消息等与用户个人相关的数据都将达到千万级以上,甚至达到亿级数据。所以开始采用主从读写分离技术,分散服务器的压力。但是主从同步之间的各方面性能开销也很大,而且并不能减少单表的数据量,即不能降低单表查询时的压力。接下来开始采用拆表,把千万级的数据表水平拆分成几十个独立的表,这时每个独立的表数据只有几十万,查询效率将是原有千万级的几十倍,而且可以把独立的表放到独立的数据库服务器上,来分散数据库服务器压力。Mysql Proxy是Mysql官方推出的一款开源Mysql代理软件。MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断、改变并转发客户端和后端数据库之间的通信来实现其功能,这和WinGate之类的网络代理服务器的基本思想是一样的。Mysqlproxy实现Mysql的传输协议Mysql Protocol。Mysql Protocol包括认证和查询两个基本过程。 认证过程包括
1、客户端向服务器发起连接请求;
2、服务器向客户端发送握手信息;
3、客户端向服务器发送认证请求;
4、服务器向客户端发送认证结果。如果认证通过,则进入查询过程
1、客户端向服务器发起查询请求;
2、服务器向客户端返回查询结果。Mysql proxy就是介入协议的各个过程。首先MySQL Proxy以服务器的身份接受客户端请求,根据配置对这些请求进行分析处理,然后以客户端的身份转发给相应的后端数据库服务器,再接受服务器的信息,返回给客户端,所以MySQL Proxy需要同时实现客户端和服务器的协议。最后Mysql proxy根据分析结果来加载所配置的LUA脚本文件,来控制连接转发的机制,并把从服务器端返回的结果,发送给客户端。所以通过Mysql Proxy来 分表时,就要对SQL里面的值通过LUA来分析,然后再连接到对应的数据库服务器。上述Mysql Proxy的分表方式通过代理及LUA解析来实现,存在以下的缺点
在PHP程序和Mysql服务器之间还得再加一层代理层,Mysql proxy代理了真正的服务器,所以有些服务器的配置信息也得重新在Mysql Proxy重新配置一份,导致Mysql配置文件的冗余。代理层加长了数据的响应时间及网络传输,也加长用户的操作等待时间。Mysql的语法分析在Mysql proxy中分析一次又得在Mysql Server中再分析一次。LUA是解释型脚本开发语言,执行效率低。同样的硬件服务器,一台Mysql Proxy只能支持两到三台数据库服务器。如上所述,采用Mysql Proxy的分表管理方式严重增加硬件的资金投入,及其所引起的各方面的消耗,包括电能,机房等。

发明内容
本发明的目的在于提出一种对PHP MYSQL数据库进行分表的方法,能够提高数据库的执行效率,缩短服务器的响应时间及用户等待操作时间,减少服务器数量及硬件资金投入。 为达此目的,本发明采用以下技术方案
一种对PHP MYSQL数据库进行分表的方法,其特征在于,包括以下步骤
A、对数据库每个表生成一个ORMModel类;
B、每个ORMModel类记录分表的字段信息;
C、准备对数据库执行操作时,计算数据库的分表信息;
D、根据所述分表信息,取得与分表所在数据库的连接;
E、执行对数据库的操作。ORM Model类中包含一个属性,用来配置所述ORM Model类对应的数据库表用于进行分表的字段。
ORM Model类中包含一个属性,用来设置要分表的算法。采用了本发明的技术方案,可以把整个数据库千万级的大表拆分成小表,使数据库的执行效率几十倍的提高;在高并发、大数据量的WEB应用系统中,可以提高用户的体验,留住更多用户;省去了中间数据库代理层,可以节约更多的硬件资金;使数据库的添加分表更容易。


图I是本发明具体实施方式
中对PHP MYSQL数据库进行分表的流程图。
具体实施例方式下面结合附图并通过具体实施方式
来进一步说明本发明的技术方案。本发明技术方案的主要思想把每个表都自动生成一个ORM Model类,对数据库的操作都封装在Model类里,在Model类里通过PHP的数组来对sql进行分表数据分析,只对分表进行分析,减小了 sql语法分析的复杂度及其系统资源消耗,直接连接对应的数据库服务器,没有再经过中间代理层,缩短服务器的响应时间及用户等待操作时间,减少服务器数量及硬件资金投入。图I是本发明具体实施方式
中对PHP MYSQL数据库进行分表的流程图。如图I所示,该流程包括以下步骤步骤101、对数据库每个表生成一个ORM Model类。步骤102、每个ORM Model类记录分表的字段信息。步骤103、准备对数据库执行操作时,计算数据库的分表信息。步骤104、根据分表信息,取得与分表所在数据库的连接。步骤105、执行对数据库的操作。ORM Model类中包含一个属性_farm_field,用来配置所述ORM Model类对应的数据库表用于进行分表的字段。ORM Model类中还包含一个属性_farm_id,用来设置要分表的算法。例如用户的站内信,都有一个接收者的用户ID,receive_id,业务逻辑都是以接收 者的用户ID来取数据,则把_farm_f ield属性的值设置为“receivejd”,意思为根据字段receive_id来做分表,然后_farm_id属性的值设置为一个数字,则在取数据库连接时就会去根据receive_id的值对_farm_id进行取余,取得的余数就为该表所在的数据库名的后缀。根据数据库名就可以取得连接到该数据库服务器的句柄,然后就可以进行数据库操作。以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
权利要求
1.ー种对PHP MYSQL数据库进行分表的方法,其特征在于,包括以下步骤 A、对数据库每个表生成ー个ORMModel类; B、每个ORMModel类记录分表的字段信息; C、准备对数据库执行操作吋,计算数据库的分表信息; D、根据所述分表信息,取得与分表所在数据库的连接; E、执行对数据库的操作。
2.根据权利要求I所述的ー种对PHPMYSQL数据库进行分表的方法,其特征在于,ORMModel类中包含ー个属性,用来配置所述ORM Model类对应的数据库表用于进行分表的字段。
3.根据权利要求I所述的ー种对PHPMYSQL数据库进行分表的方法,其特征在于,ORMModel类中包含ー个属性,用来设置要分表的算法。
全文摘要
本发明公开了一种对PHP MYSQL数据库进行分表的方法,对数据库每个表生成一个ORM Model类,每个ORM Model类记录要分表的字段信息,准备对数据库执行操作时,计算数据库的分表信息,根据所述分表信息,取得与分表所在数据库的连接,执行对数据库的操作。采用了本发明的技术方案,能够提高数据库的执行效率,缩短服务器的响应时间及用户等待操作时间,减少服务器数量及硬件资金投入。
文档编号G06F17/30GK102682044SQ20111009333
公开日2012年9月19日 申请日期2011年4月14日 优先权日2011年4月14日
发明者陈繁荣 申请人:天脉聚源(北京)传媒科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1