CN102402596A - 一种主从分离数据库的读写方法和系统 - Google Patents

一种主从分离数据库的读写方法和系统 Download PDF

Info

Publication number
CN102402596A
CN102402596A CN2011103501249A CN201110350124A CN102402596A CN 102402596 A CN102402596 A CN 102402596A CN 2011103501249 A CN2011103501249 A CN 2011103501249A CN 201110350124 A CN201110350124 A CN 201110350124A CN 102402596 A CN102402596 A CN 102402596A
Authority
CN
China
Prior art keywords
sql statement
table name
switched
current
database
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2011103501249A
Other languages
English (en)
Other versions
CN102402596B (zh
Inventor
张顺
王磊
李剑
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Sogou Technology Development Co Ltd
Original Assignee
Beijing Sogou Technology Development Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Sogou Technology Development Co Ltd filed Critical Beijing Sogou Technology Development Co Ltd
Priority to CN201110350124.9A priority Critical patent/CN102402596B/zh
Publication of CN102402596A publication Critical patent/CN102402596A/zh
Application granted granted Critical
Publication of CN102402596B publication Critical patent/CN102402596B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供了一种主从分离数据库的读写方法,涉及数据库领域。所述的方法包括:根据用户请求确认对应该请求的业务操作;对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句需要操作的表:判断是否对该表需要进行修改操作,如果是,则对所述表名进行记录;判断记录的表名中是否包含当前SQL语句需要操作的表的表名,如果包含,则将当前SQL语句切换到主数据库执行。本申请通过将用户请求对应的业务操作中的SQL语句序列中进行了修改操作的表的记录,可将该业务操作的后续所有对该表的操作都切换进入主数据库执行,不用过多的复杂的设计,在很低的成本下即可简单可靠的避免主从数据库同步的时延问题。

Description

一种主从分离数据库的读写方法和系统
技术领域
本申请涉及数据库领域,特别是涉及一种主从分离数据库的读写方法和系统。
背景技术
在大型企业应用中,由于大数据量和大并发访问,数据库很容易成为性能瓶颈。解决这个问题的方法之一是主从读写分离,即采用两个或多个数据库,其中一个为主数据库,主数据库可以读写,其它为从数据库库,从数据库只读,通过数据库管理系统提供的同步机制与主数据库同步数据。这种方式可以将只读操作转到从数据库,从而减轻主数据库的压力。但是主数据库到从数据库的同步不能做到完全实时,即主数据库到从数据库的同步存在一定的时间延迟,如果对主数据库完成写操作后,立即从从数据库读数据,由于存在时延,可能会读不到刚修改的数据。
比如对于修改用户资料的请求:这个请求包含两个数据库操作,首先更新数据库用户资料,然后查询用户资料并显示。用户提交修改用户资料的请求,由于该请求中包含写操作,该写操作切换到主数据库执行;修改完成之后该请求会立即查询用户资料并显示,但是查询操作会切换到从数据库执行,由于主从同步的延迟,主数据库的修改还没同步到从数据库,到从数据库查询取到的是修改之前的数据,从用户的角度看,就是更新没有成功,但实际上主数据库已经更新成功,只是还没同步到从数据库。
现有技术一般是通过缓存技术来解决上述主从数据库的时延问题,比如Memcache等缓存技术;其中,Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash(哈希)表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
在现有的缓存技术中,当一个用户请求对应的业务操作中的写操作执行后,会在内存中缓存被更新的对象,之后的查询先从内存中读取,并不会立即从从数据库读数据,从而避免了主从同步的时延问题。但是使用缓存技术需要考虑缓存副本数据与数据库中数据的一致性,还需要考虑缓存失效及缓存对象替换机制,而且缓存相对于数据库中海量的数据来说,其容量有限;另外,如果采用分布式缓存技术还要考虑缓存之间的同步问题。因此,缓存技术这种解决方案设计复杂,实施成本较高,尤其针对遗留系统的改造,一般需要改动已有程序,上述解决方案设计更为复杂,实施成本更高。
因此,目前需要本领域技术人员迫切解决的一个技术问题就是:如何简单可靠的解决主从数据库系统中读写分离时,当用户请求中包括先进行写操作后进行读操作而产生的主从同步的时延问题。
发明内容
本申请所要解决的技术问题是提供一种主从分离数据库的读写方法和系统,将对应用户请求的业务操作内进行更新的表进行记录,并将该业务操作内后续所有对该表的操作都切换到主数据库执行,简单可靠的避免了从从数据库读数据的同步时延问题。
为了解决上述问题,本申请公开了一种主从分离数据库的读写方法,包括:
根据用户请求确认对应该请求的业务操作;
对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句需要操作的表:
判断是否对该表需要进行修改操作,如果是,则对所述表名进行记录;如果否,则不记录所述表名;
以及,判断记录的表名中是否包含当前SQL语句需要操作的表的表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
优选的,通过以下步骤分析处理每一条SQL语句需要操作的表:
步骤A1,通过SQL分析器提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将所述表名插入更新记录器;
步骤A2,通过数据源切换器提取当前SQL语句需要操作的表的表名,查询所述更新记录器中是否包含所述表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
优选的,通过以下步骤分析处理每一条SQL语句需要操作的表:
步骤B1,通过SQL分析器提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将该表名插入更新记录器;步骤B2,通过SQL分析器查询所述更新记录器中是否包含所述表名,并将查询结果通知数据源切换器;
步骤B3,通过数据源切换器接收查询结果,如果所述更新记录器中包含所述表名,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
优选的,针对所述SQL语句序列,从第一条SQL语句开始,逐条进行处理之前包含:清空更新记录器;
和/或,在所有SQL语句序列执行完毕之后包含:清空更新记录器。
优选的,所述业务操作为用户请求在服务器端的处理过程。
优选的,所述的修改操作包括插入,和/或删除,和/或更新。
相应的,本申请还公开了一种主从分离数据库的读写系统,包括:
确认模块,用于根据用户请求确认对应该请求的业务操作;
SQL语句处理模块,用于对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句需要操作的表的表名:
判断其是否对该表需要进行修改操作,如果是,则对所述表名进行记录;如果否,则不记录所述表名;
以及,判断表名的记录中是否包含当前SQL语句需要操作的表的表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
优选的,所述SQL语句处理模块包括更新记录器,SQL分析器和数据源切换器;
所述SQL分析器用于提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将所述表名插入更新记录器;所述用于数据源切换器提取当前SQL语句需要操作的表的表名,查询所述更新记录器中是否包含所述表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行;
所述更新记录器用于存储进行了修改操作的表名。
优选的,所述SQL语句处理模块包括更新记录器,SQL分析器和数据源切换器;
所述SQL分析器用于提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将该表名插入更新记录器;查询所述更新记录器中是否包含所述表名;所述数据源切换器用于,当所述更新记录器中包含所述表名,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
本申请还公开了另外一种主从分离数据库的读写方法,包括:
根据用户请求确认对应该请求的业务操作;
对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句:
如果该SQL语句涉及修改操作,则将其需要操作的表名进行记录,并将当前SQL语句切换到主数据库执行;
如果该SQL语句涉及查询操作,则进一步判断表名记录中是否包括当前SQL语句需要操作的表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
优选的,所述的修改操作包括插入,和/或删除,和/或更新。
优选的,所述的查询操作包括选择、和/或查找、和/或排序、和/或总数、和/或求和、和/或平均、和/或最大、和/或最小。
与现有技术相比,本申请包含以下优点:
本申请通过在应用层对用户请求对应的业务操作中的SQL(StructuredQuery Language,结构化查询语言)语句序列逐条进行分析处理,如果当前SQL语句涉及修改操作,那么将其需要操作的表名进行记录;判断表名记录中是否包括当前的SQl语句需要操作的表名,如果包含,则将当前的SQL语句切换到主数据库执行。通过将用户请求对应的业务操作中的SQL语句序列中进行了修改操作的表的记录,可以将该业务操作的后续所有对该表的操作都切换进入主数据库执行,不用过多的复杂的设计,在很低的成本下即可简单可靠的避免主从数据库同步的时延问题。
附图说明
图1是本申请一种主从分离数据库的读写方法的流程示意图;
图2是本申请优选的SQL语句处理流程示意图;
图3是本申请另一种优选的SQL语句处理流程示意图;
图4是本申请另一种主从分离数据库的读写方法的流程示意图;
图5是本申请一种主从分离数据库的读写系统的结构示意图;
图6是本申请优选的SQL语句处理模块的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
本申请提供了一种主从分离数据库的读写方法和系统,通过在应用层对用户请求对应的业务操作中的SQL语句序列逐条进行分析处理,如果当前SQL语句涉及修改操作,那么将其需要操作的表名进行记录;判断表名记录中是否包括当前的SQl语句需要操作的表名,如果包含,则将当前的SQL语句切换到主数据库执行。通过将用户请求对应的业务操作中的SQL语句序列中进行了修改操作的表的记录,可以将该业务操作的后续所有对该表的操作都切换进入主数据库执行,相对于缓存技术那种复杂的设计和高昂的成本,本申请不用采用过多的复杂的设计,在很低的成本下即可简单可靠的避免主从数据库同步的时延问题。
参照图1,示出了本申请一种主从分离数据库的读写方法,包括:
步骤110,根据用户请求确认对应该请求的业务操作。
所述的业务操作为用户请求在服务器端的处理过程。当服务器端接收到用户的请求后,服务器端可以根据该用户请求处理的入口及出口来确定该次业务操作的开始和结束。例如:在J2EE(Java 2 Platform Enterprise Edition,提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求)技术框架下,处理的入口为Servlet(Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面)接收到用户的请求,出口为业务逻辑处理完毕发送HTTPResponse(HTTP响应头)给客户端。
在实际中,业务操作的开始和结束可以根据实际情况进行定义。
步骤120,对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句需要操作的表:
步骤121,判断是否对该表需要进行修改操作,如果是,则转入步骤121a,如果否,则转入步骤121b;
步骤121a,对所述表名进行记录;
步骤121b,不记录所述表名;
步骤122,判断记录的表名中是否包含当前SQL语句需要操作的表的表名,如果包含,则转入步骤122a,反之,则转入步骤122b;
步骤122a,将当前SQL语句切换到主数据库执行;
步骤122b,将当前SQL语句切换到从数据库执行。
在实际中,上述业务操作也即用户请求在服务器端的处理过程中包含了若干条SQL语句,这些SQL语句根据实际的处理过程存在一定的先后顺序,即上述业务操作包括了SQL语句序列,而本申请利用上述的SQL语句序列进行分析处理。
在分析处理所述SQL语句序列时,根据SQL语句序列的顺序,逐条分析处理每一条SQL语句需要操作的表:
判断是否对该表需要进行修改操作,如果是,则对所述表名进行记录;如果否,则不记录所述表名;
以及,判断记录的表名中是否包含当前SQL语句需要操作的表的表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
优选的,参照图2通过以下步骤分析处理每一条SQL语句需要操作的表:
步骤A1,通过SQL分析器提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将所述表名插入更新记录器。
例如,对于所述SQL语句序列中第一条SQL语句“UPDATE A SETA.a=1,A.b=2”,SQL分析器提取该SQL语句需要操作的表的表名A,并分析该SQL语句的需要进行的操作“UPDATE”是修改操作,则将表名A插入更新记录器,此时更新记录器结果为{A}。如果不是,则不进行任何操作,即不将该表插入更新记录器。
其中,所述的修改操作包括插入,和/或删除,和/或更新等对表进行修改的操作,比如“insert”,“delete”,“update”等操作命令。
步骤A2,通过数据源切换器提取当前SQL语句需要操作的表的表名,查询所述更新记录器中是否包含所述表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
当步骤A1将处理过的SQL语句传入数据源切换器时,数据源切换器提取当前SQL语句需要操作的表名,并从所述的更新记录器中查询其记录中是否包含当前SQL语句所要操作的表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
比如前述SQL语句UPDATE A SET A.a=1,A.b=2”,数据源切换器提取其表名为A,查询更新记录器的记录结果{A}中包括表名A,则将当前SQL语句切换到主数据库执行。
在步骤A1,当SQL语句序列中有多个表需要进行修改操作,则可将所有需要进行修改操作的表的表名插入更新记录器。比如当上述SQL语句序列中第二条SQL语句为“UPDATE B SET B.m=3,B.n=4”SQL分析器提取该SQL语句需要操作的表的表名B,并分析该SQL语句的需要进行的操作“UPDATE”是修改操作,则将表名B插入更新记录器,此时更新记录器结果为{A,B}。
另外,针对所述SQL语句序列,从第一条SQL语句开始,逐条进行处理之前包含:清空更新记录器。
和/或,在所有SQL语句序列执行完毕之后包含:清空更新记录器。
在实际中,可以清空更新记录器为一个表名的空集合。
下面以一个示例说明本申请的处理SQL语句序列的一个优选方案:
步骤一、根据用户请求确认对应该请求的业务操作。
步骤二、清空更新记录器为表名的空集合{}。
步骤三、对于该业务操作中包含的SQL语句序列:
1、SELECT*FROM A;
2、SELECT*FROM B;
3、UPDATE A SET A.a=1,A.b=2;
4、UPDATE B SET B.m=1,B.n=2;
5、SELECT*FROM A;
6、SELECT*FROM B;
7、SELECT*FROM C。
进行逐条分析处理:
首先对第1条SQL语句“SELECT*FROM A”进行分析处理:
通过步骤A1,SQL分析器提取“SELECT*FROM A”需要操作的表的表名为A,由于“SELECT”不是修改操作,是查询操作,不插入更新记录器;
通过步骤A2,数据源切换器提取“SELECT*FROM A”需要操作的表的表名A,查询到更新记录器中没有表名A的记录,切换“SELECT*FROMA”到从数据库执行。
再对第2条SQL语句“SELECT*FROM B”进行分析处理:
通过步骤A1,SQL分析器提取“SELECT*FROM B”需要操作的表的表名为B,由于“SELECT”不是修改操作,是查询操作,不插入更新记录器;
通过步骤A2,数据源切换器提取“SELECT*FROM B”需要操作的表的表名B,查询到更新记录器中没有表名B的记录,切换“SELECT*FROMB”到从数据库执行。
再对第3条SQL语句“UPDATE A SET A.a=1,A.b=2”进行分析处理:
通过步骤A1,SQL分析器提取“UPDATE A SET A.a=1,A.b=2”需要操作的表的表名为A,由于“UPDATE”是修改操作,插入更新记录器,则更新记录器结果为{A};
通过步骤A2,数据源切换器提取“UPDATE A SET A.a=1,A.b=2”需要操作的表的表名A,查询到更新记录器中有表名A的记录,切换“UPDATEA SET A.a=1,A.b=2”到主数据库执行。
再对第4条SQL语句“UPDATE B SET B.m=1,B.n=2”进行分析处理:
通过步骤A1,SQL分析器提取“UPDATE B SET B.m=1,B.n=2”需要操作的表的表名为B,由于“UPDATE”是修改操作,插入更新记录器,则更新记录器结果为{A,B};
通过步骤A2,数据源切换器提取“UPDATE B SET B.m=1,B.n=2”需要操作的表的表名B,查询到更新记录器中有表名B的记录,切换“UPDATEB SET B.m=1,B.n=2”到主数据库执行。
再对第5条SQL语句“SELECT*FROM A”进行分析处理:
通过步骤A1,SQL分析器提取“SELECT*FROM A”需要操作的表的表名为A,由于“SELECT”不是修改操作,是查询操作,不插入更新记录器;
通过步骤A2,数据源切换器提取“SELECT*FROM A”需要操作的表的表名A,查询到更新记录器中有表名A的记录,切换“SELECT*FROM A”到主数据库执行。
再对第6条SQL语句“SELECT*FROM B”进行分析处理:
通过步骤A1,SQL分析器提取“SELECT*FROM B”需要操作的表的表名为B,由于“SELECT”不是修改操作,是查询操作,不插入更新记录器;
通过步骤A2,数据源切换器提取“SELECT*FROM B”需要操作的表的表名B,查询到更新记录器中有表名B的记录,切换“SELECT*FROM B”到主数据库执行。
再对第7条SQL语句“SELECT*FROM C”进行分析处理:
通过步骤A1,SQL分析器提取“SELECT*FROM C”需要操作的表的表名为C,由于“SELECT”不是修改操作,是查询操作,不插入更新记录器;
通过步骤A2,数据源切换器提取“SELECT*FROM C”需要操作的表的表名C,查询到更新记录器中没有表名C的记录,切换“SELECT*FROMC”到从数据库执行。
由上可见,由于在第3条语句中对表A进行了修改操作,在第4条语句中对表B进行了修改操作,之后的第5条针对表A的查询操作和第6条针对表B的查询操作也被切换到主数据库执行,从而避免了主从不同步的问题。而第1条针对表A的操作,第2条针对表B的操作和第7条针对表C的操作,由于没有修改操作,并且更新记录器中没有相应表名记录,则都会切换到从数据库执行。
优选的,参照图3,本申请还可通过以下步骤分析处理每一条SQL语句需要操作的表:
步骤B1,通过SQL分析器提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将该表名插入更新记录器;
步骤B2,通过SQL分析器查询所述更新记录器中是否包含所述表名,并将查询结果通知数据源切换器;
步骤B3,通过数据源切换器接收查询结果,如果所述更新记录器中包含所述表名,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
本方案与前述方案最大的区别在于通过SQL分析器将当前的SQL语句是否包含更新记录器中记录的表名的查询结果直接通知给数据源切换器,数据源切换器不用再进行判断而直接根据SQL分析器的查询结果选择将当前的SQL语句切换到主数据库执行还是切换到从数据库执行。
本申请对于SQL分析的方法不加以限定,任何能够提取SQL语句表名和分析当前SQL语句对所述表名进行哪种操作的具体方法都可适用于本申请。
另外,还可以通过如下步骤对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句:
步骤S121,判断该SQL语句是否为修改操作或查询操作;
步骤S122,如果是修改操作,则将其需要操作的表名进行记录,并将当前SQL语句切换到主数据库执行;
步骤S123,如果是查询操作,则进一步判断表名记录中是否包括当前SQL语句需要操作的表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
在实际中,首先可通过SQL分析器判断当前的SQL语句执行的是修改操作还是查询操作;
如果是修改操作,则将其需要操作的表名插入更新记录器,并通知数据源切换器将该SQL语句切换到主库数据执行;
如果是查询操作,则可通过SQL分析器查询更新记录器中记录的表名是否包括当前SQL语句需要操作的表名,如果包含,则通知数据源切换器将该SQL语句切换到主数据库执行,如果不包含,则通知数据源切换器将该SQL语句切换到从数据库执行;或者可通过数据源切换器查询更新记录器中记录的表名是否包括当前SQL语句需要操作的表名,如果包含,则将该SQL语句切换到主数据库执行,如果不包含,则将该SQL语句切换到从数据库执行。
参照图4,其示出了本申请另一种主从分离数据库的读写方法,包括:
步骤210,根据用户请求确认对应该请求的业务操作;
步骤220,对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句:
步骤221,如果该SQL语句涉及修改操作,则将其需要操作的表名进行记录,并将当前SQL语句切换到主数据库执行;
步骤222,如果该SQL语句涉及查询操作,则进一步判断表名记录中是否包括当前SQL语句需要操作的表名,如果包含,则转入步骤222a,反之,则转入步骤222b;
步骤222a,将当前SQL语句切换到主数据库执行;
步骤222b,将当前SQL语句切换到从数据库执行。
所述的修改操作包括插入,和/或删除,和/或更新等对表进行修改的操作。
所述的查询操作包括选择、和/或查找、和/或排序、和/或总数、和/或求和、和/或平均、和/或最大、和/或最小等对表进行查询的操作。
对于如何分析当前SQL语句涉及的是修改操作还是查询操作,前面实施例具有详细描述,为了简便,在此不再赘述。
参照图5,其示出了本申请一种主从分离数据库的读写系统,包括:
确认模块310,用于根据用户请求确认对应该请求的业务操作;
SQL语句处理模块320,用于对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句需要操作的表的表名:
判断其是否对该表需要进行修改操作,如果是,则对所述表名进行记录;如果否,则不记录所述表名;
判断表名的记录中是否包含当前SQL语句需要操作的表的表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
优选的,参照图6,SQL语句处理模块包括更新记录器410,SQL分析器420和数据源切换器430;
所述SQL分析器用于提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将所述表名插入更新记录器;
所述用于数据源切换器提取当前SQL语句需要操作的表的表名,查询所述更新记录器中是否包含所述表名,如果包含,则将当前SQL语句切换到主数据库执行440,反之,则将当前SQL语句切换到从数据库执行450;
所述更新记录器用于存储进行了修改操作的表名。
优选的,所述SQL语句处理模块包括更新记录器,SQL分析器和数据源切换器;
所述SQL分析器用于提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将该表名插入更新记录器;并查询所述更新记录器中是否包含所述表名;
所述数据源切换器用于,当所述更新记录器中包含所述表名,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
以上对本申请所提供的一种主从分离数据库的读写方法和系统,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (12)

1.一种主从分离数据库的读写方法,其特征在于,包括:
根据用户请求确认对应该请求的业务操作;
对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句需要操作的表:
判断是否对该表需要进行修改操作,如果是,则对所述表名进行记录;如果否,则不记录所述表名;
以及,判断记录的表名中是否包含当前SQL语句需要操作的表的表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
2.根据权利要求1所述的方法,其特征在于,通过以下步骤分析处理每一条SQL语句需要操作的表:
步骤A1,通过SQL分析器提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将所述表名插入更新记录器;
步骤A2,通过数据源切换器提取当前SQL语句需要操作的表的表名,查询所述更新记录器中是否包含所述表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
3.根据权利要求1所述的方法,其特征在于,通过以下步骤分析处理每一条SQL语句需要操作的表:
步骤B1,通过SQL分析器提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将该表名插入更新记录器;步骤B2,通过SQL分析器查询所述更新记录器中是否包含所述表名,并将查询结果通知数据源切换器;
步骤B3,通过数据源切换器接收查询结果,如果所述更新记录器中包含所述表名,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
4.如权利要求2或3所述的方法,其特征在于:
针对所述SQL语句序列,从第一条SQL语句开始,逐条进行处理之前包含:清空更新记录器;
和/或,在所有SQL语句序列执行完毕之后包含:清空更新记录器。
5.根据权利要求1所述的方法,其特征在于:
所述业务操作为用户请求在服务器端的处理过程。
6.如权利要求1所述的方法,其特征在于:
所述的修改操作包括插入,和/或删除,和/或更新。
7.一种主从分离数据库的读写系统,其特征在于,包括:
确认模块,用于根据用户请求确认对应该请求的业务操作;
SQL语句处理模块,用于对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句需要操作的表的表名:
判断其是否对该表需要进行修改操作,如果是,则对所述表名进行记录;如果否,则不记录所述表名;
以及,判断表名的记录中是否包含当前SQL语句需要操作的表的表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
8.如权利要求7所述的系统,其特征在于:
所述SQL语句处理模块包括更新记录器,SQL分析器和数据源切换器;
所述SQL分析器用于提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将所述表名插入更新记录器;所述用于数据源切换器提取当前SQL语句需要操作的表的表名,查询所述更新记录器中是否包含所述表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行;
所述更新记录器用于存储进行了修改操作的表名。
9.如权利要求7所述的系统,其特征在于:
所述SQL语句处理模块包括更新记录器,SQL分析器和数据源切换器;
所述SQL分析器用于提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将该表名插入更新记录器;查询所述更新记录器中是否包含所述表名;所述数据源切换器用于,当所述更新记录器中包含所述表名,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
10.一种主从分离数据库的读写方法,其特征在于,包括:
根据用户请求确认对应该请求的业务操作;
对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句:
如果该SQL语句涉及修改操作,则将其需要操作的表名进行记录,并将当前SQL语句切换到主数据库执行;
如果该SQL语句涉及查询操作,则进一步判断表名记录中是否包括当前SQL语句需要操作的表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
11.如权利要求10所述的方法,其特征在于:
所述的修改操作包括插入,和/或删除,和/或更新。
12.如权利要求10所述的方法,其特征在于:
所述的查询操作包括选择、和/或查找、和/或排序、和/或总数、和/或求和、和/或平均、和/或最大、和/或最小。
CN201110350124.9A 2011-11-07 2011-11-07 一种主从分离数据库的读写方法和系统 Active CN102402596B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110350124.9A CN102402596B (zh) 2011-11-07 2011-11-07 一种主从分离数据库的读写方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110350124.9A CN102402596B (zh) 2011-11-07 2011-11-07 一种主从分离数据库的读写方法和系统

Publications (2)

Publication Number Publication Date
CN102402596A true CN102402596A (zh) 2012-04-04
CN102402596B CN102402596B (zh) 2016-01-20

Family

ID=45884796

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110350124.9A Active CN102402596B (zh) 2011-11-07 2011-11-07 一种主从分离数据库的读写方法和系统

Country Status (1)

Country Link
CN (1) CN102402596B (zh)

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103678696A (zh) * 2013-12-27 2014-03-26 金蝶软件(中国)有限公司 控制数据读取分离的方法及装置
CN104504145A (zh) * 2015-01-05 2015-04-08 浪潮(北京)电子信息产业有限公司 一种实现数据库读写分离的方法和设备
CN104572638A (zh) * 2013-10-09 2015-04-29 腾讯科技(深圳)有限公司 数据读写方法及装置
CN104714945A (zh) * 2013-12-11 2015-06-17 世纪禾光科技发展(北京)有限公司 一种搭建商品信息系统的方法及系统
CN106156076A (zh) * 2015-03-31 2016-11-23 阿里巴巴集团控股有限公司 数据处理的方法和系统
CN106682021A (zh) * 2015-11-09 2017-05-17 五八同城信息技术有限公司 数据库迁移方法及装置
CN106874281A (zh) * 2015-12-11 2017-06-20 北京新媒传信科技有限公司 实现数据库读写分离的方法和装置
CN106960054A (zh) * 2017-04-01 2017-07-18 北京奇虎科技有限公司 数据文件的存取方法及装置
CN107038222A (zh) * 2017-03-24 2017-08-11 福建天泉教育科技有限公司 数据库缓存实现方法及其系统
CN107291926A (zh) * 2017-06-29 2017-10-24 搜易贷(北京)金融信息服务有限公司 一种binlog分析方法
CN107506378A (zh) * 2017-07-20 2017-12-22 阿里巴巴集团控股有限公司 数据库访问的实现方法和装置
CN108304406A (zh) * 2017-01-12 2018-07-20 阿里巴巴集团控股有限公司 一种数据库读写方法、装置及电子设备
CN109542631A (zh) * 2018-11-22 2019-03-29 上海达梦数据库有限公司 一种备机的重演方法、装置、服务器及存储介质
CN109992695A (zh) * 2019-04-10 2019-07-09 北京奇艺世纪科技有限公司 一种视频信息查询方法及装置
CN110019362A (zh) * 2017-11-08 2019-07-16 中移(苏州)软件技术有限公司 一种访问数据库的方法及装置
CN110727698A (zh) * 2019-09-09 2020-01-24 上海陆家嘴国际金融资产交易市场股份有限公司 数据库访问方法、装置、计算机设备和存储介质
CN110865829A (zh) * 2018-08-28 2020-03-06 北京京东金融科技控股有限公司 数据库升级方法、系统、设备及存储介质
CN111221840A (zh) * 2018-11-23 2020-06-02 阿里巴巴集团控股有限公司 数据处理方法及装置、数据缓存方法、存储介质、系统
EP3559832A4 (en) * 2016-12-23 2020-08-05 Ingram Micro Inc. USER INTERFACE BACK-CLUSTER SCALING TECHNIQUES FOR DATABASE-RELATED APPLICATIONS
CN112951437A (zh) * 2019-12-11 2021-06-11 北京懿医云科技有限公司 医疗数据管理方法、装置、存储介质与电子设备
CN113760960A (zh) * 2020-06-01 2021-12-07 北京搜狗科技发展有限公司 一种信息生成方法、装置和用于生成信息的装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1928873A (zh) * 2006-09-25 2007-03-14 华为技术有限公司 一种实现负荷分担的数据库访问方法及系统
CN101000619A (zh) * 2006-12-25 2007-07-18 华为技术有限公司 基于sql的数据同步方法及装置
CN101587476A (zh) * 2008-05-22 2009-11-25 中兴通讯股份有限公司 一种实现分布式存储的内存数据库系统及应用

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1928873A (zh) * 2006-09-25 2007-03-14 华为技术有限公司 一种实现负荷分担的数据库访问方法及系统
CN101000619A (zh) * 2006-12-25 2007-07-18 华为技术有限公司 基于sql的数据同步方法及装置
CN101587476A (zh) * 2008-05-22 2009-11-25 中兴通讯股份有限公司 一种实现分布式存储的内存数据库系统及应用

Cited By (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104572638A (zh) * 2013-10-09 2015-04-29 腾讯科技(深圳)有限公司 数据读写方法及装置
CN104572638B (zh) * 2013-10-09 2019-03-26 腾讯科技(深圳)有限公司 数据读写方法及装置
CN104714945A (zh) * 2013-12-11 2015-06-17 世纪禾光科技发展(北京)有限公司 一种搭建商品信息系统的方法及系统
CN103678696A (zh) * 2013-12-27 2014-03-26 金蝶软件(中国)有限公司 控制数据读取分离的方法及装置
CN103678696B (zh) * 2013-12-27 2018-06-01 金蝶软件(中国)有限公司 控制数据读取分离的方法及装置
CN104504145A (zh) * 2015-01-05 2015-04-08 浪潮(北京)电子信息产业有限公司 一种实现数据库读写分离的方法和设备
CN106156076A (zh) * 2015-03-31 2016-11-23 阿里巴巴集团控股有限公司 数据处理的方法和系统
CN106682021A (zh) * 2015-11-09 2017-05-17 五八同城信息技术有限公司 数据库迁移方法及装置
CN106874281B (zh) * 2015-12-11 2020-02-07 北京新媒传信科技有限公司 实现数据库读写分离的方法和装置
CN106874281A (zh) * 2015-12-11 2017-06-20 北京新媒传信科技有限公司 实现数据库读写分离的方法和装置
EP3559832A4 (en) * 2016-12-23 2020-08-05 Ingram Micro Inc. USER INTERFACE BACK-CLUSTER SCALING TECHNIQUES FOR DATABASE-RELATED APPLICATIONS
US11030215B2 (en) 2016-12-23 2021-06-08 Ingram Micro Inc. Technologies for scaling user interface backend clusters for database-bound applications
CN108304406A (zh) * 2017-01-12 2018-07-20 阿里巴巴集团控股有限公司 一种数据库读写方法、装置及电子设备
CN107038222A (zh) * 2017-03-24 2017-08-11 福建天泉教育科技有限公司 数据库缓存实现方法及其系统
CN107038222B (zh) * 2017-03-24 2020-02-28 福建天泉教育科技有限公司 数据库缓存实现方法及其系统
CN106960054B (zh) * 2017-04-01 2020-10-02 北京奇虎科技有限公司 数据文件的存取方法及装置
CN106960054A (zh) * 2017-04-01 2017-07-18 北京奇虎科技有限公司 数据文件的存取方法及装置
CN107291926B (zh) * 2017-06-29 2020-08-18 搜易贷(北京)金融信息服务有限公司 一种binlog分析方法
CN107291926A (zh) * 2017-06-29 2017-10-24 搜易贷(北京)金融信息服务有限公司 一种binlog分析方法
CN107506378A (zh) * 2017-07-20 2017-12-22 阿里巴巴集团控股有限公司 数据库访问的实现方法和装置
CN107506378B (zh) * 2017-07-20 2020-06-16 阿里巴巴集团控股有限公司 数据库访问的实现方法和装置
CN110019362A (zh) * 2017-11-08 2019-07-16 中移(苏州)软件技术有限公司 一种访问数据库的方法及装置
CN110865829A (zh) * 2018-08-28 2020-03-06 北京京东金融科技控股有限公司 数据库升级方法、系统、设备及存储介质
CN110865829B (zh) * 2018-08-28 2024-04-16 京东科技控股股份有限公司 数据库升级方法、系统、设备及存储介质
CN109542631A (zh) * 2018-11-22 2019-03-29 上海达梦数据库有限公司 一种备机的重演方法、装置、服务器及存储介质
CN111221840A (zh) * 2018-11-23 2020-06-02 阿里巴巴集团控股有限公司 数据处理方法及装置、数据缓存方法、存储介质、系统
CN111221840B (zh) * 2018-11-23 2023-05-30 阿里云计算有限公司 数据处理方法及装置、数据缓存方法、存储介质、系统
CN109992695A (zh) * 2019-04-10 2019-07-09 北京奇艺世纪科技有限公司 一种视频信息查询方法及装置
CN109992695B (zh) * 2019-04-10 2021-08-27 北京奇艺世纪科技有限公司 一种视频信息查询方法及装置
CN110727698A (zh) * 2019-09-09 2020-01-24 上海陆家嘴国际金融资产交易市场股份有限公司 数据库访问方法、装置、计算机设备和存储介质
CN112951437A (zh) * 2019-12-11 2021-06-11 北京懿医云科技有限公司 医疗数据管理方法、装置、存储介质与电子设备
CN112951437B (zh) * 2019-12-11 2023-08-08 北京懿医云科技有限公司 医疗数据管理方法、装置、存储介质与电子设备
CN113760960A (zh) * 2020-06-01 2021-12-07 北京搜狗科技发展有限公司 一种信息生成方法、装置和用于生成信息的装置

Also Published As

Publication number Publication date
CN102402596B (zh) 2016-01-20

Similar Documents

Publication Publication Date Title
CN102402596A (zh) 一种主从分离数据库的读写方法和系统
US11288267B2 (en) Pluggable storage system for distributed file systems
US10776217B2 (en) Manifest-based snapshots in distributed computing environments
JP6553822B2 (ja) 分散システムにおける範囲の分割および移動
CN102640151B (zh) 用于传输日志记录的方法和系统
KR100926880B1 (ko) Dbms에서의 데이터 복제 방법 및 시스템
US7698319B2 (en) Database system management method, database system, database device, and backup program
US9378216B2 (en) Filesystem replication using a minimal filesystem metadata changelog
CN102023979B (zh) 元数据管理方法及系统
CN102609488B (zh) 客户端及其数据查询方法、服务端和数据查询系统
CN101375241A (zh) 集群文件系统中的有效数据管理
CN102272751B (zh) 在数据库环境通过背景同步的数据完整性
CN103038742B (zh) 用于在分布式存储系统内动态复制数据的方法和系统
JP6361223B2 (ja) トランザクションシステム
JP4575762B2 (ja) データ処理方法および装置並びにストレージ装置およびその処理プログラム
CN1523523B (zh) 分布复制命令的系统和方法
US9405828B2 (en) System and method for phonetic searching of data
WO2007099636A1 (ja) ファイルシステム移行方法、ファイルシステム移行プログラム及びファイルシステム移行装置
JP2009266147A (ja) データベースと仮想テーブルの整合性を維持する方法および装置。
CN102708166A (zh) 数据复制方法、数据恢复方法及装置
CN110109866A (zh) 一种文件系统目录的管理方法及设备
CN102792281A (zh) 存储设备
CN201522706U (zh) 元数据管理系统
CN105653566B (zh) 一种实现数据库写访问的方法及装置
CN109359100A (zh) Pb级历史数据和在线数据的实时计算的可视化建模方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant