CN106874281A - 实现数据库读写分离的方法和装置 - Google Patents
实现数据库读写分离的方法和装置 Download PDFInfo
- Publication number
- CN106874281A CN106874281A CN201510919385.6A CN201510919385A CN106874281A CN 106874281 A CN106874281 A CN 106874281A CN 201510919385 A CN201510919385 A CN 201510919385A CN 106874281 A CN106874281 A CN 106874281A
- Authority
- CN
- China
- Prior art keywords
- access requests
- read
- storehouse
- sql access
- sql
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/217—Database tuning
Abstract
本发明公开了一种实现数据库读写分离的方法和装置,属于数据处理技术领域。数据库包括主库和从库,从库是对主库的备份,该方法包括:接收应用服务器发送的结构化查询语言SQL访问请求;根据该SQL访问请求,获取该SQL访问请求对应的操作类型和该SQL访问请求的请求标识;如果该操作类型为写操作类型,则将该SQL访问请求对应的待写入数据写入主库中;如果该操作类型为读操作类型,根据该请求标识和读写分离表确定是否需要读写分离,如果需要读写分离,从从库中读取该SQL访问请求对应的数据,读写分离表包括需要进行读写分离的SQL访问请求的请求标识。装置包括:接收模块,第一获取模块,写入模块和读取模块。本发明可以减少应用程序的开发难度。
Description
技术领域
本发明涉及数据处理技术领域,特别涉及一种实现数据库读写分离的方法和装置。
背景技术
在互联网数据库解决方案中,MySQL(关系型数据库)是一种比较常用的数据库,MySQL在数据访问并发量较高的情况下,一般会采用读写分离的技术实现数据的读操作和写操作,读写分离是指在数据库中设置一个主库和至少一个从库,主库中的数据实时同步到从库中,主库担任写操作,从库担任读操作。
其中,主库对应的连接串,用于唯一标识主库,每个从库对应的连接串,用于唯一标识从库。当某个应用程序想要实现数据库读写分离时,该应用程序的开发人员先将主库的连接串写入该应用程序包括的所有写操作的SQL(Structured Query Language,结构化查询语言)语句中,将从库的连接串写入该应用程序包括的所有读操作的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访问请求进行消息摘要算法第五版MD5类运算,得到所述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访问请求进行消息摘要算法第五版MD10类运算,得到所述SQL访问请求的请求标识。
优选的,所述读取模块,包括:
选择单元,用于从所述多个从库中选择从库;
读取单元,用于从所述选择的从库中读取所述SQL访问请求对应的数据。
优选的,所述选择单元,具体用于获取所述多个从库中的每个从库的同步时延信息,根据所述每个从库的同步时延信息,从所述多个从库中选择同步时延最小或者同步时延信息满足所述SQL访问请求对应的同步时延要求的从库;或者,
所述选择单元,具体用于从所述读写分离表中获取所述SQL访问请求对应的从库,所述读写分离表还包括需要进行读写分离的SQL访问请求对应的从库;或者,
所述选择单元,具体用于获取所述多个从库中的每个从库的负载信息,根据所述每个从库的负载信息,从所述多个从库中选择负载最小的从库。
在本发明实施例中,事先配置读写分离表,读写分离表包括需要进行读写分离的SQL访问请求的请求标识;接收应用服务器发送的SQL访问请求;根据该SQL访问请求,获取该SQL访问请求对应的操作类型和该SQL访问请求的请求标识;如果该操作类型为写操作类型,则将该SQL访问请求对应的待写入数据写入主库中;如果该操作类型为读操作类型,根据该请求标识和读写分离表确定是否需要读写分离,如果需要读写分离,从从库中读取该SQL访问请求对应的数据,读写分离表。因此,本发明实施例通过配置读写分离表,实现数据库的读写分离,从而应用程序的开发人员不需要将主库的连接串以及从库的连接串写入应用程序中,减少了应用程序的开发难度。
附图说明
图1-1是本发明实施例提供的一种实现数据库读写分离的应用场景图;
图1-2是本发明实施例提供的一种实现数据库读写分离的方法流程图;
图2是本发明实施例提供的一种实现数据库读写分离的方法流程图;
图3-1是本发明实施例提供的一种实现数据库读写分离的装置结构示意图;
图3-2是本发明实施例提供的另一种实现数据库读写分离的装置结构示意图;
图3-3是本发明实施例提供的另一种实现数据库读写分离的装置结构示意图;
图3-4是本发明实施例提供的一种第一获取模块的装置结构示意图;
图3-5是本发明实施例提供的一种读取模块的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
参见图1-1,本发明实施例提供了一种实现数据库读写分离的应用场景图,包括应用服务器、代理服务器、数据库的主库(Master)和从库(Slave1和Slave2)。代理服务器包括代理数据库服务器(DBproxy)和管理服务器。
管理服务器用于配置读写分离表,读写分离表包括需要进行读写分离的SQL访问请求的请求标识,并将读写分离表同步到代理数据库服务器中。
管理服务器还用于在读写分离表中添加或删除用户选择的SQL访问请求。
管理服务器还用于接收运维人员在读写信息记录表中选择的需要进行读写分离的SQL访问请求的请求标识,将运维人员选择的需要进行读写分离的SQL访问请求的请求标识添加到读写分离表中;或者,
管理服务器还用于接收运维人员在读写分离表中选择的SQL访问请求,将运维人员选择的需要进行读写分离的SQL访问请求的请求标识,从读写分离表中删除。
管理服务器还用于根据读写信息记录表,在读写分离表中添加或删除SQL访问请求的请求标识,读写信息记录表用于存储所用服务器历史发送的SQL访问请求的读写信息。
应用服务器,用于在运行应用程序的SQL语句时,向代理数据库服务器发送SQL访问请求。
代理数据库服务器,用于接收应用服务器发送的该SQL访问请求;根据该SQL访问请求,获取该SQL访问请求对应的操作类型和该SQL访问请求的请求标识。
代理数据库服务器,还用于如果该操作类型为写操作类型,则将该SQL访问请求对应的待写入数据写入主库中。
代理数据库服务器,还用于如果该操作类型为读操作类型,则根据该请求标识和读写分离表确定是否需要读写分离。
代理数据库服务器,还用于如果需要读写分离,从从库中读取该SQL访问请求对应的数据;如果不需要读写分离,从主库中读取该SQL访问请求对应的数据。
本发明实施例提供了一种实现数据库读写分离的方法,数据库包括主库和从库,从库是对主库的备份,从库担任读能力的扩展。该方法的执行主体可以为数据库服务器或者代理服务器。参见图1-2,其中,该方法包括:
在步骤S101中,接收应用服务器发送的SQL访问请求。
在步骤S102中,根据该SQL访问请求,获取该SQL访问请求对应的操作类型和该SQL访问请求的请求标识。
操作类型包括读操作类型和写操作类型;请求标识可以为唯一码。
在步骤S103中,如果该操作类型为写操作类型,则将该SQL访问请求对应的待写入数据写入主库中。
在步骤S104中,如果该操作类型为读操作类型,根据该请求标识和读写分离表确定是否需要读写分离,如果需要读写分离,从从库中读取该SQL访问请求对应的数据,读写分离表包括需要进行读写分离的SQL访问请求的请求标识。
在本发明实施例中,事先配置读写分离表,读写分离表包括需要进行读写分离的SQL访问请求的请求标识;接收应用服务器发送的SQL访问请求;根据该SQL访问请求,获取该SQL访问请求对应的操作类型和该SQL访问请求的请求标识;如果该操作类型为写操作类型,则将该SQL访问请求对应的待写入数据写入主库中;如果该操作类型为读操作类型,根据该请求标识和读写分离表确定是否需要读写分离,如果需要读写分离,从从库中读取该SQL访问请求对应的数据,读写分离表。因此,本发明实施例通过配置读写分离表,实现数据库的读写分离,从而应用程序的开发人员不需要将主库的连接串以及从库的连接串写入应用程序中,减少了应用程序的开发难度。
本发明实施例提供了一种实现数据库读写分离的方法,数据库包括主库和从库,从库是对主库的备份,从库担任读能力的扩展。该方法的执行主体可以为数据库服务器或者代理服务器。在本发明实施例中,以该方法的执行主体为代理服务器为例进行说明。
其中,代理服务器包括代理数据库服务器和管理服务器。参见图2,该方法包括:
步骤201:接收应用服务器发送的SQL访问请求。
当应用服务器运行应用程序时,向代理数据库服务器发送SQL访问请求;该SQL访问请求不包括数据库的连接串;代理数据库服务器接收应用服务器发送的该SQL访问请求,执行步骤202。
例如,该SQL访问请求为select*from user where user_id=ahb;或者,该SQL访问请求为insert into user(user_id,user_name,user_address)values(abc,efg,1112)。
步骤202:根据该SQL访问请求,获取该SQL访问请求对应的操作类型和该SQL访问请求的请求标识。
操作类型包括读操作类型和写操作类型;请求标识可以为唯一码。本步骤可以通过以下步骤(1)至(3)实现,包括:
(1):解析该SQL访问请求,从该SQL访问请求中获取该SQL访问请求对应的操作类型。
代理数据库服务器中存储读操作类型的SQL模板和写操作类型的SQL模板;本步骤可以为:
解析该SQL访问请求,如果该SQL访问请求是与读操作类型的SQL模板相匹配的SQL语句,确定该SQL访问请求对应的操作类型为读操作类型;如果该SQL访问请求是与写操作类型的SQL模板相匹配的SQL语句,确定该SQL访问请求对应的操作类型为写操作类型。
其中,读操作类型的SQL模板可以为select*from user where user_id=xxxx,读操作类型可以表示为R;写操作类型的SQL模板可以为insert into user(user_id,user_name,user_address)values(xxxx,xxxx,xxxx),写操作类型可以表示为W。
例如,解析该SQL访问请求:select*from user where user_id=ahb,确定该SQL访问请求为与读操作类型的SQL模板(select*from user where user_id=xxxx)相匹配的SQL语句,确定该SQL访问请求对应的操作类型为读操作类型。
再如,解析该SQL访问请求:insert into user(user_id,user_name,user_address)values(abc,efg,1112),确定该SQL访问请求为与写操作类型的SQL模板(insertinto user(user_id,user_name,user_address)values(xxxx,xxxx,xxxx))相匹配的SQL语句,确定该SQL访问请求对应的操作类型为写操作类型。
(2):对该SQL访问请求进行归一化处理,得到处理后的SQL访问请求。
获取预设标准格式,将该SQL访问请求转换为预设标准格式,以实现将该SQL访问请求进行归一化处理,得到处理后的SQL访问请求。
预设标准格式包括字符为小写字符且标识为预设标识。例如,预设标识可以xxxx等。
例如,将该SQL访问请求:select*from user where user_id=ahb进行归一化处理,得到处理后的SQL访问请求为select*from user where user_id=xxxx。
再如,将该SQL访问请求:insert into user(user_id,user_name,user_address)values(abc,efg,1112)进行归一化处理,得到处理后的SQL访问请求为:insert intouser(user_id,user_name,user_address)values(xxxx,xxxx,xxxx)。
(3):对处理后的SQL访问请求进行MD5(Message Digest Algorithm,消息摘要算法第五版)类运算,得到该SQL访问请求的请求标识。
计算处理后的SQL访问请求的MD5值,将该MD5值作为该SQL访问请求的请求标识。
例如,计算处理后的SQL访问请求:select*from user where user_id=xxxx的MD5值,得到该SQL访问请求select*from user where user_id=ahb的请求标识为c84faf6b47003b5c3124f560366352ba。
再如,计算处理后的SQL访问请求:insert into user(user_id,user_name,user_address)values(xxxx,xxxx,xxxx)的MD5值,得到该SQL访问请求insert intouser(user_id,user_name,user_address)values(abc,efg,1112)的请求标识为39de17bed8103fdd05ba98a82323a1e9。
步骤203:如果该操作类型为写操作类型,则将该SQL访问请求对应的待写入数据写入主库中,执行步骤207。
由于主库担任写操作,则如果该操作类型为写操作类型,只能向主库中写数据。
步骤204:如果该操作类型为读操作类型,根据该请求标识和读写分离表确定是否需要读写分离。
由于主库和从库都能担任读操作,则如果该操作类型为读操作类型,则需要确定是否需要读写分离,读写分离是指向主库中写数据,从从库中读数据。
在本步骤之前,管理服务器通过配置,将需要进行读写分离的SQL访问请求的请求标识添加到读写分离表中,也即读写分离表包括需要进行读写分离的SQL访问请求的请求标识。将读写分离表分离表同步到代理数据库服务器。
相应的,本步骤可以为:
如果该操作类型为读操作类型,代理数据库服务器确定读写分离表是否包括该请求标识;如果读写分离表中包括该请求标识;确定该SQL访问请求需要读写分离,执行步骤205;如果读写分离表中不包括该请求标识,确定该SQL访问请求不需要读写分离,执行步骤206。
例如,读写分离表如下表1所示:
表1
管理服务器可以根据SQL访问请求的读写信息自动配置读写分离表,也可以由运维人员手动进行配置。管理服务器配置读写分离表的过程在步骤209中详细说明。
步骤205:如果需要读写分离,从从库中读取该SQL访问请求对应的数据,执行步骤207。
如果数据库包括多个从库,也即一个主库对应多个从库,则从从库中读取该SQL访问请求对应的数据的步骤可以为:
从多个从库中选择一个从库,从选择的从库中读取该SQL访问请求对应的数据。
从多个从库中选择一个从库的步骤可以通过以下第一种方式至第四种方式实现,对于第一种实现方式,从多个从库中选择一个从库的步骤可以为:
获取多个从库中的每个从库的同步时延信息,根据每个从库的同步延时信息,从多个从库中选择同步延时最小的从库。
对于第二种实现方式,读取分离表中还包括每个需要进行读写分离的SQL访问请求的请求标识对应的同步时延要求,相应的,从多个从库中选择一个从库的步骤可以为:
根据该请求标识,从读写分离表中获取该请求标识对应的同步时延要求;根据每个从库同步数据的同步时延信息,从多个从库中选择一个同步时延信息满足该同步时延要求的从库。
如果存在多个满足该同步时延要求的从库,从多个满足该同步时延要求的从库中随机选择一个从库,或者,从多个满足该同步时延要求的从库中选择一个同步时延最小的从库,或者,从多个满足该同步时延要求的从库中选择负载信息最小的从库。
例如,存储读请求标识对应的同步时延要求的读写分离表如下表2所示:
表2
对于第三种实现方式,读写分离表中还存储每个需要进行读写分离的SQL访问请求的请求标识对应的从库的数据库标识,相应的,从多个从库中选择一个从库的步骤可以为:
根据该请求标识,从读写分离表中获取该SQL访问请求对应的从库的数据库标识。
对于第四种实现方式,可以根据每个从库的负载信息进行选择,相应的,从多个从库中选择一个从库的步骤可以为:
获取每个从库的负载信息,根据每个从库的负载信息从多个从库中选择负载最小的从库。
优选的,从从库中读取该SQL访问请求对应的数据之后,向应用服务器发送读取的数据;应用服务器接收代理数据库服务器发送的该数据,根据该数据向代理数据库服务器发送反馈信息;代理数据库服务器接收应用服务器发送的反馈信息,根据该反馈信息获取该SQL访问请求的处理结果,将该SQL访问请求的处理结果同步到管理服务器。
优选的,应用服务器根据该数据向代理数据库服务器发送反馈信息的步骤可以为:
如果该数据为目标数据,该反馈信息可以为成功指示消息,也即应用服务器向代理数据库服务器发送成功指示消息;如果该数据不是目标数据,该反馈信息可以为失败指示消息,也即应用服务器向代理数据库服务器发送失败指示消息。
代理数据库服务器接收应用服务器发送的反馈信息,根据该反馈信息获取该SQL访问请求的处理结果的步骤可以为:
代理数据库服务器接收应用服务器发送的反馈信息,如果该反馈信息为成功指示消息,确定处理该SQL访问请求的处理结果为处理成功;如果该反馈信息为失败指示消息,确定处理该SQL访问请求的处理结果为处理失败。
步骤206:如果不需要读写分离,从主库中读取该SQL访问请求对应的数据。
步骤207:获取该SQL访问请求的读写信息。
读写信息可以包括当前访问次数、处理时间以及处理结果等。
管理服务器获取该SQL访问请求的当前访问次数的步骤可以为:
管理服务器中存储有历史处理每个SQL访问请求的请求标识和历史访问次数的对应关系,根据该SQL访问请求的请求标识,从请求标识和历史访问次数的对应关系中获取该SQL访问请求的历史访问次数,将历史访问次数加一得到该SQL访问请求的当前访问次数。
管理服务器获取该SQL访问请求的处理时间的步骤可以为:
管理服务器获取接收该SQL访问请求的接收时间,以及向应用服务器发送该数据的发送时间,计算发送时间和接收时间的时间差,将该时间差作为该SQL访问请求的处理时间。
管理服务器获取该SQL访问请求的处理结果的步骤可以为:
管理服务器接收代理数据库服务器同步的该SQL访问请求的处理结果。
步骤208:根据该读写信息,更新读写信息记录表中的该SQL访问请求对应的读写信息。
读写信息记录表用于存储应用服务器历史发送的SQL访问请求的读写信息。本步骤可以通过以下步骤(1)至(3)实现,包括:
(1):确定读写信息记录表中是包括该SQL请求访问的读写信息;如果包括,执行步骤(2),如果不包括,执行步骤(3)。
读写信息记录表中存储SQL访问请求的请求标识和读写信息的对应关系;本步骤可以为:
管理服务器确定读写信息记录表中是否包括该SQL访问请求的请求标识;如果包括,确定读写信息记录表中包括该SQL访问请求的读写信息;如果不包括,确定读写信息记录表中不包括该SQL访问请求的读写信息。
(2):如果包括,根据该读写信息,更新读写信息记录表中的该SQL访问请求对应的读写信息。
管理服务器根据该请求标识,从读写信息记录表中获取该请求标识对应的已存储的读写信息,根据该读写信息和已存储的读写信息,更新读写信息记录表中的该SQL访问请求对应的读写信息。
读写信息可以包括当前访问次数、处理时间以及处理结果等。处理时间包括最大处理时间、最小处理时间和平均处理时间,处理结果可以为失败次数等。
则根据该读写信息和已存储的读写信息,更新读写信息记录表中的该SQL访问请求对应的读写信息的步骤可以为:
第一:将读写信息记录表中的该SQL访问请求的访问次数修改为该SQL访问请求的当前访问次数。
第二:如果该处理时间大于读写信息记录表中该SQL访问请求的最大处理时间,将读写信息记录表中的该SQL访问请求的最大处理时间修改为该处理时间;如果该处理时间小于读写信息记录表中该SQL访问请求的最小处理时间,将读写信息记录表中的该SQL访问请求的最小处理时间修改为该处理时间。如果该处理时间介于读写信息记录表中该SQL访问请求的最大处理时间和最小处理时间之间,则对读写信息记录表中该SQL访问请求的最大处理时间和最小处理时间不作处理。
第三:根据该处理时间和读写信息记录表中的该SQL访问请求的平均处理时间,计算更新后的平均处理时间,将读写信息记录表中的该SQL访问请求的平均处理时间修改为该更新后的平均处理时间。
第四:如果该处理结果为处理失败,将读写信息记录表中的该SQL访问请求的失败次数加一;如果该处理结果为处理成功,则对读写信息记录表中的该SQL访问请求的失败次数不作处理。
(3):如果不包括,将该读写信息存储到读写信息记录表中。
将该请求标识和读写信息的对应关系存储到读写信息记录表中。
优选的,读写信息记录表中还存储操作类型和SQL模板,则读写信息记录表如下表3所示:
表3
优选的,管理服务器显示读写信息记录表,从而运维人员可以根据读写信息记录表了解历史处理SQL访问请求的读写信息。
优选的,读写信息记录表还可以包括处理每个SQL访问请求的从库的数据库标识,从而开发人员或者运维人员可以根据读写信息记录表了解各从库的运行状态信息。
步骤209:根据更新后的读写信息记录表,向读写分离表中添加或删除SQL访问请求的请求标识。
具体地,管理服务器从更新后的读写信息记录表中选择操作类型为读操作类型且读写信息满足预设读写分离条件的SQL访问请求的请求标识,将选择的请求标识添加到读写分离表中;或者,根据更新后的读写信息记录表,从读写分离表中选择读写信息不满足预设读写分离条件的SQL访问请求的请求标识,将选择的请求标识,从读写分离表中删除。
预设读写分离条件可以为访问次数超过预设访问次数,最大处理时间超过第一预设时间,平均处理时间超过第二预设时间,失败次数超过预设失败次数中的一个或多个。
当然,读写分离表也可以由运维人员根据SQL访问请求的业务类型进行配置。则运维人员配置读写分离表的步骤可以为:
管理服务器接收运维人员从读写信息记录表中选择的需要进行读写分离的SQL访问请求的请求标识,将运维人员选择的需要进行读写分离的SQL访问请求的请求标识添加到读写分离表中。或者,
管理服务器接收运维人员在读写分离表中选择的SQL访问请求,将运维人员选择的需要进行读写分离的SQL访问请求的请求标识,从读写分离表中删除。
需要说明的是,管理服务器可以在代理数据库服务器每接收一个SQL访问请求,执行一次更新读写分离表的操作,也可以每隔预设时长,更新一次读写分离表。
预设访问次数,第一预设时间,第二预设时间,预设失败次数和预设时长都可以根据需要进行设置并更改,在本发明实施例中,对预设访问次数,第一预设时间,第二预设时间,预设失败次数和预设时长都不做具体限定。
在本发明实施例中,事先配置读写分离表,读写分离表包括需要进行读写分离的SQL访问请求的请求标识;接收应用服务器发送的SQL访问请求;根据该SQL访问请求,获取该SQL访问请求对应的操作类型和该SQL访问请求的请求标识;如果该操作类型为写操作类型,则将该SQL访问请求对应的待写入数据写入主库中;如果该操作类型为读操作类型,根据该请求标识和读写分离表确定是否需要读写分离,如果需要读写分离,从从库中读取该SQL访问请求对应的数据,读写分离表。因此,本发明实施例通过配置读写分离表,实现数据库的读写分离,从而应用程序的开发人员不需要将主库的连接串以及从库的连接串写入应用程序中,减少了应用程序的开发难度。
本发明实施例提供了一种实现数据库读写分离的装置,数据库包括主库和从库,从库是对主库的备份,从库担任读能力的扩展,参见图3-1,该装置包括:
接收模块301,用于接收应用服务器发送的结构化查询语言SQL访问请求;
第一获取模块302,用于根据该SQL访问请求,获取该SQL访问请求对应的操作类型和SQL访问请求的请求标识;
写入模块303,用于如果该操作类型为写操作类型,则将该SQL访问请求对应的待写入数据写入主库中;
读取模块304,用于如果该操作类型为读操作类型,根据该请求标识和读写分离表确定是否需要读写分离,如果需要读写分离,从从库中读取该SQL访问请求对应的数据,读写分离表包括需要进行读写分离的SQL访问请求的请求标识。
优选的,参见图3-2,该装置还包括:
第一更新模块305,用于根据读写信息记录表,在读写分离表中添加或删除SQL访问请求的请求标识,读写信息记录表用于存储应用服务器历史发送的SQL访问请求的读写信息;或者,
在读写分离表中添加或删除用户选择的SQL访问请求。
优选的,第一更新模块305,具体用于从读写信息记录表中选择操作类型为读操作类型且读写信息满足预设读写分离条件的SQL访问请求的请求标识,将选择的请求标识添加到读写分离表中;或者,
第一更新模块305,具体用于根据读写信息记录表,从读写分离表中选择读写信息不满足预设读写分离条件的SQL访问请求的请求标识,将选择的请求标识,从读写分离表中删除。
优选的,参见图3-3,该装置还包括:
第二获取模块306,用于获取SQL访问请求的读写信息;
第二更新模块307,用于根据该读写信息,更新读写信息记录表中的该SQL访问请求对应的读写信息。
优选的,参见图3-4,第一获取模块302,包括:
解析单元3021,用于解析该SQL访问请求,从该SQL访问请求中获取该SQL访问请求对应的操作类型;
处理单元3022,用于对该SQL访问请求进行归一化处理,得到处理后的SQL访问请求;
计算单元3023,用于对处理后的SQL访问请求进行消息摘要算法第五版MD10类运算,得到该SQL访问请求的请求标识。
优选的,参见图3-5,读取模块304,包括:
选择单元3041,用于从多个从库中选择从库;
读取单元3042,用于从选择的从库中读取SQL访问请求对应的数据。
优选的,选择单元3041,具体用于获取多个从库中的每个从库的同步时延信息,根据每个从库的同步时延信息,从多个从库中选择同步时延最小或者同步时延信息满足SQL访问请求对应的同步时延要求的从库;或者,
选择单元3041,具体用于从读写分离表中获取SQL访问请求对应的从库,读写分离表还包括需要进行读写分离的SQL访问请求对应的从库;或者,
选择单元3041,具体用于获取多个从库中的每个从库的负载信息,根据每个从库的负载信息,从多个从库中选择负载最小的从库。
在本发明实施例中,事先配置读写分离表,读写分离表包括需要进行读写分离的SQL访问请求的请求标识;接收应用服务器发送的SQL访问请求;根据该SQL访问请求,获取该SQL访问请求对应的操作类型和该SQL访问请求的请求标识;如果该操作类型为写操作类型,则将该SQL访问请求对应的待写入数据写入主库中;如果该操作类型为读操作类型,根据该请求标识和读写分离表确定是否需要读写分离,如果需要读写分离,从从库中读取该SQL访问请求对应的数据,读写分离表。因此,本发明实施例通过配置读写分离表,实现数据库的读写分离,从而应用程序的开发人员不需要将主库的连接串以及从库的连接串写入应用程序中,减少了应用程序的开发难度。
需要说明的是:上述实施例提供的实现数据库读写分离的装置在实现数据库读写分离时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的实现数据库读写分离的装置与实现数据库读写分离的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种实现数据库读写分离的方法,其特征在于,所述数据库包括主库和从库,所述从库是对所述主库的备份,所述方法包括:
接收应用服务器发送的结构化查询语言SQL访问请求;
根据所述SQL访问请求,获取所述SQL访问请求对应的操作类型和所述SQL访问请求的请求标识;
如果所述操作类型为写操作类型,则将所述SQL访问请求对应的待写入数据写入所述主库中;
如果所述操作类型为读操作类型,根据所述请求标识和读写分离表确定是否需要读写分离,如果需要读写分离,从所述从库中读取所述SQL访问请求对应的数据,所述读写分离表包括需要进行读写分离的SQL访问请求的请求标识。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据读写信息记录表,在所述读写分离表中添加或删除SQL访问请求的请求标识,所述读写信息记录表用于存储所述应用服务器历史发送的SQL访问请求的读写信息;或者,
在所述读写分离表中添加或删除用户选择的SQL访问请求。
3.根据权利要求2所述的方法,其特征在于,所述根据读写信息记录表,在所述读写分离表中添加或删除SQL访问请求的请求标识或删除所述读写分离表包括的部分SQL访问请求的请求标识,包括:
从读写信息记录表中选择操作类型为读操作类型且读写信息满足预设读写分离条件的SQL访问请求的请求标识,将所述选择的请求标识添加到所述读写分离表中;或者,
根据读写信息记录表,从所述读写分离表中选择读写信息不满足预设读写分离条件的SQL访问请求的请求标识,将所述选择的请求标识,从所述读写分离表中删除。
4.根据所述权利要求2所述的方法,其特征在于,所述方法还包括:
获取所述SQL访问请求的读写信息;
根据所述读写信息,更新所述读写信息记录表中的所述SQL访问请求对应的读写信息。
5.根据权利要求1所述的方法,其特征在于,所述根据所述SQL访问请求,获取所述SQL访问请求对应的操作类型和所述SQL访问请求的请求标识,包括:
解析所述SQL访问请求,从所述SQL访问请求中获取所述SQL访问请求对应的操作类型;
对所述SQL访问请求进行归一化处理,得到处理后的SQL访问请求;
对所述处理后的SQL访问请求进行消息摘要算法第五版MD5类运算,得到所述SQL访问请求的请求标识。
6.根据权利要求1所述的方法,其特征在于,如果所述数据库包括多个从库,所述从所述从库中读取所述SQL访问请求对应的数据,包括:
从所述多个从库中选择从库,从所述选择的从库中读取所述SQL访问请求对应的数据。
7.根据权利要求6所述的方法,其特征在于,所述从所述多个从库中选择从库,包括:
获取所述多个从库中的每个从库的同步时延信息,根据所述每个从库的同步时延信息,从所述多个从库中选择同步时延最小或者同步时延信息满足所述SQL访问请求对应的同步时延要求的从库;或者,
从所述读写分离表中获取所述SQL访问请求对应的从库,所述读写分离表还包括需要进行读写分离的SQL访问请求对应的从库;或者,
获取所述多个从库中的每个从库的负载信息,根据所述每个从库的负载信息,从所述多个从库中选择负载最小的从库。
8.一种实现数据库读写分离的装置,其特征在于,所述数据库包括主库和从库,所述从库是对所述主库的备份,所述装置包括:
接收模块,用于接收应用服务器发送的结构化查询语言SQL访问请求;
第一获取模块,用于根据所述SQL访问请求,获取所述SQL访问请求对应的操作类型和所述SQL访问请求的请求标识;
写入模块,用于如果所述操作类型为写操作类型,则将所述SQL访问请求对应的待写入数据写入所述主库中;
读取模块,用于如果所述操作类型为读操作类型,根据所述请求标识和读写分离表确定是否需要读写分离,如果需要读写分离,从所述从库中读取所述SQL访问请求对应的数据,所述读写分离表包括需要进行读写分离的SQL访问请求的请求标识。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
第一更新模块,用于根据读写信息记录表,在所述读写分离表中添加或删除SQL访问请求的请求标识,所述读写信息记录表用于存储所述应用服务器历史发送的SQL访问请求的读写信息;或者,在所述读写分离表中添加或删除用户选择的SQL访问请求;
其中,所述第一更新模块,具体用于从读写信息记录表中选择操作类型为读操作类型且读写信息满足预设读写分离条件的SQL访问请求的请求标识,将所述选择的请求标识添加到所述读写分离表中;或者,
所述第一更新模块,具体用于根据读写信息记录表,从所述读写分离表中选择读写信息不满足预设读写分离条件的SQL访问请求的请求标识,将所述选择的请求标识,从所述读写分离表中删除;
其中,所述装置还包括:
第二获取模块,用于获取所述SQL访问请求的读写信息;
第二更新模块,用于根据所述读写信息,更新所述读写信息记录表中的所述SQL访问请求对应的读写信息。
10.根据权利要求8所述的装置,其特征在于,所述第一获取模块,包括:
解析单元,用于解析所述SQL访问请求,从所述SQL访问请求中获取所述SQL访问请求对应的操作类型;
处理单元,用于对所述SQL访问请求进行归一化处理,得到处理后的SQL访问请求;
计算单元,用于对所述处理后的SQL访问请求进行消息摘要算法第五版MD10类运算,得到所述SQL访问请求的请求标识;
其中,所述读取模块,包括:
选择单元,用于从所述多个从库中选择从库;
读取单元,用于从所述选择的从库中读取所述SQL访问请求对应的数据;
其中,所述选择单元,具体用于获取所述多个从库中的每个从库的同步时延信息,根据所述每个从库的同步时延信息,从所述多个从库中选择同步时延最小或者同步时延信息满足所述SQL访问请求对应的同步时延要求的从库;或者,
所述选择单元,具体用于从所述读写分离表中获取所述SQL访问请求对应的从库,所述读写分离表还包括需要进行读写分离的SQL访问请求对应的从库;或者,
所述选择单元,具体用于获取所述多个从库中的每个从库的负载信息,根据所述每个从库的负载信息,从所述多个从库中选择负载最小的从库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510919385.6A CN106874281B (zh) | 2015-12-11 | 2015-12-11 | 实现数据库读写分离的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510919385.6A CN106874281B (zh) | 2015-12-11 | 2015-12-11 | 实现数据库读写分离的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106874281A true CN106874281A (zh) | 2017-06-20 |
CN106874281B CN106874281B (zh) | 2020-02-07 |
Family
ID=59178183
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510919385.6A Active CN106874281B (zh) | 2015-12-11 | 2015-12-11 | 实现数据库读写分离的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106874281B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107291926A (zh) * | 2017-06-29 | 2017-10-24 | 搜易贷(北京)金融信息服务有限公司 | 一种binlog分析方法 |
CN107704603A (zh) * | 2017-10-16 | 2018-02-16 | 山东浪潮通软信息科技有限公司 | 一种实现读写分离的方法及装置 |
CN107766575A (zh) * | 2017-11-14 | 2018-03-06 | 中国联合网络通信集团有限公司 | 读写分离的数据库访问方法及装置 |
CN107832448A (zh) * | 2017-11-22 | 2018-03-23 | 泰康保险集团股份有限公司 | 数据库操作方法、装置及设备 |
CN109213827A (zh) * | 2017-07-03 | 2019-01-15 | 阿里巴巴集团控股有限公司 | 一种数据处理系统、方法、路由器及从数据库 |
CN110019496A (zh) * | 2017-07-27 | 2019-07-16 | 北京京东尚科信息技术有限公司 | 数据读写方法和系统 |
CN113094364A (zh) * | 2021-04-02 | 2021-07-09 | 上海中通吉网络技术有限公司 | 快递网点账单的读写方法、装置、设备及存储介质 |
WO2022041661A1 (zh) * | 2020-08-24 | 2022-03-03 | 中国银联股份有限公司 | 数据读写处理方法、数据中心、容灾系统及存储介质 |
CN114253770A (zh) * | 2021-12-17 | 2022-03-29 | 苏州浪潮智能科技有限公司 | 一种数据库的主从备份系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102033912A (zh) * | 2010-11-25 | 2011-04-27 | 北京北纬点易信息技术有限公司 | 一种分布式数据库访问方法及系统 |
CN102402596A (zh) * | 2011-11-07 | 2012-04-04 | 北京搜狗科技发展有限公司 | 一种主从分离数据库的读写方法和系统 |
CN102591964A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 数据读写分离机制的实现方法和装置 |
CN102622427A (zh) * | 2012-02-27 | 2012-08-01 | 杭州闪亮科技有限公司 | 读写分离数据库的方法及系统 |
CN104504145A (zh) * | 2015-01-05 | 2015-04-08 | 浪潮(北京)电子信息产业有限公司 | 一种实现数据库读写分离的方法和设备 |
-
2015
- 2015-12-11 CN CN201510919385.6A patent/CN106874281B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102033912A (zh) * | 2010-11-25 | 2011-04-27 | 北京北纬点易信息技术有限公司 | 一种分布式数据库访问方法及系统 |
CN102402596A (zh) * | 2011-11-07 | 2012-04-04 | 北京搜狗科技发展有限公司 | 一种主从分离数据库的读写方法和系统 |
CN102591964A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 数据读写分离机制的实现方法和装置 |
CN102622427A (zh) * | 2012-02-27 | 2012-08-01 | 杭州闪亮科技有限公司 | 读写分离数据库的方法及系统 |
CN104504145A (zh) * | 2015-01-05 | 2015-04-08 | 浪潮(北京)电子信息产业有限公司 | 一种实现数据库读写分离的方法和设备 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107291926A (zh) * | 2017-06-29 | 2017-10-24 | 搜易贷(北京)金融信息服务有限公司 | 一种binlog分析方法 |
CN107291926B (zh) * | 2017-06-29 | 2020-08-18 | 搜易贷(北京)金融信息服务有限公司 | 一种binlog分析方法 |
CN109213827B (zh) * | 2017-07-03 | 2022-07-08 | 阿里云计算有限公司 | 一种数据处理系统、方法、路由器及从数据库 |
CN109213827A (zh) * | 2017-07-03 | 2019-01-15 | 阿里巴巴集团控股有限公司 | 一种数据处理系统、方法、路由器及从数据库 |
CN110019496A (zh) * | 2017-07-27 | 2019-07-16 | 北京京东尚科信息技术有限公司 | 数据读写方法和系统 |
CN110019496B (zh) * | 2017-07-27 | 2021-06-29 | 北京京东尚科信息技术有限公司 | 数据读写方法和系统 |
CN107704603A (zh) * | 2017-10-16 | 2018-02-16 | 山东浪潮通软信息科技有限公司 | 一种实现读写分离的方法及装置 |
CN107766575A (zh) * | 2017-11-14 | 2018-03-06 | 中国联合网络通信集团有限公司 | 读写分离的数据库访问方法及装置 |
CN107832448A (zh) * | 2017-11-22 | 2018-03-23 | 泰康保险集团股份有限公司 | 数据库操作方法、装置及设备 |
WO2022041661A1 (zh) * | 2020-08-24 | 2022-03-03 | 中国银联股份有限公司 | 数据读写处理方法、数据中心、容灾系统及存储介质 |
CN113094364A (zh) * | 2021-04-02 | 2021-07-09 | 上海中通吉网络技术有限公司 | 快递网点账单的读写方法、装置、设备及存储介质 |
CN114253770A (zh) * | 2021-12-17 | 2022-03-29 | 苏州浪潮智能科技有限公司 | 一种数据库的主从备份系统 |
CN114253770B (zh) * | 2021-12-17 | 2023-12-26 | 苏州浪潮智能科技有限公司 | 一种数据库的主从备份系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106874281B (zh) | 2020-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106874281A (zh) | 实现数据库读写分离的方法和装置 | |
US10324924B2 (en) | Synchronizing query result between heterogeneous databases | |
CN108287708B (zh) | 一种数据处理方法、装置、服务器及计算机可读存储介质 | |
CN104965879A (zh) | 修改数据表的表结构的方法及装置 | |
CN101741830A (zh) | 实现多客户端数据同步的方法、系统、客户端及服务器 | |
US9514176B2 (en) | Database update notification method | |
CN111190962B (zh) | 一种文件同步方法、装置及本地终端 | |
US10509716B2 (en) | Automated recovery of flighted features based on service requests | |
US11360975B2 (en) | Data providing apparatus and data providing method | |
US8990440B2 (en) | Reusing system configuration information and metadata for related operations | |
US10324933B2 (en) | Technique for processing query in database management system | |
CN108415998A (zh) | 应用依赖关系更新方法、终端、设备及存储介质 | |
CN110955719B (zh) | 一种数据存取处理设备、系统和方法 | |
EP3061011B1 (en) | Method for optimizing index, master database node and subscriber database node | |
CN107181773A (zh) | 分布式存储系统的数据存储及数据管理方法、设备 | |
US11003540B2 (en) | Method, server, and computer readable medium for index recovery using index redo log | |
US20140025630A1 (en) | Data-store management apparatus, data providing system, and data providing method | |
US10185735B2 (en) | Distributed database system and a non-transitory computer readable medium | |
KR102214697B1 (ko) | 데이터베이스 관리 시스템에서 데이터 저장을 위한 공간 관리를 제공하는 컴퓨터 프로그램 | |
CN105791350B (zh) | 项目数据处理方法和系统 | |
US20200133919A1 (en) | Method, electronic device and computer program product for snapshot replication | |
CN108073559B (zh) | 一种实现表格数据更新的方法、装置及系统 | |
JP2004013867A (ja) | 複製データベースシステム、データベース装置及びそれに用いるデータベース更新方法並びにそのプログラム | |
US11726978B2 (en) | Computer program for providing efficient change data capture in a database system | |
US11561958B2 (en) | Information processing device and information processing system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder | ||
CP02 | Change in the address of a patent holder |
Address after: Room 810, 8 / F, 34 Haidian Street, Haidian District, Beijing 100080 Patentee after: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd. Address before: 100089 Beijing city Haidian District wanquanzhuang Road No. 28 Wanliu new building block A room 602 Patentee before: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd. |