专利名称:一种主从分离数据库的读写方法和系统的制作方法
技术领域:
本申请涉及数据库领域,特别是涉及一种主从分离数据库的读写方法和系统。
背景技术:
在大型企业应用中,由于大数据量和大并发访问,数据库很容易成为性能瓶颈。解决这个问题的方法之一是主从读写分离,即采用两个或多个数据库,其中一个为主数据库, 主数据库可以读写,其它为从数据库库,从数据库只读,通过数据库管理系统提供的同步机制与主数据库同步数据。这种方式可以将只读操作转到从数据库,从而减轻主数据库的压力。但是主数据库到从数据库的同步不能做到完全实时,即主数据库到从数据库的同步存在一定的时间延迟,如果对主数据库完成写操作后,立即从从数据库读数据,由于存在时延,可能会读不到刚修改的数据。比如对于修改用户资料的请求这个请求包含两个数据库操作,首先更新数据库用户资料,然后查询用户资料并显示。用户提交修改用户资料的请求,由于该请求中包含写操作,该写操作切换到主数据库执行;修改完成之后该请求会立即查询用户资料并显示,但是查询操作会切换到从数据库执行,由于主从同步的延迟,主数据库的修改还没同步到从数据库,到从数据库查询取到的是修改之前的数据,从用户的角度看,就是更新没有成功, 但实际上主数据库已经更新成功,只是还没同步到从数据库。现有技术一般是通过缓存技术来解决上述主从数据库的时延问题,比如Memcache 等缓存技术;其中,Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash (哈希)表,它能够用来存储各种格式的数据,包括图像、视频、 文件以及数据库检索的结果等。在现有的缓存技术中,当一个用户请求对应的业务操作中的写操作执行后,会在内存中缓存被更新的对象,之后的查询先从内存中读取,并不会立即从从数据库读数据,从而避免了主从同步的时延问题。但是使用缓存技术需要考虑缓存副本数据与数据库中数据的一致性,还需要考虑缓存失效及缓存对象替换机制,而且缓存相对于数据库中海量的数据来说,其容量有限;另外,如果采用分布式缓存技术还要考虑缓存之间的同步问题。因此, 缓存技术这种解决方案设计复杂,实施成本较高,尤其针对遗留系统的改造,一般需要改动已有程序,上述解决方案设计更为复杂,实施成本更高。因此,目前需要本领域技术人员迫切解决的一个技术问题就是如何简单可靠的解决主从数据库系统中读写分离时,当用户请求中包括先进行写操作后进行读操作而产生的主从同步的时延问题。
发明内容
本申请所要解决的技术问题是提供一种主从分离数据库的读写方法和系统,将对应用户请求的业务操作内进行更新的表进行记录,并将该业务操作内后续所有对该表的操作都切换到主数据库执行,简单可靠的避免了从从数据库读数据的同步时延问题。
为了解决上述问题,本申请公开了一种主从分离数据库的读写方法,包括根据用户请求确认对应该请求的业务操作;对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句需要操作的表判断是否对该表需要进行修改操作,如果是,则对所述表名进行记录;如果否,则不记录所述表名;以及,判断记录的表名中是否包含当前SQL语句需要操作的表的表名,如果包含, 则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。优选的,通过以下步骤分析处理每一条SQL语句需要操作的表步骤Al,通过SQL分析器提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将所述表名插入更新记录器;步骤A2,通过数据源切换器提取当前SQL语句需要操作的表的表名,查询所述更新记录器中是否包含所述表名,如果包含,则将当前SQL语句切换到主数据库执行,反之, 则将当前SQL语句切换到从数据库执行。优选的,通过以下步骤分析处理每一条SQL语句需要操作的表步骤Bi,通过SQL分析器提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将该表名插入更新记录器;步骤B2,通过SQL分析器查询所述更新记录器中是否包含所述表名,并将查询结果通知数据源切换器;步骤B3,通过数据源切换器接收查询结果,如果所述更新记录器中包含所述表名, 则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。优选的,针对所述SQL语句序列,从第一条SQL语句开始,逐条进行处理之前包含 清空更新记录器;和/或,在所有SQL语句序列执行完毕之后包含清空更新记录器。优选的,所述业务操作为用户请求在服务器端的处理过程。优选的,所述的修改操作包括插入,和/或删除,和/或更新。相应的,本申请还公开了一种主从分离数据库的读写系统,包括确认模块,用于根据用户请求确认对应该请求的业务操作;SQL语句处理模块,用于对所述业务操作中的SQL语句序列,逐条分析处理每一条 SQL语句需要操作的表的表名判断其是否对该表需要进行修改操作,如果是,则对所述表名进行记录;如果否, 则不记录所述表名;以及,判断表名的记录中是否包含当前SQL语句需要操作的表的表名,如果包含, 则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。优选的,所述SQL语句处理模块包括更新记录器,SQL分析器和数据源切换器;所述SQL分析器用于提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将所述表名插入更新记录器;所述用于数据源切换器提取当前 SQL语句需要操作的表的表名,查询所述更新记录器中是否包含所述表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行;所述更新记录器用于存储进行了修改操作的表名。
5
优选的,所述SQL语句处理模块包括更新记录器,SQL分析器和数据源切换器;所述SQL分析器用于提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将该表名插入更新记录器;查询所述更新记录器中是否包含所述表名;所述数据源切换器用于,当所述更新记录器中包含所述表名,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。本申请还公开了另外一种主从分离数据库的读写方法,包括根据用户请求确认对应该请求的业务操作;对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句如果该SQL语句涉及修改操作,则将其需要操作的表名进行记录,并将当前SQL语句切换到主数据库执行;如果该SQL语句涉及查询操作,则进一步判断表名记录中是否包括当前SQL语句需要操作的表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。优选的,所述的修改操作包括插入,和/或删除,和/或更新。优选的,所述的查询操作包括选择、和/或查找、和/或排序、和/或总数、和/或求和、和/或平均、和/或最大、和/或最小。与现有技术相比,本申请包含以下优点本申请通过在应用层对用户请求对应的业务操作中的SQLGtructured Query 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页面)接收到用户的请求,出口为业务逻辑处理完毕发送HTTP Response (HTTP响应头)给客户端。在实际中,业务操作的开始和结束可以根据实际情况进行定义。步骤120,对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句需要操作的表步骤121,判断是否对该表需要进行修改操作,如果是,则转入步骤121a,如果否, 则转入步骤121b ;步骤121a,对所述表名进行记录;步骤121b,不记录所述表名;步骤122,判断记录的表名中是否包含当前SQL语句需要操作的表的表名,如果包含,则转入步骤122a,反之,则转入步骤12 ;步骤122a,将当前SQL语句切换到主数据库执行;步骤122b,将当前SQL语句切换到从数据库执行。在实际中,上述业务操作也即用户请求在服务器端的处理过程中包含了若干条 SQL语句,这些SQL语句根据实际的处理过程存在一定的先后顺序,即上述业务操作包括了 SQL语句序列,而本申请利用上述的SQL语句序列进行分析处理。在分析处理所述SQL语句序列时,根据SQL语句序列的顺序,逐条分析处理每一条 SQL语句需要操作的表判断是否对该表需要进行修改操作,如果是,则对所述表名进行记录;如果否,则不记录所述表名;以及,判断记录的表名中是否包含当前SQL语句需要操作的表的表名,如果包含, 则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。优选的,参照图2通过以下步骤分析处理每一条SQL语句需要操作的表步骤Al,通过SQL分析器提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将所述表名插入更新记录器。例如,对于所述SQL语句序列中第一条SQL语句"UPDATE A SET A. a = 1, A. b = 2”,SQL分析器提取该SQL语句需要操作的表的表名A,并分析该SQL语句的需要进行的操作“UPDATE”是修改操作,则将表名A插入更新记录器,此时更新记录器结果为{A}。如果不是,则不进行任何操作,即不将该表插入更新记录器。其中,所述的修改操作包括插入,和/或删除,和/或更新等对表进行修改的操作, 比如"insert", "delete", "update"等操作命令。步骤A2,通过数据源切换器提取当前SQL语句需要操作的表的表名,查询所述更新记录器中是否包含所述表名,如果包含,则将当前SQL语句切换到主数据库执行,反之, 则将当前SQL语句切换到从数据库执行。当步骤Al将处理过的SQL语句传入数据源切换器时,数据源切换器提取当前SQL 语句需要操作的表名,并从所述的更新记录器中查询其记录中是否包含当前SQL语句所要操作的表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。比如前述SQL语句UPDATE A SET A. a = 1,A. b = 2”,数据源切换器提取其表名为A,查询更新记录器的记录结果{A}中包括表名A,则将当前SQL语句切换到主数据库执行。在步骤Al,当SQL语句序列中有多个表需要进行修改操作,则可将所有需要进行修改操作的表的表名插入更新记录器。比如当上述SQL语句序列中第二条SQL语句为 "UPDATE B SET B. m = 3,B. η = 4” SQL分析器提取该SQL语句需要操作的表的表名B,并分析该SQL语句的需要进行的操作“UPDATE”是修改操作,则将表名B插入更新记录器,此时更新记录器结果为{A,B}。另外,针对所述SQL语句序列,从第一条SQL语句开始,逐条进行处理之前包含清
空更新记录器。和/或,在所有SQL语句序列执行完毕之后包含清空更新记录器。在实际中,可以清空更新记录器为一个表名的空集合。下面以一个示例说明本申请的处理SQL语句序列的一个优选方案步骤一、根据用户请求确认对应该请求的业务操作。步骤二、清空更新记录器为表名的空集合{}。步骤三、对于该业务操作中包含的SQL语句序列U SELECWROM A ;2、SELECT*FR0M B ;3、UPDATE A SET A. a = 1,A. b = 2 ;4、UPDATE B SET B. m = 1,B. η = 2 ;5、SELECT*FR0M A ;6、SELECT*FR0M B ;7、SELECT*FR0M C。进行逐条分析处理首先对第1条SQL语句“SELECT*FR0M Α”进行分析处理通过步骤Al,SQL分析器提取“SELECT*FR0M Α”需要操作的表的表名为A,由于 “SELECT”不是修改操作,是查询操作,不插入更新记录器;通过步骤A2,数据源切换器提取“SELECT*FR0M Α”需要操作的表的表名A,查询到更新记录器中没有表名A的记录,切换“SELECT*FR0MA”到从数据库执行。
再对第2条SQL语句“ SELECT*FR0M B ”进行分析处理通过步骤Al,SQL分析器提取“SELECT*FR0M B”需要操作的表的表名为B,由于 “SELECT”不是修改操作,是查询操作,不插入更新记录器;通过步骤A2,数据源切换器提取“SELECT*FR0M B”需要操作的表的表名B,查询到更新记录器中没有表名B的记录,切换“SELECT*FR0MB”到从数据库执行。再对第3条SQL语句“UPDATE A SET A. a = 1,A. b = 2”进行分析处理通过步骤Al,SQL分析器提取“UPDATE A SET A. a = l,A.b = 2”需要操作的表的表名为A,由于“UPDATE”是修改操作,插入更新记录器,则更新记录器结果为{A};通过步骤A2,数据源切换器提取“UPDATE A SET A. a = 1,A. b = 2”需要操作的表的表名A,查询到更新记录器中有表名A的记录,切换“UPDATE A SET A. a = 1,A. b = 2” 到主数据库执行。再对第4条SQL语句“UPDATE B SET B. m = 1,B. η = 2”进行分析处理通过步骤Al,SQL分析器提取“UPDATE B SET B. m = Ι,Β.η = 2”需要操作的表的表名为B,由于“UPDATE”是修改操作,插入更新记录器,则更新记录器结果为{A,B};通过步骤A2,数据源切换器提取“UPDATE B SET B. m = 1,B. η = 2”需要操作的表的表名B,查询到更新记录器中有表名B的记录,切换“UPDATE B SET B. m = Ι,Β.η = 2" 到主数据库执行。再对第5条SQL语句“SELECT*FR0M Α”进行分析处理通过步骤Al,SQL分析器提取“SELECT*FR0M Α”需要操作的表的表名为A,由于 “SELECT”不是修改操作,是查询操作,不插入更新记录器;通过步骤A2,数据源切换器提取“SELECT*FR0M Α”需要操作的表的表名A,查询到更新记录器中有表名A的记录,切换“SELECT*FR0M Α”到主数据库执行。再对第6条SQL语句“ SELECT*FR0M B ”进行分析处理通过步骤Al,SQL分析器提取“SELECT*FR0M B”需要操作的表的表名为B,由于 “SELECT”不是修改操作,是查询操作,不插入更新记录器;通过步骤A2,数据源切换器提取“SELECT*FR0M B”需要操作的表的表名B,查询到更新记录器中有表名B的记录,切换“SELECT*FR0M B”到主数据库执行。再对第7条SQL语句“SELECT*FR0M C”进行分析处理通过步骤Al,SQL分析器提取“SELECT*FR0M C”需要操作的表的表名为C,由于 “SELECT”不是修改操作,是查询操作,不插入更新记录器;通过步骤A2,数据源切换器提取“SELECT*FR0M C”需要操作的表的表名C,查询到更新记录器中没有表名C的记录,切换“SELECT*FR0M C”到从数据库执行。由上可见,由于在第3条语句中对表A进行了修改操作,在第4条语句中对表B进行了修改操作,之后的第5条针对表A的查询操作和第6条针对表B的查询操作也被切换到主数据库执行,从而避免了主从不同步的问题。而第1条针对表A的操作,第2条针对表 B的操作和第7条针对表C的操作,由于没有修改操作,并且更新记录器中没有相应表名记录,则都会切换到从数据库执行。优选的,参照图3,本申请还可通过以下步骤分析处理每一条SQL语句需要操作的表步骤Bi,通过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语句需要操作的表名,如果包含,则转入步骤22加,反之,则转入步骤222b ;步骤22加,将当前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语句切换到从数据库执行。对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。以上对本申请所提供的一种主从分离数据库的读写方法和系统,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只
11是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
权利要求
1.一种主从分离数据库的读写方法,其特征在于,包括 根据用户请求确认对应该请求的业务操作;对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句需要操作的表 判断是否对该表需要进行修改操作,如果是,则对所述表名进行记录;如果否,则不记录所述表名;以及,判断记录的表名中是否包含当前SQL语句需要操作的表的表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
2.根据权利要求1所述的方法,其特征在于,通过以下步骤分析处理每一条SQL语句需要操作的表步骤Al,通过SQL分析器提取当前SQL语句需要操作的表的表名,分析是否对该表需要进行修改操作,如果是,则将所述表名插入更新记录器;步骤A2,通过数据源切换器提取当前SQL语句需要操作的表的表名,查询所述更新记录器中是否包含所述表名,如果包含,则将当前SQL语句切换到主数据库执行,反之,则将当前SQL语句切换到从数据库执行。
3.根据权利要求1所述的方法,其特征在于,通过以下步骤分析处理每一条SQL语句需要操作的表步骤Bi,通过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所述的方法,其特征在于所述的查询操作包括选择、和/或查找、和/或排序、和/或总数、和/或求和、和/或平均、和/或最大、和/或最小。
全文摘要
本申请提供了一种主从分离数据库的读写方法,涉及数据库领域。所述的方法包括根据用户请求确认对应该请求的业务操作;对所述业务操作中的SQL语句序列,逐条分析处理每一条SQL语句需要操作的表判断是否对该表需要进行修改操作,如果是,则对所述表名进行记录;判断记录的表名中是否包含当前SQL语句需要操作的表的表名,如果包含,则将当前SQL语句切换到主数据库执行。本申请通过将用户请求对应的业务操作中的SQL语句序列中进行了修改操作的表的记录,可将该业务操作的后续所有对该表的操作都切换进入主数据库执行,不用过多的复杂的设计,在很低的成本下即可简单可靠的避免主从数据库同步的时延问题。
文档编号G06F17/30GK102402596SQ20111035012
公开日2012年4月4日 申请日期2011年11月7日 优先权日2011年11月7日
发明者张顺, 李剑, 王磊 申请人:北京搜狗科技发展有限公司