CN117251500A - 一种数据库动态读写分离的系统及方法 - Google Patents

一种数据库动态读写分离的系统及方法 Download PDF

Info

Publication number
CN117251500A
CN117251500A CN202311544041.2A CN202311544041A CN117251500A CN 117251500 A CN117251500 A CN 117251500A CN 202311544041 A CN202311544041 A CN 202311544041A CN 117251500 A CN117251500 A CN 117251500A
Authority
CN
China
Prior art keywords
data source
rule
library
source selection
application program
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
CN202311544041.2A
Other languages
English (en)
Other versions
CN117251500B (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.)
Shenzhen Ylink Computing System Co ltd
Original Assignee
Shenzhen Ylink Computing System 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 Shenzhen Ylink Computing System Co ltd filed Critical Shenzhen Ylink Computing System Co ltd
Priority to CN202311544041.2A priority Critical patent/CN117251500B/zh
Publication of CN117251500A publication Critical patent/CN117251500A/zh
Application granted granted Critical
Publication of CN117251500B publication Critical patent/CN117251500B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24564Applying rules; Deductive queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种数据库动态读写分离的系统及方法,该方法包括以下步骤:建立应用程序与所述Primary主库之间读写访问的连接,同时建立应用程序与所述多个Slaver从库之间只读访问的连接;应用程序启动时,读取配置文件并对其进行解析,并依序对解析后的各条数据源选择规则进行存储;通过对外暴露接口,以接收外部调用修改数据源选择规则,并对接收的数据源选择规则进行存储,实现动态改变数据源选择规则;根据业务需求,读取动态改变后的数据源选择规则,并按规则逐条分析后选出该业务所需的数据源;本发明的有益效果是:能够支持数据库的读写分离,同时在数据库运行期间进行动态改变读写机制,且调整后立即生效。

Description

一种数据库动态读写分离的系统及方法
技术领域
本发明涉及数据库技术领域,更具体的说,本发明涉及一种数据库动态读写分离的系统及方法。
背景技术
现代应用系统中,作为数据存放的数据库是系统的重要支撑。应用程序(也称应用服务)需要访问数据库读取或改变数据。需要为了提升数据库灾备能力及其可靠性和可恢复性,通常同一个数据库会部署在多台服务器上,形成由多个节点组成数据库集群。
结合图1所示,通常一个数据库集群内会部署Primary主库节点一台和Slaver从库节点一台或多台。即:
Primary主库,也称为“RW读写节点”,主库节点可以被读取访问也可以被写入访问。数据库客户端或应用程序等既可以读取访问该节点,也可以写入访问该节点;Primary主库节点通常只有一个。
Slaver从库,也称为“RO只读节点”,从库节点只允许被读取访问;数据库客户端或应用程序等只能读取访问该节点,不能写入访问该节点。Slaver从库节点通常有一个或者多个。
读写访问也称为RW读写访问。包括对插入新增数据、更新数据、删除数据,也包括查询数据。只读访问也称为RO只读访问。指仅查询数据,不改变数据。
其中,从库为主库的镜像,从库实时或准实时从主库获取数据,实现从库数据与主库保持数据一致(因网络等原因数据一致性可能存在一定延时)。
数据库集群部署时,应用程序可按读写分离方式分别访问集群中不同的节点。若应用程序的某业务(例如改变客户余额)需要写入数据,则应连接Primary主库进行访问;若应用程序的某业务(例如查询客户余额)仅查询数据,则应连接Slaver从库进行访问。
在实践情形中,应用程序对数据库的访问中,查询只读类访问往往占大多数。因此可以通过读写分离实现不同的业务访问不通的库节点,达到:
由Primary主库承担写入类操作,少量或者不承担只读类操作,减轻对Primary主库负载。
由Slaver从库承担只读类操作,以减轻Primary主库访问负载;而且,可通过部署多个Slaver从库,并将只读类操作分散到不同Slaver从库,减轻每个Slaver从库节点的访问负载。
现有技术中关于数据库读写分离解决方案存在以下两方面的不足:
一方面,读写分离方式在开发阶段固定,难以在运行时动态改变。现有的读写分离解决方案无论是通过识别SQL文本中关键词识出读写;或是通过在SQL文本中增加Hint区分读写;还是通过在代码中对每支业务通过命名或其他方式区分每支业务读写等方式。这些方式都存在一个缺点,其读写分离机制在开发阶段已经固定的。应用程序部署上线后,难以在运行期间进行动态改变读写(在应用程序不重启的情况下动态改变读写分离)且实时生效。
需要动态改变读写的场景示例:对于“读取客户当前余额以判断是否足够”功能点,在开发阶段认为该功能点对数据库为RO只读访问,因此在源代码中固化使用Slaver从库作为访问数据源。但在上线运行后发现:①由于网络等因素导致Slaver从库与Primary主库的数据同步存在延时,Slaver从库与Primary主库无法保障数据强实时一致性;或者②Slaver从库节点临时故障,Primary主库正常工作。这两种情况都需要将该功能点的数据源动态从RO只读访问切换至RW读写访问。现有的读写分离解决方案难以支持动态改变,需要重新修改源代码重新部署才能部署上线。
另一方面,未考虑RO只读请求访问之间的动态分散。现有的读写分离方案虽考虑了读与写分类,但没有考虑RO只读请求如何分散。应当让数据库集群多个从节点资源均承担读请求访问负载,分散压力。而且这种分散机制应当是可动态改变的。
发明内容
为了克服现有技术的不足,本发明提供一种数据库动态读写分离的系统及方法,能够支持数据库的读写分离,同时在数据库运行期间进行动态改变读写机制,且调整后立即生效。
本发明解决其技术问题所采用的技术方案是:一种数据库动态读写分离的方法,所述数据库由Primary主库和多个Slaver从库组成,该方法包括以下步骤:
建立应用程序与所述Primary主库之间读写访问的连接,同时建立应用程序与所述多个Slaver从库之间只读访问的连接;
应用程序启动时,读取配置文件并对其进行解析,并依序对解析后的各条数据源选择规则进行存储;
通过对外暴露接口,以接收外部调用修改数据源选择规则,并对接收的数据源选择规则进行存储,实现动态改变数据源选择规则;
根据业务需求,读取动态改变后的数据源选择规则,并按规则逐条分析后选出该业务所需的数据源。
进一步的,所述的数据源选择规则为一条或多条,且当数据源选择规则为多条时,该多条数据源选择规则为有序的;
每条规则包括选库条件和选择结果,选库条件包含应用程序名、功能点、SQL中需出现的关键字、SQL中不得出现的关键字;选择结果包括库类别、库节点。
进一步的,所述通过对外暴露接口,以接收外部调用修改数据源选择规则,并对接收的数据源选择规则进行存储,实现动态改变数据源选择规则,包括:
S101、对外暴露接口;
S102、客户端按新增/修改/删除接口规范生成JOSN请求,调用对应接口;
S103、解析JOSN请求,并验证操作口令是否与预设一致、验证JOSN请求的内容是否合法;
S104、验证通过后,按根据JSON请求的内容,对数据源选择规则进行新增/修改/删除的操作,最终完成数据源选择规则的内容动态更新且立即生效。
进一步的,所述根据业务需求,读取动态改变后的数据源选择规则,并按规则逐条分析后选出该业务所需的数据源,还包括:
将从Slaver从库中查询得到的数据放入结果缓存中;
当出现相同SQL查询请求时,直接从已有的结果缓存中获取数据。
进一步的,所述根据业务需求,读取动态改变后的数据源选择规则,并按规则逐条分析后选出该业务所需的数据源,还包括:
S201、获取应用程序的当前信息;
S202、进行规则匹配,依顺序读取一条数据源选择规则的内容,并以应用程序的当前信息与选择条件进行逻辑匹配;
S203、步骤S202的匹配中,若选择条件满足,则取得该条数据源选择规则对应的选择结果;若选择条件不满足,则重复步骤S202读取下一条数据源选择规则并进行规则匹配;
S204、对得到选择结果获得库类别、库节点属性,以确定最终节点;
S205、根据库类别和最终节点,获取对应库的具体连接;
S206、若库类别为RW读写,则获得Primary主库的数据源连接,或从已有的连接池中获取连接;通过该数据源连接,执行待执行SQL,并将执行结果返回至应用程序;
S207、若库类别为RO只读,包括:
以待执行SQL语句文本整体或者以SQL语句文本的Hash散列值作为Key,从结果缓存中获取对应缓存;若从结果缓存中能获取到Value则缓存命中;否则缓存未命中;
若缓存命中,则以命中缓存的Value作为结果直接返回至应用程序,无需获取数据源连接,也无需执行SQL;该步骤中,若以序列化后的字符串作为Value则还需要反序列化;
若缓存未命中,则获得Slaver从库的数据源连接,或从已有的连接池中获取连接;通过该数据源连接,执行待执行SQL;若执行成功,将SQL执行结果保存至结果缓存中;无论SQL执行结果是否成功均将执行结果返回至应用程序。
进一步的,步骤S201中,所述当前信息包括当前应用程序名、功能点以及待执行SQL。
进一步的,步骤S204中,若库节点指定为“ANY”任意,则从该库类别下多个节点中,以随机方式或轮训的方式选其一个节点作为最终节点;
若库节点不是“ANY”任意而是具体指定的节点,则直接以其指定的节点作为最终节点。
本发明还提供了一种数据库动态读写分离的系统,其改进之处在于,所述数据库包括Primary主库和多个Slaver从库,该系统包括:
加载初始规则组件,对读取的内容进行解析,并依序将解析后的各条数据源选择规则放入规则链存储组件中;
规则链存储组件,用于实现对数据源选择规则的存储;
动态调整规则组件,该动态调整规则组件通过对外暴露接口,以接收外部调用,并将接收的数据源选择规则放入规则链存储组件内,实现动态改变数据源选择规则;
选择引擎组件,按业务需求读取规则链存储组件中的数据源选择规则,在分析后选出该业务所需的数据源;
RW数据源管理组件,通过RW数据源管理组件实现对Primary主库的数据源连接或连接池的管理;
RO数据源管理组件,通过RO数据源管理组件实现对多个Slaver从库的数据源连接或连接池的管理。
进一步的,所述动态调整规则组件与中央配置单元联动同步,实现自动从中央配置单元获取最新规则;
所述中央配置单元可为Nacos、Spring Config Server以及ZooKeeper中的任意一种。
进一步的,所述的加载初始规则组件从配置文件中读取加载规则,并在解析后形成数据源选择规则;
所述规则链存储组件在应用程序中存储数据源选择规则,当应用程序启动时,将数据源选择规则加载到应用程序的内存中。
本发明的有益效果是:本发明的一种数据库动态读写分离的方法及系统,支持读写分离方式可以在运行时动态改变,调整后立即生效;还可以灵活地在读读之间的动态调整。
附图说明
图1为现有技术中数据库集群的结构示意图。
图2为本发明中一种数据库动态读写分离的系统的原理框图。
图3为本发明中加载初始规则组件的工作流程示意图。
图4为本发明中动态调整规则组件的工作流程示意图。
具体实施方式
下面结合附图和实施例对本发明进一步说明。
以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整地描述,以充分地理解本发明的目的、特征和效果。显然,所描述的实施例只是本发明的一部分实施例,而不是全部实施例,基于本发明的实施例,本领域的技术人员在不付出创造性劳动的前提下所获得的其他实施例,均属于本发明保护的范围。另外,专利中涉及到的所有联接/连接关系,并非单指构件直接相接,而是指可根据具体实施情况,通过添加或减少联接辅件,来组成更优的联接结构。本发明创造中的各个技术特征,在不互相矛盾冲突的前提下可以交互组合。
实施例1
结合图2所示,本发明公开了一种数据库动态读写分离的系统,其中数据库包括Primary主库和多个Slaver从库,本实施例中,包括有三个Slaver从库,分别为Slaver从库01、Slaver从库02、Slaver从库03。所述数据库动态读写分离的系统包括加载初始规则组件、规则链存储组件、动态调整规则组件、选择引擎组件、RW数据源管理组件以及RO数据源管理组件。
其中,RW数据源管理组件管理RW读写访问的Primary主库的数据源连接或连接池,包括IP、端口、用户名、密码等连接配置信息,以及连接池管理等。RO数据源管理组件管理RO只读访问的Slaver从库的数据源连接或连接池,包括IP、端口、用户名、密码等连接配置信息,以及连接池管理等。可以访问多个Slaver从库,本实施例中,通过RO数据源管理组件访问三个Slaver从库。
进一步的,规则链存储组件是在应用程序中(例如内存中)存储的数据源选择规则,数据源选择规则可有一条或者多条,多条则是有序的;数据源选择规则存储在内存中可加快规则的读取效率。加载初始规则组件对读取的内容进行解析,并依序将解析后的各条数据源选择规则放入规则链存储组件中。对于所述的动态调整规则组件,该动态调整规则组件通过对外暴露接口,以接收外部调用,并将接收的数据源选择规则放入规则链存储组件内,实现动态改变数据源选择规则;例如本实施例中,动态调整规则组件对外暴露接口为HTTP协议的接口。另外,动态调整规则组件还可以与某个中央配置单元联动同步,实现自动从中央配置单元获取最新规则;本实施例中,中央配置单元为Nacos、Spring ConfigServer、ZooKeeper中的任意一个,也可以为其他配置库。
所述的选择引擎组件,按业务需求读取规则链存储组件中的数据源选择规则,在分析后选出该业务所需的数据源;对于RO数据源,还需要判断是否存在缓存,已经将从数据库查询得到的数据放入在缓存中。
本实施例中,还包括结果缓存组件,该结果缓存组件将已经从RO数据源SQL查询得到数据作为结果缓存保存在应用程序内存中,下次相同SQL查询请求,直接从已有的结果缓存中获取,无需实际访问Slaver从库,降低从库压力。因此本发明提供了结果缓存功能,可进一步降低数据库查询压力。
本发明的一种数据库动态读写分离的系统,支持读写分离方式可以在运行时动态改变,调整后立即生效。还可以灵活地在读读之间的动态调整,例如可根据数据库集群中各个Slaver从库负载压力情况或者在数据库集群结构扩容/收缩时,及时动态调整各节点请求负载。
实施例2
继续参照图2所示,本实施例中公开了一种数据库动态读写分离的系统,其中数据库包括Primary主库和多个Slaver从库,本实施例中,包括有三个Slaver从库,分别为Slaver从库01、Slaver从库02、Slaver从库03。同样的,所述数据库动态读写分离的系统包括加载初始规则组件、规则链存储组件、动态调整规则组件、选择引擎组件、RW数据源管理组件以及RO数据源管理组件。
在实施例1的基础上,对于所述的规则链存储组件、加载初始规则组件、动态调整规则组件以及选择引擎组件,提供了更为具体的实施例。
对于所述的规则链存储组件,其中的规则链即为数据源选择规则。数据源选择规则可有一条或者多条,多条是有序。应用程序启动时,会将数据源选择规则加载到内存中以加快读取规则的效率。本发明中,数据源选择规则允许动态修改,修改后立即生效。
本实施例中,数据源选择规则形式及内容示例如下(下表中的规则链即为数据源选择规则):
以上表中示例规则链说明:
规则1:若当前应用程序为AcctMgr且指定当前功能点为QueryAcctInfo时(不判断SQL语句内容),则从RO只读数据源中任选一个Slaver从库节点进行访问。
规则2:若当前应用程序为AcctMgr且指定当前功能点为QueryBalance时(不判断SQL语句内容),则从RO只读数据源中选择指定的Slaver01库节点进行访问。
规则3:若当前应用程序为AcctMgr且指定当前功能点为AddValue时(不判断SQL语句内容),则选择RW读写数据源的Primary主库节点进行访问。
规则4:若当前应用程序为AcctMgr且SQL语句包含“select”关键字且SQL语句不含“insert|update|delete”关键字中任意一个时(不判断功能点),则从RO只读数据源中任选一个Slaver从库节点进行访问。
规则5:若当前应用程序为AcctMgr且SQL语句包含“insert|update|delete” 关键字中任意一个时(不判断功能点),则选择RW读写数据源的Primary主库节点进行访问。
规则6:若当前应用程序为RptQry(不判断功能点,不判断SQL语句内容),则从RO只读数据源中任选一个Slaver从库节点进行访问。
规则7:若当前应用程序为StoreMgr且指定当前功能点为InventoryBalance时(不判断SQL语句内容),则选择RW读写数据源的Primary主库节点进行访问。
例如本实施例中,该功能点为“商品剩余库存查询”,虽然该功能点“商品剩余库存查询”对数据库仅涉及读取操作,没有数据变更操作。但考虑到对查询结果为强实时要求,因此选择RW读写数据源的Primary主库节点进行访问。避免因Slaver从库与Primary主库的数据同步存在延时而导致从Slaver从库查询结果不准的问题。
规则8:若当前应用程序为StoreMgr且SQL语句包含“select”关键字且SQL语句不含“insert|update|delete”关键字中任意一个时(不判断功能点),则从RO只读数据源中任选一个Slaver从库节点进行访问。
规则9:若当前应用程序为StoreMgr且SQL语句包含“insert|update|delete” 关键字中任意一个时(不判断功能点),则选择RW读写数据源的Primary主库节点进行访问。
结合图3所示,对于所述的加载初始规则组件,本发明提供了一个具体实施例,本实施例中,加载初始规则组件从配置文件中读取加载规则,并在解析后形成数据源选择规则。
在应用程序启动时,从配置文件中加载规则的步骤入选:
一、配置文件内容是已按约定格式存放一条或者多条选择规则(有序存放);配置文件内容可以人工进行编辑设置;也可以是上一次应用程序运行时保存的结果。
二、通常在应用程序启动时,由加载初始规则组件读取配置文件,按序解析每行的内容文本;
三、将解析得到的结果,逐条按序放入规则链存储组件中。
进一步的,结合图4所示,对于所述的动态调整规则组件,本发明中提供了一具体实施例,所述动态调整规则组件通过对外暴露接口,以接收外部调用,并将接收的数据源选择规则放入规则链存储组件内,实现动态改变数据源选择规则,包括:
S101、动态调整规则组件对外暴露接口;
如下所示,以HTTP+JSON协议为例,对外暴露接口规范示例如下:
新增规则接口URL地址:http://IP:PORT/addOneRule;新增规则接口Body内容(JSON格式):
{
"password": "操作口令(需与预设的一致,避免误操作)",
"addBeforeRuleNo": "1",
"chooseCondition": {
"applicationName": "应用程序名称(英文字母或数字)",
"FunctionName": "功能点名称(英文字母或数字)",
"sqlContainKeywords": "SQL中需出现的关键字(多个以竖线分隔)",
"sqlNotContainKeywords": "SQL中不得出现的关键字(多个以竖线分隔)"
}
"chooseResult": {
"type": "库类型(可取值:RW或RO)",
"NodeName": "库节点名(若不指定具体节点名,则填ANY标书任意)",
}
}
其中,addBeforeRuleNo字段指定将本条新规则增加在哪条规则之前。
修改规则接口URL地址:http://IP:PORT/modifyOneRule修改规则接口Body内容(JSON格式):
{
"password": "操作口令(需与预设的一致,避免误操作)",
"RuleNo": "1",
"chooseCondition": {
"applicationName": "应用程序名称(英文字母或数字)",
"FunctionName": "功能点名称(英文字母或数字)",
"sqlContainKeywords": "SQL中需出现的关键字(多个以竖线分隔)",
"sqlNotContainKeywords": "SQL中不得出现的关键字(多个以竖线分隔)"
}
"chooseResult": {
"type": "库类型(可取值:RW或RO)",
"NodeName": "库节点名(若不指定具体节点名,则填ANY标书任意)",
}
}
其中,RuleNo指定对哪条规则进行修改,JSON格式内容为新规则。
删除规则接口URL地址:http://IP:PORT/deleteOneRule删除规则接口Body内容(JSON格式):
{
"password": "操作口令(需与预设的一致,避免误操作)",
"RuleNo": "1",
}
其中,RuleNo指定对哪条规则进行删除。
S102、客户端按新增/修改/删除接口规范生成JOSN请求,调用对应接口,实现JSON请求内容传输至动态调整规则组件;
S103、动态调整规则组件接收到请求后,解析该请求,验证操作口令是否与预设一致、验证请求内容是否合法;
S104、动态调整规则组件验证通过后,按根据JSON请求内容,对在规则链存储组件中的数据源选择规则进行新增/修改/删除操作;最终完成对规则链存储组件中的数据源选择规则的内容动态更新且立即生效。
因此,通过该步骤,本发明不仅仅支持动态读写分离,还可以灵活地在读读之间的动态调整。另外,本发明侵入性低,无需各应用程序进行大量改造。本发明具有广泛通用性,不依赖于特定数据库产品,也不依赖特定程序开发语言,也不局限在特定领域的应用系统,具有广泛的推广应用价值。
对于所述的选择引擎组件,本发明提供了一具体实施例。对于商品秒杀等业务场景,一段时间内会有大量相同的查询请求,例如高频SQL查询某个秒杀商品代码、名称、详情介绍、参数规格、价格等基本信息。这些SQL查询请求,虽可以通过以上选择引擎按规则链动态的选择数据源连接,以读写分离方式实现查询请求由Slaver从库承担,但这些高频的SQL查询仍会使Slaver从库负载较大。在Slaver从库内对每一次SQL查询请求都需要进行解析SQL文本、语法词法分析、权限校验、执行计划生成、执行计划选择、IO读取磁盘数据、数据过滤、排序、表表关联等各项操作才能最终得到结果并返回至应用程序。
对此,本发明提出改进的方案,这些对于相同SQL查询请求,可在前次已从数据库查询得到数据作为结果缓存保存在应用程序内存中,下次相同SQL查询请求,直接从已有的结果缓存中获取,无需实际访问Slaver从库,降低从库压力。
本实施例中,对于结果缓存的存放结构实现:由于C、C++、Java、Python、C#、Go、JavaScript等各主流程序开发语言均支持Map结构,可使用Map结构存放结果缓存;Map结构中每条数据包括Key-Value键值对;具体形式为:
Key:以SQL语句文本整体作为Key(或者以SQL语句文本的Hash散列值作为Key);
Value:成功执行SQL语句查询结果对象作为Value(或者以查询结果对象的序列化后的字符串作为Value)。
因此,改进后的选择引擎组件处理流程如下:
S201、获取应用程序的当前信息;当前信息包括当前应用程序名、功能点以及待执行SQL;
S202、进行规则匹配,从规则链存储组件中依顺序读取一条数据源选择规则的内容,并以应用程序的当前信息与选择条件进行逻辑匹配;本实施例中的依顺序为序号从小至大;
S203、步骤S202的匹配中,若选择条件满足,则取得该条数据源选择规则对应的选择结果;若选择条件不满足,则重复步骤S202读取下一条数据源选择规则并进行规则匹配;
S204、对得到选择结果获得库类别、库节点属性,以确定最终节点;
步骤S204中,若库节点指定为“ANY”任意,则从该库类别下多个节点中,以随机方式或轮训的方式选其一个节点作为最终节点;若库节点不是“ANY”任意而是具体指定的节点,则直接以其指定的节点作为最终节点;
S205、根据库类别和最终节点,RW数据源管理或RO数据源管理获取对应库的具体连接;
S206、若库类别为RW读写,则从RW数据源管理中获得Primary主库的数据源连接,或从已有的连接池中获取连接;通过该数据源连接,执行待执行SQL,并将执行结果返回至应用程序;
S207、若库类别为RO只读,包括:
以待执行SQL语句文本整体或者以SQL语句文本的Hash散列值作为Key,从结果缓存中获取对应缓存;若从结果缓存中能获取到Value则缓存命中;否则缓存未命中;
若缓存命中,则以命中缓存的Value作为结果直接返回至应用程序,无需获取数据源连接,也无需执行SQL;该步骤中,若以序列化后的字符串作为Value则还需要反序列化;
若缓存未命中,则从RO数据源管理中获得Slaver从库的数据源连接,或从已有的连接池中获取连接;通过该数据源连接,执行待执行SQL;若执行成功,将SQL执行结果保存至结果缓存中;无论SQL执行结果是否成功均将执行结果返回至应用程序。
实施例3
本发明公开了一种数据库动态读写分离的方法,所述数据库包括Primary主库和多个Slaver从库,该方法包括以下的步骤:
S10、建立应用程序与所述Primary主库之间读写访问的连接,同时建立应用程序与所述多个Slaver从库之间只读访问的连接;
S20、应用程序启动时,读取配置文件并对其进行解析,并依序对解析后的各条数据源选择规则进行存储;
S30、通过对外暴露接口,以接收外部调用,并对接收的数据源选择规则进行存储,实现动态改变数据源选择规则;
S40、根据业务需求,读取动态改变后的数据源选择规则,并按规则逐条分析后选出该业务所需的数据源。
其中,所述步骤S10中,所述建立应用程序与所述Primary主库之间读写访问的连接,建立应用程序与所述多个Slaver从库之间只读访问的连接时,包括:对数据源连接的IP、端口、用户名以及密码的连接配置信息的管理。所述的数据源选择规则为一条或多条,且当数据源选择规则为多条时,该多条数据源选择规则为有序的。并且,所述数据源选择规则为多条时,包括多条规则,并且该规则与实施例2中相同,本实施例中不再详细说明。
进一步的,本实施例中,所述步骤S30包括:
S301、动态调整规则组件对外暴露接口;
S302、通过客户端按新增/修改/删除接口规范,调用对应接口,实现JSON请求内容传输至动态调整规则组件;
S303、动态调整规则组件接收到请求后,解析该请求,验证操作口令是否与预设一致、验证请求内容是否合法;
S304、动态调整规则组件验证通过后,按根据JSON请求内容,对在规则链存储组件中的数据源选择规则进行新增/修改/删除操作;最终完成对规则链存储组件中的数据源选择规则的内容动态更新且立即生效。
更进一步的,步骤S40中,对于RO数据源,判断是否存在缓存;将已经从RO数据源SQL查询得到的结果作为缓存进行保存,当出现相同SQL查询请求时,直接从已有的结果缓存中获取。具体的,步骤S40包括以下步骤:
S401、获取应用程序的当前信息;步骤S401中,所述当前信息包括当前应用程序名、功能点以及待执行SQL;
S402、进行规则匹配,从规则链存储组件中依顺序读取一条数据源选择规则的内容,并以应用程序的当前信息与选择条件进行逻辑匹配;
S403、步骤S402的匹配中,若选择条件满足,则取得该条数据源选择规则对应的选择结果;若选择条件不满足,则重复步骤S402读取下一条数据源选择规则并进行规则匹配;
S404、对得到选择结果获得库类别、库节点属性,以确定最终节点;步骤S404中,若库节点指定为“ANY”任意,则从该库类别下多个节点中,以随机方式或轮训的方式选其一个节点作为最终节点;若库节点不是“ANY”任意而是具体指定的节点,则直接以其指定的节点作为最终节点;
S405、根据库类别和最终节点,RW数据源管理或RO数据源管理获取对应库的具体连接;
S406、若库类别为RW读写,则从RW数据源管理中获得Primary主库的数据源连接,或从已有的连接池中获取连接;通过该数据源连接,执行待执行SQL,并将执行结果返回至应用程序;
S407、若库类别为RO只读,包括:
以待执行SQL语句文本整体或者以SQL语句文本的Hash散列值作为Key,从结果缓存中获取对应缓存;若从结果缓存中能获取到Value则缓存命中;否则缓存未命中;
若缓存命中,则以命中缓存的Value作为结果直接返回至应用程序,无需获取数据源连接,也无需执行SQL;该步骤中,若以序列化后的字符串作为Value则还需要反序列化;
若缓存未命中,则从RO数据源管理中获得Slaver从库的数据源连接,或从已有的连接池中获取连接;通过该数据源连接,执行待执行SQL;若执行成功,将SQL执行结果保存至结果缓存中;无论SQL执行结果是否成功均将执行结果返回至应用程序。
基于此,本发明揭示了一种数据库动态读写分离的系统及方法,与现有技术中实现数据库读写分离的方案相比,具有以下特点:其一、支持读写分离方式可以在运行时动态改变,调整后立即生效。其二、不仅仅支持动态读写分离,还可以灵活地在读读之间的动态调整;例如可根据数据库集群中各个Slaver从库负载压力情况或者在数据库集群结构扩容/收缩时,及时动态调整各节点请求负载。其三、本发明侵入性低,无需各应用程序进行大量改造。其四、具有广泛通用性,不依赖于特定数据库产品,也不依赖特定程序开发语言,也不局限在特定领域的应用系统;具有广泛的推广应用价值。其五、提供了结果缓存功能,可进一步降低数据库查询压力。
以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。

Claims (10)

1.一种数据库动态读写分离的方法,其特征在于,所述数据库包括Primary主库和多个Slaver从库,该方法包括以下步骤:
建立应用程序与所述Primary主库之间读写访问的连接,同时建立应用程序与所述多个Slaver从库之间只读访问的连接;
应用程序启动时,读取配置文件并对其进行解析,并依序对解析后的各条数据源选择规则进行存储;
通过对外暴露接口,以接收外部调用修改数据源选择规则,并对接收的数据源选择规则进行存储,实现动态改变数据源选择规则;
根据业务需求,读取动态改变后的数据源选择规则,并按规则逐条分析后选出该业务所需的数据源。
2.根据权利要求1所述的一种数据库动态读写分离的方法,其特征在于,所述的数据源选择规则为一条或多条,且当数据源选择规则为多条时,该多条数据源选择规则为有序的;
每条规则包括选库条件和选择结果,选库条件包含应用程序名、功能点、SQL中需出现的关键字、SQL中不得出现的关键字;选择结果包括库类别、库节点。
3.根据权利要求1所述的一种数据库动态读写分离的方法,其特征在于,所述通过对外暴露接口,以接收外部调用修改数据源选择规则,并对接收的数据源选择规则进行存储,实现动态改变数据源选择规则,包括:
S101、对外暴露接口;
S102、客户端按新增/修改/删除接口规范生成JOSN请求,调用对应接口;
S103、解析JOSN请求,并验证操作口令是否与预设一致、验证JOSN请求的内容是否合法;
S104、验证通过后,按根据JSON请求的内容,对数据源选择规则进行新增/修改/删除的操作,最终完成数据源选择规则的内容动态更新且立即生效。
4.根据权利要求1所述的一种数据库动态读写分离的方法,其特征在于,所述根据业务需求,读取动态改变后的数据源选择规则,并按规则逐条分析后选出该业务所需的数据源,还包括:
将从Slaver从库中查询得到的数据放入结果缓存中;
当出现相同SQL查询请求时,直接从已有的结果缓存中获取数据。
5.根据权利要求4所述的一种数据库动态读写分离的方法,其特征在于,所述根据业务需求,读取动态改变后的数据源选择规则,并按规则逐条分析后选出该业务所需的数据源,还包括:
S201、获取应用程序的当前信息;
S202、进行规则匹配,依顺序读取一条数据源选择规则的内容,并以应用程序的当前信息与选择条件进行逻辑匹配;
S203、步骤S202的匹配中,若选择条件满足,则取得该条数据源选择规则对应的选择结果;若选择条件不满足,则重复步骤S202读取下一条数据源选择规则并进行规则匹配;
S204、对得到选择结果获得库类别、库节点属性,以确定最终节点;
S205、根据库类别和最终节点,获取对应库的具体连接;
S206、若库类别为RW读写,则获得Primary主库的数据源连接,或从已有的连接池中获取连接;通过该数据源连接,执行待执行SQL,并将执行结果返回至应用程序;
S207、若库类别为RO只读,包括:
以待执行SQL语句文本整体或者以SQL语句文本的Hash散列值作为Key,从结果缓存中获取对应缓存;若从结果缓存中能获取到Value则缓存命中;否则缓存未命中;
若缓存命中,则以命中缓存的Value作为结果直接返回至应用程序,无需获取数据源连接,也无需执行SQL;该步骤中,若以序列化后的字符串作为Value则还需要反序列化;
若缓存未命中,则获得Slaver从库的数据源连接,或从已有的连接池中获取连接;通过该数据源连接,执行待执行SQL;若执行成功,将SQL执行结果保存至结果缓存中;无论SQL执行结果是否成功均将执行结果返回至应用程序。
6.根据权利要求5所述的一种数据库动态读写分离的方法,其特征在于,步骤S201中,所述当前信息包括当前应用程序名、功能点以及待执行SQL。
7.根据权利要求5所述的一种数据库动态读写分离的方法,其特征在于,步骤S204中,若库节点指定为“ANY”任意,则从该库类别下多个节点中,以随机方式或轮训的方式选其一个节点作为最终节点;
若库节点不是“ANY”任意而是具体指定的节点,则直接以其指定的节点作为最终节点。
8.一种数据库动态读写分离的系统,其特征在于,所述数据库包括Primary主库和多个Slaver从库,该系统包括:
加载初始规则组件,对读取的内容进行解析,并依序将解析后的各条数据源选择规则放入规则链存储组件中;
规则链存储组件,用于实现对数据源选择规则的存储;
动态调整规则组件,该动态调整规则组件通过对外暴露接口,以接收外部调用,并将接收的数据源选择规则放入规则链存储组件内,实现动态改变数据源选择规则;
选择引擎组件,按业务需求读取规则链存储组件中的数据源选择规则,在分析后选出该业务所需的数据源;
RW数据源管理组件,通过RW数据源管理组件实现对Primary主库的数据源连接或连接池的管理;
RO数据源管理组件,通过RO数据源管理组件实现对多个Slaver从库的数据源连接或连接池的管理。
9.根据权利要求8所述的一种数据库动态读写分离的系统,其特征在于,所述动态调整规则组件与中央配置单元联动同步,实现自动从中央配置单元获取最新规则;
所述中央配置单元可为Nacos、Spring Config Server以及ZooKeeper中的任意一种。
10.根据权利要求8所述的一种数据库动态读写分离的系统,其特征在于,所述的加载初始规则组件从配置文件中读取加载规则,并在解析后形成数据源选择规则;
所述规则链存储组件在应用程序中存储数据源选择规则,当应用程序启动时,将数据源选择规则加载到应用程序的内存中。
CN202311544041.2A 2023-11-20 2023-11-20 一种数据库动态读写分离的方法 Active CN117251500B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311544041.2A CN117251500B (zh) 2023-11-20 2023-11-20 一种数据库动态读写分离的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311544041.2A CN117251500B (zh) 2023-11-20 2023-11-20 一种数据库动态读写分离的方法

Publications (2)

Publication Number Publication Date
CN117251500A true CN117251500A (zh) 2023-12-19
CN117251500B CN117251500B (zh) 2024-02-09

Family

ID=89126858

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311544041.2A Active CN117251500B (zh) 2023-11-20 2023-11-20 一种数据库动态读写分离的方法

Country Status (1)

Country Link
CN (1) CN117251500B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103942228A (zh) * 2013-01-23 2014-07-23 纽海信息技术(上海)有限公司 规则引擎、计算方法、业务系统及调用方法
WO2016091069A1 (zh) * 2014-12-12 2016-06-16 北京奇虎科技有限公司 一种数据操作方法及装置
WO2016126884A1 (en) * 2015-02-05 2016-08-11 Alibaba Group Holding Limited System, method and database proxy server for separating operations of read and write
WO2018199483A1 (ko) * 2017-04-27 2018-11-01 삼성전자 주식회사 지능형 에이전트 관리 방법 및 장치
US20190026322A1 (en) * 2017-07-23 2019-01-24 AtScale, Inc. Rule-based data source selection
CN110297859A (zh) * 2019-06-10 2019-10-01 恩亿科(北京)数据科技有限公司 处理实时数据的方法和装置
CN110321337A (zh) * 2019-06-24 2019-10-11 南威互联网科技集团有限公司 一种实现数据库动态切换的方法及计算机可读存储介质
CN113835690A (zh) * 2021-09-23 2021-12-24 中邮科通信技术股份有限公司 读写分离多数据源组件及其工作方法
WO2021259188A1 (zh) * 2020-06-23 2021-12-30 阿里巴巴集团控股有限公司 路由读请求、反馈报文的方法以及各自装置、数据库

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103942228A (zh) * 2013-01-23 2014-07-23 纽海信息技术(上海)有限公司 规则引擎、计算方法、业务系统及调用方法
WO2016091069A1 (zh) * 2014-12-12 2016-06-16 北京奇虎科技有限公司 一种数据操作方法及装置
WO2016126884A1 (en) * 2015-02-05 2016-08-11 Alibaba Group Holding Limited System, method and database proxy server for separating operations of read and write
WO2018199483A1 (ko) * 2017-04-27 2018-11-01 삼성전자 주식회사 지능형 에이전트 관리 방법 및 장치
US20190026322A1 (en) * 2017-07-23 2019-01-24 AtScale, Inc. Rule-based data source selection
CN110297859A (zh) * 2019-06-10 2019-10-01 恩亿科(北京)数据科技有限公司 处理实时数据的方法和装置
CN110321337A (zh) * 2019-06-24 2019-10-11 南威互联网科技集团有限公司 一种实现数据库动态切换的方法及计算机可读存储介质
WO2021259188A1 (zh) * 2020-06-23 2021-12-30 阿里巴巴集团控股有限公司 路由读请求、反馈报文的方法以及各自装置、数据库
CN113835690A (zh) * 2021-09-23 2021-12-24 中邮科通信技术股份有限公司 读写分离多数据源组件及其工作方法

Also Published As

Publication number Publication date
CN117251500B (zh) 2024-02-09

Similar Documents

Publication Publication Date Title
CN112000348B (zh) 服务灰度发布的控制方法、装置、计算机设备
CN112118565B (zh) 多租户服务灰度发布方法、装置、计算机设备和存储介质
US6915340B2 (en) System and method for deriving future network configuration data from the current and previous network configuration data
US8065323B2 (en) Offline validation of data in a database system for foreign key constraints
RU2531572C2 (ru) Способ репликации баз данных и устройство обновления таблицы
US6237144B1 (en) Use of relational databases for software installation
US7490167B2 (en) System and method for platform and language-independent development and delivery of page-based content
US7275105B2 (en) Enabling online and offline operation
US5751962A (en) Object-based systems management of computer networks
JP3484779B2 (ja) 名前サービス方式及び名前サービス方法
EP0756725B1 (en) Interface device and method
US20030093420A1 (en) Method and system for retrieving sharable information using a hierarchically dependent directory structure
CN112148678B (zh) 一种文件访问方法、系统、设备以及介质
US11704114B2 (en) Data structures for managing configuration versions of cloud-based applications
US20230072930A1 (en) Database query splitting
CN102355499A (zh) 云计算系统
US10606805B2 (en) Object-level image query and retrieval
US11892992B2 (en) Unique identification management
CN106990974B (zh) 一种app应用更新方法、装置及电子设备
CN112000343B (zh) 使用Devops在Kubernetes中部署多版本服务的方法及系统
CN112835638A (zh) 一种基于嵌入式应用程序的配置信息管理方法及装置
CN117251500B (zh) 一种数据库动态读写分离的方法
JP3489216B2 (ja) ファイルシステム
US11620285B2 (en) Automatic database query translation
EP3436972A1 (en) Multiform persistence abstraction

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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40097161

Country of ref document: HK