CN118093630A - 数据源选择方法、装置、存储介质和电子设备 - Google Patents
数据源选择方法、装置、存储介质和电子设备 Download PDFInfo
- Publication number
- CN118093630A CN118093630A CN202410298538.9A CN202410298538A CN118093630A CN 118093630 A CN118093630 A CN 118093630A CN 202410298538 A CN202410298538 A CN 202410298538A CN 118093630 A CN118093630 A CN 118093630A
- Authority
- CN
- China
- Prior art keywords
- data source
- source group
- sql statement
- data
- determined
- 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.)
- Pending
Links
- 238000010187 selection method Methods 0.000 title abstract description 11
- 238000000034 method Methods 0.000 claims abstract description 48
- 238000012544 monitoring process Methods 0.000 claims description 24
- 238000012545 processing Methods 0.000 claims description 15
- 230000004044 response Effects 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 6
- 238000011161 development Methods 0.000 abstract description 10
- 238000010586 diagram Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 12
- 230000006870 function Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000000926 separation method Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 2
- 230000036541 health Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 239000007858 starting material Substances 0.000 description 2
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 238000009517 secondary packaging Methods 0.000 description 1
Classifications
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种数据源选择方法、装置、存储介质和电子设备,响应于接收业务请求,根据该业务请求,以及预先设置的业务需求类型与数据源组的关联关系确定对应的数据源组;并解析该业务请求获取对应的SQL语句;确定当前线程若处于本地事务中,则直接基于确定的数据源组的主库数据源执行SQL语句;若不处于本地事务中,则确定SQL语句是否为查询请求,如果是,基于确定的数据源组的从库数据源执行SQL语句;否则,基于确定的数据源组的主库数据源执行SQL语句。该方法能够降低了开发的复杂度,并提高了系统的可维护性和稳定性。
Description
技术领域
本公开实施例涉及一种数据源选择方法、装置、存储介质和电子设备。
背景技术
随着互联网技术的飞速发展,现代互联网系统架构面临着日益增长的用户量、数据量和请求量的挑战。在这样的背景下,高并发、高性能、高可用成为了系统设计的重要指标,确保系统能够稳定、高效地应对大规模的用户请求和数据处理。
为了满足三高要求,如何分离数据源,以及选择数据源尤为重要。
传统的多数据源分离,以及选择方案通常需要手动配置路由规则,缺乏灵活性和自动化。如在软件开发过程中,开发人员通常需要手动编写大量的代码来选择、切换数据源,这不仅增加了开发复杂度,也降低了系统的可维护性。
发明内容
有鉴于此,本申请提供一种数据源选择方法、装置、存储介质和电子设备,能够降低了开发的复杂度,并提高了系统的可维护性和稳定性。
为解决上述技术问题,本申请的技术方案是这样实现的:
在一个实施例中,提供了一种数据源选择方法,所述方法包括:
响应于接收业务请求,根据所述业务请求所请求的数据确定对应的业务需求类型;
基于预先设置的业务需求类型与数据源组的关联关系,确定的所述业务需求类型对应的数据源组;
解析所述业务请求获取对应的SQL语句;
确定执行所述SQL语句的线程是否处于本地事务中;
若处于本地事务中,则基于确定的所述数据源组的主库数据源执行所述SQL语句;
若不处于本地事务中,则确定所述SQL语句是否为查询请求,如果是,基于确定的所述数据源组的从库数据源执行所述SQL语句;否则,基于确定的所述数据源组的主库数据源执行所述SQL语句。
其中,所述方法进一步包括:
根据业务需求类型对数据源进行分组,生成多个数据源组,以及业务需求类型与数据源组的关联关系;
为生成的每个数据源组配置主库数据源和从库数据源;
其中,每个数据源组对应一个主库数据源,以及一个或多个从库数据源。
其中,若基于确定的所述数据源组的从库数据源执行所述SQL语句,且所述数据源组的从库数据源为多个,则基于预设的负载均衡原则在多个从库数据源中选择一个从库数据源执行所述SQL语句。
其中,所述方法进一步包括:
设置默认数据源组;
若基于预先配置的业务需求类型与数据源组的关联关系未确定出所述业务需求类型对应的数据源组,则确定所述业务需求类型对应的数据源组为设置的默认数据源组。
其中,所述方法进一步包括:
监测每个数据源组中的数据源的连接情况和可用情况;
响应于监测到任一所述数据源的连接情况为不可连接,或所述数据源的可用情况为不可用,将所述数据源从对应的数据源组中移除。
其中,所述方法进一步包括:
将被移除的数据源存储到移除数据源组中;
监测所述移除数据源组中的数据源的连接情况和可用情况;
响应于监测到所述移除数据源组中的任一数据源的连接情况为可连接,且可用情况为可用,将所述数据源恢复到对应的数据源组中。
在另一个实施例中,提供了一种数据源选择装置,所述装置包括:
第一确定单元,被配置为执行响应于接收业务请求,根据所述业务请求所请求的数据确定对应的业务需求类型;
第二确定单元,被配置为执行基于预先设置的业务需求类型与数据源组的关联关系,确定的所述业务需求类型对应的数据源组;
第三确定单元,被配置为执行解析所述业务请求获取对应的SQL语句;并确定执行所述SQL语句的线程是否处于本地事务中;
第一处理单元,被配置为执行若确定处于本地事务中,则基于确定的所述数据源组的主库数据源执行所述SQL语句;
第四确定单元,被配置为执行若不处于本地事务中,则确定所述SQL语句是否为查询请求;
第二处理单元,被配置为执行若确定所述SQL语句是查询请求,基于确定的所述数据源组的从库数据源执行所述SQL语句;否则,基于确定的所述数据源组的主库数据源执行所述SQL语句。
其中,所述装置进一步包括:
配置单元,被配置为执行根据业务需求类型对数据源进行分组,生成多个数据源组,以及业务需求类型与数据源组的关联关系;为生成的每个数据源组配置主库数据源和从库数据源;其中,每个数据源组对应一个主库数据源,以及一个或多个从库数据源。
在另一个实施例中,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现数据源选择方法。
在另一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现数据源选择方法。
由上面的技术方案可见,上述实施例中先通过接收到的业务请求所请求的数据确定业务需求类型,进而根据预先设置的业务需求类型和数据源组的关联关系确定该业务请求对应的数据源组,确保之后的相关执行在正确的数据源组上执行;然后,解析该业务请求获取对应的SQL语句,根据当前线程是否在事务中,确定的数据源组是否与事务对应的数据源组是否相同,该SQL语句是否为查询请求,确定使用确定数据源组中主库数据源,还是从库数据源来执行对应的SQL语句。该方案降低了开发的复杂度,并提高了系统的可维护性和稳定性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例中一种数据源选择流程示意图;
图2为本申请实施例中一种对数据源组中的数据源的监测流程示意图;
图3为本申请实施例中另一种对数据源组中的数据源的监测流程示意图;
图4为本申请实施例中数据源选择装置结构示意图;
图5为本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述目标的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其他步骤或单元。
下面以具体实施例对本发明的技术方案进行详细说明。下面几个具体实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
在用户量、数据量和请求量大量增加的应用场景中,为了满足高并发、高性能和高可用要求,相关技术中在分离数据源,以及数据源读写分离过程中通过如下方式实现:
数据库分库:通过将数据分散到多个数据库实例中,可以显著提高系统的并发处理能力和吞吐量。数据库分库可以采用垂直分库或水平分库的方式,根据业务需求和数据访问模式进行合理划分,以实现负载均衡和高效数据处理;
读写分离:在多数据源设计中,读写分离是一种常见的策略。通过将读操作和写操作分离到不同的数据源,可以平衡负载并提高整体性能。在主从复制的基础上,读请求可以被分发到从数据库进行处理,而写请求则发送到主数据库,从而实现读写负载的分离和均衡。
上述实现方案通常需要手动配置路由规则,缺乏灵活性和自动化。如在软件开发过程中,开发人员通常需要手动编写大量的代码来选择、切换数据源,这不仅增加了开发复杂度,也降低了系统的可维护性。
基于上述问题,本申请实施例中提出一种数据源选择方法,先通过接收到的业务请求所请求的数据确定业务需求类型,进而根据预先设置的业务需求类型和数据源组的关联关系确定该业务请求对应的数据源组,确保之后的相关执行在正确的数据源组上执行;然后,解析该业务请求获取对应的SQL语句,根据当前线程是否在事务中,该SQL语句是否为查询请求,确定使用确定数据源组中的主库数据源,还是从库数据源来执行对应的SQL语句。该方案降低了开发的复杂度,并提高了系统的可维护性和稳定性。
本申请实施例中在执行数据源选择之前先进行数据源组的划分,具体为:
根据业务需求类型对数据源进行分组,生成多个数据源组,以及业务需求类型与数据源组的关联关系;这里的业务需求类型也可以是业务数据库的类型,具体实现可以根据具体应用场景考虑划分数据源组的参数;
其中,每个数据源组包括一个或多个数据源;
为生成的每个数据源组配置主库数据源和从库数据源;
其中,每个数据源组对应一个主库数据源,以及一个或多个从库数据源。
根据具体应用场景和需求,还可以设置默认数据源组;用于未能确定业务需求类型,或未配置业务需求类型对应的数据源组的场景下,确定数据源组。
在具体实现时可以基于阿波罗(Apollo)配置实现:
首先,从阿波罗配置中心获取相应的数据源配置信息。阿波罗是一个分布式配置中心,用于统一管理应用程序的配置信息。
定义数据源单例对象:根据获取到的配置信息,创建数据源的单例对象。单例模式确保在整个应用程序中只有一个实例存在,这样可以避免重复创建数据源对象,节约资源。
按业务需求类型分组:将创建的数据源单例对象按照业务需求类型进行分组。这样可以方便地根据业务需求来管理和使用不同的数据源。
存放主、从库数据源信息:在每个数据源组内,存放主库数据源和从库数据源信息。主库数据源用于写操作(如插入、更新、删除),从库数据源用于读操作(如查询)。通过这样的配置提高系统的并发性能和读写分离的能力。
通过上述配置,建立了多数据源的环境,在实执行实际业务请求时,可以根据需求选择合适的数据源进行操作,以实现负载均衡、高可用性等目标。
本申请实施例中可以应用在电子购物商城系统、网银交易系统、娱乐社交系统、在线教育系统等应用场景中;
其中,在电子购物商城系统场景中划分的数据源组包括:用户组、支付组、订单组、任务组等;
在网银交易系统场景中划分的数据源组包括:用户组、支付组、任务组等;
在娱乐社交系统中划分的数据源组包括:用户组、游戏组(小游戏)、任务组等;
在在线教育系统中划分的数据源组包括用户组、订单组、任务组等。
上述应用场景,以及针对每个应用场景划分的数据源组都是一种举例,具体实现时对此不进行限制。
下面结合附图,详细给出本申请实施例中实现数据源选择的过程。
参见图1,图1为本申请实施例中一种数据源选择流程示意图。具体步骤为:
步骤101,响应于接收业务请求,根据该业务请求所请求的数据确定对应的业务需求类型。
步骤102,基于预先设置的业务需求类型与数据源组的关联关系,获取确定的业务需求类型对应的数据源组。
在步骤101中根据业务请求未能确定出业务需求类型,或确定出业务需求类型后,未能查找到对应的数据源组,均称为基于预先配置的业务需求类型与数据源组的关联关系未确定出业务需求类型对应的数据源组;
若基于预先配置的业务需求类型与数据源组的关联关系未确定出业务需求类型对应的数据源组,则确定业务需求类型对应的数据源组为设置的默认数据源组。
根据业务请求所请求的数据先确定数据源组的实现即确保后续相关执行之前已确定了正确的数据源组。这样,在后续的相关实行过程中,均会基于确定的数据源组进行相关处理。这种实现方式不仅提高了灵活性,使得开发者可以轻松地为不同的方法设定不同的数据源,还增加了代码的模块性和可读性;并且确保了系统在多数据源环境下的正确和高效运行。
步骤103,解析该业务请求获取对应的SQL语句。
针对一条业务请求可能会解析出一条SQL语句,也可能会解析出多条SQL语句;如果解析出多条SQL语句,则需要针对每条SQL语句分别执行步骤104到步骤107的过程。
步骤104,确定执行该SQL语句的线程是否处于本地事务中,如果是,执行步骤106;否则,执行步骤105。
本地事务通常指的是在一个单一的数据源对应的数据库连接上执行的一系列操作,它们需要作为一个整体提交或回滚。
本申请实施例中在确定执行该SQL语句的线程处于本地事务中时,还可以先判断本地事务对应的数据源组与当前确定的数据源组是否相同,如果是,可以直接使用本地事务对应的数据源组执行该SQL语句,这样直接使用已有连接等即可,不需要重新建立连接;如果不是,则需要切换数据源组;无论是否切换,使用的数据源组都为当前确定的数据源组;这里当前确定的数据源组为根据该业务请求所请求的数据确定数据源组;
其中,本地事务对应的数据源组为执行上一SQL语句所使用的数据源组,因此,在确定并执行SQL语句的同时,还应该记录执行SQL语句的数据源组,以便执行下一SQL语句时进行比对。
步骤105,确定该SQL语句是否为查询请求,如果是,执行步骤107;否则,执行步骤106。
步骤106,基于确定的数据源组的主库数据源执行该SQL语句。结束本流程。
步骤107,基于确定的数据源组的从库数据源执行该SQL语句。
本步骤中,若确定的数据源组的从库数据源为多个,则基于预设的负载均衡原则在多个从库数据源中选择一个从库数据源执行SQL语句。
本申请实施例中对该预设的负载均衡原则不进行限制,如可以是轮询方式、随机方式、或最近最少使用方式等。
在确定了数据源组后,系统在数据源组内部进行路由,除了查询请求之外,选择主库数据源来执行事务、SQL语句。这是为了确保事务性的操作(通常需要数据的一致性和完整性)都在主库数据源上执行。
当SQL语句执行完毕后,为了防止数据源信息的混乱和干扰,系统会清空当前线程的数据源设置,恢复数据源信息对SQL语句执行之前的状态。这样可以确保每次操作结束后,数据源的设置都回到一个已知、稳定的状态。
本申请实施例中先通过接收到的业务请求所请求的数据确定业务需求类型,进而根据预先设置的业务需求类型和数据源组的关联关系确定该业务请求对应的数据源组,确保之后的相关执行在正确的数据源组上执行;然后,解析该业务请求获取对应的SQL语句,根据当前线程是否在事务中,该SQL语句是否为查询请求,确定使用确定数据源组中的主库数据源,还是从库数据源来执行对应的SQL语句。该方案降低了开发的复杂度,并提高了系统的可维护性和稳定性。
参见图2,图2为本申请实施例中一种对数据源组中的数据源的监测流程示意图。具体步骤为:
步骤201,监测每个数据源组中的数据源的连接情况和可用情况。
步骤202,响应于监测到任一数据源的连接情况为不可连接,或数据源的可用情况为不可用,将数据源从对应的数据源组中移除。
本实施例中通过对数据源组中的每个数据源的健康情况(是否可连接,是否可用)进行监测,及时将不健康的数据源移除数据源组,能够保证不健康的数据源被使用,这样保证了系统的稳定性和可靠性,避免因为某个数据源的问题导致整个系统的故障。
参见图3,图3为本申请实施例中另一种对数据源组中的数据源的监测流程示意图。具体步骤为:
步骤301,监测每个数据源组中的数据源的连接情况和可用情况,以及移除数据源组中的数据源的连接情况和可用情况。
在具体实现时,可以通过简单的SOL查询,来确定数据源的连接情况和可用情况。
步骤302,响应于监测到任一数据源的连接情况为不可连接,或数据源的可用情况为不可用,将数据源从对应的数据源组中移除,并存储到移除数据源组中。结束本流程。
步骤303,响应于监测到移除数据源组中的任一数据源的连接情况为可连接,且可用情况为可用,将该数据源恢复到对应的数据源组中。
本实施例中通过对数据源组中的每个数据源的健康情况(是否可连接,是否可用)进行监测,及时将不健康的数据源移除数据源组,能够保证不健康的数据源被使用,这样保证了系统的稳定性和可靠性,避免因为某个数据源的问题导致整个系统的故障;同时对移除的数据源也进行监测,将由不健康变为健康的数据源再及时的重新加入数据源组,从而实现了数据源的自动恢复。
在具体实现时,可以通过组件一(druid-spring-boot-starter)对数据源组中的数据源的监测,处理,以及恢复。
本申请实施例中通过对数据源的监控检测,以及自动管理的机制,与数据源选择相结合,进一步加强了多数据源环境下的稳定性和自我修复能力。因为即使某个数据源出现问题,系统也能及时发现并作出调整,确保其他的数据源正常运作,从而保障了整个系统的稳定性和持续可用性。这也大大减少了人工介入的需要,提高了系统的自治能力和可靠性。
本申请实施例中实现的具体功能可以通过如下组件实现,但是不限于如下组件的实现:
利用组件一(druid-spring-boot-starter)提供的数据库连接池解决方案和阿波罗配置,定义并加载多个数据源,按业务需求类型将数据源分组,每个数据源组包含主库数据源和从库数据源。这些数据源由Spring容器统一加载和管理。
通过组件三(spring-boot-starter-data-jdbc)和组件五(spring-boot)提供的数据源路由方案,对多个数据源进行二次封装,支持按数据源组名或数据源名称进行路由,选择指定的数据源。
当执行具体的数据源对应的数据库的操作时,通过组件四(Mybatis)的拦截器功能,解析SQL语句,以及数据源组内的读写数据源信息,自动区分主库和从库并进行数据源切换,从而实现读写分离的功能。
在具体实现时,确定业务请求的数据源组时,可以通过组件二(spring-boot-starter-aop)实现;组件二(spring-boot-starter-aop)的切面服务会在方法执行前进行介入。切面编程是面向切面编程(AOP)的一种技术,它允许开发者定义在方法的特定点(例如执行前、执行后)执行的代码。
根据预先设定的配置策略,系统能够自动判断并选择合适的数据源进行处理,无需开发人员手动干预。
将数据源切换和选择的功能集成为一个可复用的工具插件。这意味着开发人员可以在不同的项目中重复使用该插件,无需重新编写相关代码,大大降低了开发人员的工作量,提高了整体的开发效率。
通过本发明的自动路由和工具插件,开发人员无需再编写大量的数据源切换和路由代码,从而降低了开发的复杂度。
本发明的解决方案使得数据源的管理更加集中和统一,提高了系统的可维护性和稳定性。
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
基于同样的发明构思,本申请实施例中还提供一种数据源选择装置。参见图4,图4为本申请实施例中数据源选择装置结构示意图。该装置包括:
第一确定单元401,被配置为执行响应于接收业务请求,根据所述业务请求所请求的数据确定对应的业务需求类型;
第二确定单元402,被配置为执行基于预先设置的业务需求类型与数据源组的关联关系,确定的所述业务需求类型对应的数据源组;
第三确定单元403,被配置为执行解析所述业务请求获取对应的SQL语句;并确定执行所述SQL语句的线程是否处于本地事务中;
第一处理单元404,被配置为执行若确定处于本地事务中,则基于确定的所述数据源组的主库数据源执行所述SQL语句;
第四确定单元405,被配置为执行若不处于本地事务中,则确定所述SQL语句是否为查询请求;
第二处理单元406,被配置为执行若确定所述SQL语句是查询请求,基于确定的所述数据源组的从库数据源执行所述SQL语句;否则,基于确定的所述数据源组的主库数据源执行所述SQL语句。
在另一个实施例中,所述装置进一步包括:
配置单元407,被配置为执行根据业务需求类型对数据源进行分组,生成多个数据源组,以及业务需求类型与数据源组的关联关系;为生成的每个数据源组配置主库数据源和从库数据源;其中,每个数据源组对应一个主库数据源,以及一个或多个从库数据源。
在另一实施例中,
第二处理单元406,被配置为执行若基于确定的所述数据源组的从库数据源执行所述SQL语句,且所述数据源组的从库数据源为多个,则基于预设的负载均衡原则在多个从库数据源中选择一个从库数据源执行所述SQL语句。
在另一个实施例中,
配置单元407,被配置为执行设置默认数据源组;
第二确定单元402,被配置为执行若基于预先配置的业务需求类型与数据源组的关联关系未确定出所述业务需求类型对应的数据源组,则确定所述业务需求类型对应的数据源组为设置的默认数据源组。
在另一个实施例中,该装置进一步包括:
监测单元408,被配置为执行监测每个数据源组中的数据源的连接情况和可用情况;
第三处理单元409,被配置为执行响应于监测到任一所述数据源的连接情况为不可连接,或所述数据源的可用情况为不可用,将所述数据源从对应的数据源组中移除。
在另一个实施例中,
第三处理单元409,被配置为执行将被移除的数据源存储到移除数据源组中;响应于监测到所述移除数据源组中的任一数据源的连接情况为可连接,且可用情况为可用,将所述数据源恢复到对应的数据源组中;
监测单元408,被配置为执行监测所述移除数据源组中的数据源的连接情况和可用情况;
上述实施例的单元可以集成于一体,也可以分离部署;可以合并为一个单元,也可以进一步拆分成多个子单元。
在另一个实施例中,还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时可实现数据源选择方法。
在另一个实施例中,还提供一种计算机可读存储介质,其上存储有计算机指令,指令被处理器执行时可实现数据源选择方法。
图5为本发明实施例提供的电子设备的实体结构示意图。如图5所示,该电子设备可以包括:处理器(Processor)510、通信接口(Communications Interface)520、存储器(Memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行如下方法:
响应于接收业务请求,根据业务请求所请求的数据确定对应的业务需求类型;
基于预先设置的业务需求类型与数据源组的关联关系,确定的业务需求类型对应的数据源组;
解析业务请求获取对应的SQL语句;
确定执行SQL语句的线程是否处于本地事务中;
若处于本地事务中,则基于确定的数据源组的主库数据源执行SQL语句;
若不处于本地事务中,则确定SQL语句是否为查询请求,如果是,基于确定的数据源组的从库数据源执行SQL语句;否则,基于确定的数据源组的主库数据源执行SQL语句。
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务端,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务端,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
本申请附图中的流程图和框图,示出了按照本申请公开的各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或者代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应该注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同附图中所标准的顺序发生。例如,两个连接地表示的方框实际上可以基本并行地执行,它们有时也可以按照相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或者流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本申请公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本申请中。特别地,在不脱离本申请精神和教导的情况下,本申请的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,所有这些组合和/或结合均落入本申请公开的范围。
本文中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思路,并不用于限制本申请。对于本领域的技术人员来说,可以依据本发明的思路、精神和原则,在具体实施方式及应用范围上进行改变,其所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种数据源选择方法,其特征在于,所述方法包括:
响应于接收业务请求,根据所述业务请求所请求的数据确定对应的业务需求类型;
基于预先设置的业务需求类型与数据源组的关联关系,确定的所述业务需求类型对应的数据源组;
解析所述业务请求获取对应的SQL语句;
确定执行所述SQL语句的线程是否处于本地事务中;
若处于本地事务中,则基于确定的所述数据源组的主库数据源执行所述SQL语句;
若不处于本地事务中,则确定所述SQL语句是否为查询请求,如果是,基于确定的所述数据源组的从库数据源执行所述SQL语句;否则,基于确定的所述数据源组的主库数据源执行所述SQL语句。
2.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
根据业务需求类型对数据源进行分组,生成多个数据源组,以及业务需求类型与数据源组的关联关系;
为生成的每个数据源组配置主库数据源和从库数据源;
其中,每个数据源组对应一个主库数据源,以及一个或多个从库数据源。
3.根据权利要求2所述的方法,其特征在于,若基于确定的所述数据源组的从库数据源执行所述SQL语句,且所述数据源组的从库数据源为多个,则基于预设的负载均衡原则在多个从库数据源中选择一个从库数据源执行所述SQL语句。
4.根据权利要求2所述的方法,其特征在于,所述方法进一步包括:
设置默认数据源组;
若基于预先配置的业务需求类型与数据源组的关联关系未确定出所述业务需求类型对应的数据源组,则确定所述业务需求类型对应的数据源组为设置的默认数据源组。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述方法进一步包括:
监测每个数据源组中的数据源的连接情况和可用情况;
响应于监测到任一所述数据源的连接情况为不可连接,或所述数据源的可用情况为不可用,将所述数据源从对应的数据源组中移除。
6.根据权利要求5所述的方法,其特征在于,所述方法进一步包括:
将被移除的数据源存储到移除数据源组中;
监测所述移除数据源组中的数据源的连接情况和可用情况;
响应于监测到所述移除数据源组中的任一数据源的连接情况为可连接,且可用情况为可用,将所述数据源恢复到对应的数据源组中。
7.一种数据源选择装置,其特征在于,所述装置包括:
第一确定单元,被配置为执行响应于接收业务请求,根据所述业务请求所请求的数据确定对应的业务需求类型;
第二确定单元,被配置为执行基于预先设置的业务需求类型与数据源组的关联关系,确定的所述业务需求类型对应的数据源组;
第三确定单元,被配置为执行解析所述业务请求获取对应的SQL语句;并确定执行所述SQL语句的线程是否处于本地事务中;
第一处理单元,被配置为执行若确定处于本地事务中,则基于确定的所述数据源组的主库数据源执行所述SQL语句;
第四确定单元,被配置为执行若不处于本地事务中,则确定所述SQL语句是否为查询请求;
第二处理单元,被配置为执行若确定所述SQL语句是查询请求,基于确定的所述数据源组的从库数据源执行所述SQL语句;否则,基于确定的所述数据源组的主库数据源执行所述SQL语句。
8.根据权利要求7所述的装置,其特征在于,所述装置进一步包括:
配置单元,被配置为执行根据业务需求类型对数据源进行分组,生成多个数据源组,以及业务需求类型与数据源组的关联关系;为生成的每个数据源组配置主库数据源和从库数据源;其中,每个数据源组对应一个主库数据源,以及一个或多个从库数据源。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-6任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410298538.9A CN118093630A (zh) | 2024-03-14 | 2024-03-14 | 数据源选择方法、装置、存储介质和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410298538.9A CN118093630A (zh) | 2024-03-14 | 2024-03-14 | 数据源选择方法、装置、存储介质和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118093630A true CN118093630A (zh) | 2024-05-28 |
Family
ID=91151488
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410298538.9A Pending CN118093630A (zh) | 2024-03-14 | 2024-03-14 | 数据源选择方法、装置、存储介质和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118093630A (zh) |
-
2024
- 2024-03-14 CN CN202410298538.9A patent/CN118093630A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10951491B2 (en) | Automatic microservice problem detection in enterprise applications | |
CN103534687B (zh) | 聚簇数据格网中的可扩展集中动态资源分配 | |
US9135071B2 (en) | Selecting processing techniques for a data flow task | |
US8626765B2 (en) | Processing database operation requests | |
CN108694195B (zh) | 一种分布式数据仓库的管理方法及系统 | |
CN106843745A (zh) | 容量扩展方法及装置 | |
CN109643310B (zh) | 用于数据库中数据重分布的系统和方法 | |
CN106339386B (zh) | 数据库弹性调度方法以及装置 | |
CN109063005B (zh) | 一种数据迁移方法及系统、存储介质、电子设备 | |
CN103310460A (zh) | 图像特征提取的方法及系统 | |
CN106897123B (zh) | 数据库操作方法及装置 | |
CN106713396A (zh) | 服务器调度方法和系统 | |
JP6975153B2 (ja) | データ格納サービス処理方法及び装置 | |
US20240061712A1 (en) | Method, apparatus, and system for creating training task on ai training platform, and medium | |
CN114816728A (zh) | 一种云环境MongoDB数据库集群实例节点弹性伸缩方法和系统 | |
CN109491834A (zh) | 一种应用于数据库的数据恢复方法及装置 | |
CN104182295A (zh) | 一种数据备份方法及装置 | |
CN107992354A (zh) | 用于降低内存负载的方法以及装置 | |
US20180052759A1 (en) | Performance metric contextualization in a distributed computing environment | |
CN112860412B (zh) | 业务数据处理方法、装置、电子设备及存储介质 | |
JP2023553220A (ja) | マルチインスタンスプロセスのためのプロセスマイニング | |
Gopalakrishna et al. | Untangling cluster management with Helix | |
CN112506869A (zh) | 文件处理方法、装置及系统 | |
CN116974874A (zh) | 数据库的测试方法、装置、电子设备及可读存储介质 | |
CN118093630A (zh) | 数据源选择方法、装置、存储介质和电子设备 |
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 |