CN114647697A - 访问数据库的方法、装置、计算设备和存储介质 - Google Patents

访问数据库的方法、装置、计算设备和存储介质 Download PDF

Info

Publication number
CN114647697A
CN114647697A CN202011507449.9A CN202011507449A CN114647697A CN 114647697 A CN114647697 A CN 114647697A CN 202011507449 A CN202011507449 A CN 202011507449A CN 114647697 A CN114647697 A CN 114647697A
Authority
CN
China
Prior art keywords
database
service request
fragmentation factor
middleware
accessing
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
Application number
CN202011507449.9A
Other languages
English (en)
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.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Cloud Computing Technologies 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 Huawei Cloud Computing Technologies Co Ltd filed Critical Huawei Cloud Computing Technologies Co Ltd
Priority to CN202011507449.9A priority Critical patent/CN114647697A/zh
Publication of CN114647697A publication Critical patent/CN114647697A/zh
Pending legal-status Critical Current

Links

Images

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/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/278Data partitioning, e.g. horizontal or vertical partitioning

Landscapes

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

Abstract

本申请提供了一种访问数据库的方法、装置、计算设备和存储介质,属于大数据技术领域。该方法包括:接收业务请求,获取该业务请求对应的目标分片因子。基于该目标分片因子,访问该业务请求对应的数据库。采用本申请,可以在数据库分库分表后,减少对业务的侵入。

Description

访问数据库的方法、装置、计算设备和存储介质
技术领域
本申请涉及大数据技术领域,特别涉及一种访问数据库的方法、装置、计算设备和存储介质。
背景技术
随着大数据技术的发展,数据库广泛应用于各种在线交易平台以及社交平台等互联网平台中,数据库存储互联网平台的数据记录,互联网平台的用户可以查询数据库中的数据记录。随着互联网业务的发展,互联网平台上的用户量越来越大,访问频率越来越高,导致高并发的访问数据库的情况越来越多。
相关技术中,为了实现高并发的访问数据库,互联网平台的业务层使用分片因子,将数据库拆分为多个数据库和/或多个数据表。业务层在访问数据库时,携带分片因子这个字段,实现数据库的访问。
由于业务层在访问数据库时,需要携带分片因子这个字段,会导致业务侵入比较严重。
发明内容
本申请提供了一种访问数据库的方法、装置、计算设备和存储介质,用以在对数据库分库分表后,降低对业务的侵入。
第一方面,本申请提供了一种访问数据库的方法,该方法包括:
接收业务请求,获取该业务请求对应的目标分片因子,基于目标分片因子,访问该业务请求对应的数据库。
本申请所示的方案,访问数据库的方法可以由访问数据库的装置执行,访问数据库的装置简称为访问装置。访问装置接收到业务请求,获取该业务请求对应的目标分片因子。然后使用目标分片因子,访问业务请求对应的数据库。这样,是访问装置获取业务请求对应的分片因子,而不是由业务层在业务请求中携带分片因子,所以业务层不需要知晓业务请求对应的分片因子,因此,在对数据库分库分表后,对业务的侵入比较低。
在一种可能的实现方式中,该方法还包括:将获取的目标分片因子,添加至业务请求中。这样,可以使得业务请求符合规则。
在一种可能的实现方式中,业务请求中不包括目标分片因子。这样,在业务请求中不包括目标分片因子时,才添加目标分片因子,可以减少获取分片因子的处理量。
在一种可能的实现方式中,业务请求为用于增加数据记录、删除数据记录、修改数据记录或者查询数据记录的请求。
在一种可能的实现方式中,获取业务请求对应的目标分片因子,包括:在存储的分片因子中,获取业务请求对应的目标分片因子。
本申请所示的方案,访问装置可以存储有分片因子,在存储的分片因子中,获取到业务请求对应的目标分片因子。这样,不需要访问数据库就可以获取到目标分片因子,所以可以提升获取分片因子的效率。
在一种可能的实现方式中,获取业务请求对应的目标分片因子,包括:在与业务请求对应的数据记录存在关联关系的数据记录中,获取业务请求对应的目标分片因子。
本申请所示的方案,访问装置使用业务请求,确定与业务请求对应的数据记录存在关联关系的数据记录,在该数据记录中,获取业务请求对应的目标分片因子。这样,在访问装置不存储分片因子时,也可以获取到业务请求对应的目标分片因子。
在一种可能的实现方式中,基于目标分片因子,访问业务请求对应的数据库,包括:通过主数据库中间件基于目标分片因子,访问业务请求对应的数据库。
本申请所示的方案,访问装置包括主数据库中间件,访问装置可以将业务请求提交给主数据库中间件,由主数据库中间件基于目标分片因子,访问业务请求对应的数据库。使用数据库中间件可以使得数据库与业务层隔离。
在一种可能的实现方式中,通过主数据库中间件基于目标分片因子,访问业务请求对应的数据库,包括:检测到主数据库中间件可用的情况下,通过主数据库中间件基于目标分片因子,访问业务请求对应的数据库;该方法还包括:检测到主数据库中间件不可用的情况下,通过备数据库中间件基于目标分片因子,访问业务请求对应的数据库。
本申请所示的方案,访问装置可以判断主数据库中间件是否可用,访问装置在确定主数据库中间件可用的情况下,可以通过主数据库中间件基于目标分片因子,访问业务请求对应的数据库。访问装置在确定主数据库中间件不可用的情况下,可以通过备数据库中间件基于目标分片因子,访问业务请求对应的数据库。这样,可以避免主数据库中间件异常而导致的业务中断。
在一种可能的实现方式中,通过备数据库中间件基于目标分片因子,访问业务请求对应的数据库之前,还包括:控制备数据库中间件升级为主数据库中间件。这样,可以通知备数据库中间件执行业务请求。
第二方面,本申请提供了一种数据库系统,该系统包括处理节点和存储节点;其中,处理节点用于实现第一方面所述的访问数据库的方法,存储节点设置有数据库。
第三方面,本申请提供了一种访问数据库的装置,该装置包括一个或多个模块,该一个或多个模块用于实现第一方面所述的访问数据库的方法。
第四方面,本申请提供了一种访问数据库的计算设备,计算设备包括处理器和存储器,其中,存储器中存储有计算机指令,处理器执行存储器中的计算机指令,以实现第一方面及其可能的实现方式的方法。
第五方面,提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,当计算机可读存储介质中的计算机指令被计算设备执行时,使得计算设备执行第一方面及其可能的实现方式的方法,或者使得计算设备实现上述第三方面及其可能的实现方式的装置的功能。
第六方面,提供了一种包含指令的计算机程序产品,当其在计算设备上运行时,使得计算设备执行上述第一方面及其可能的实现方式的方法,或者使得计算设备实现上述第三方面及其可能的实现方式的装置的功能。
附图说明
图1是本申请一个示例性实施例提供的一种数据库系统的示意图;
图2是本申请一个示例性实施例提供的一种数据库系统的示意图;
图3是本申请一个示例性实施例提供的计算设备的结构示意图;
图4是本申请一个示例性实施例提供的分库分表的流程示意图;
图5是本申请一个示例性实施例提供的分库分表的逻辑示意图;
图6是本申请一个示例性实施例提供的访问数据库的方法的流程示意图;
图7是本申请一个示例性实施例提供的主数据库中间件与备数据库中间件的切换示意图;
图8是本申请一个示例性实施例提供的访问数据库的装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步的详细描述。
为了便于对本申请实施例的理解,下面首先介绍所涉及到的名词的概念:
1、分库分表,可以包括水平分库分表,水平分库分表指将原数据库中单张数据表的数据记录切分到多个数据库的数据表上,不同数据库中数据表的数据记录不相同,所有数据库中数据表的数据记录组成原数据表中的数据记录。不同的数据库可以位于不同的存储节点上。当然在存储节点的处理能力足够支撑多个数据库,多个数据库也可以位于一个存储节点上。此处拆分后的数据库可以称为是分库,拆分后的数据表可以称为是分表。
2、分片因子,是用于对数据库进行分库分表使用的字段,也可以称为是分片字段、拆分键等。例如,使用用户标识对数据库进行分库分表,分片因子为用户标识。
3、数据复制服务(data replication service,DRS),为一种易用、稳定和高效,用于数据库在线迁移和数据库实时同步的服务。DRS围绕数据库,降低了数据库之间数据流通的复杂性,有效地减少数据传输的成本。
4、分布式数据库中间件(distributed database middleware,DDM),是解决数据库容量、性能瓶颈和分布式扩展问题的中间件服务,后续可以简称为数据库中间件。数据库中间件提供分库分表、读写分离和弹性扩容等能力,应对海量数据的高并发访问场景,有效提升数据库读写性能。
随着大数据技术的发展,数据库广泛应用于各种在线交易平台以及社交平台等互联网平台中,数据库存储互联网平台产生的数据记录,互联网平台的用户可以查询数据库中的数据记录。随着互联网业务的发展,互联网平台上的用户量越来越大,访问频率越来越高,导致高并发的访问数据库的情况越来越多。如何做到既不对现有业务流程造成侵入,又能实现高并发的数据库访问,是每个互联网平台在发展壮大过程中不得不面临的问题。为了实现高并发的访问数据库,互联网平台的业务层使用分片因子,将数据库拆分为多个数据库和多个数据表。业务层在访问数据库时,携带分片因子这个字段,实现数据库的访问。由于业务层在访问数据库时,需要携带分片因子这个字段,会导致业务侵入比较严重,所以需要提供一种对业务侵入比较少的数据库访问方法。
基于上述问题,本申请实施例提供了一种访问数据库的方法,该方法可以由访问数据库的装置执行,后续访问数据库的装置可以简称为访问装置。访问装置既可以是一个硬件装置,硬件装置如服务器等计算设备,也可以是一个软件装置,如可以是运行在硬件装置上的一套软件程序。示例性的,访问装置在逻辑上也可以是由各个部分构成的装置,如访问装置可以包括适配模块和数据库中间件。访问装置中的各个组成部分可以分别部署在不同的系统或者处理节点中。
本申请实施例中,提供了一种数据库系统,如图1所示,该数据库系统包括处理节点和存储节点,处理节点与存储节点之间建立有通信连接。处理节点可以是上述提到的硬件装置,也可以是安装有上述软件装置的硬件装置。存储节点可以设置有数据库,提供数据存储服务。处理节点可以访问存储节点上的数据库,示例性的,处理节点和存储节点均可以是服务器。
示例性的,如图2所示,处理节点从逻辑上可以分为适配模块和数据库中间件。适配模块与业务层中的业务模块建立有通信连接,业务模块是用于处理业务逻辑的模块。适配模块接收业务模块发送的业务请求,获取业务请求对应的分片因子。数据库中间件用于基于分片因子,访问业务请求对应的数据库。另外数据库中间件还用于完成数据库的管理。数据库用于存储业务的数据记录。在另一示例性的方案中,适配模块和数据库中间件可以位于不同的处理节点上。
在本申请实施例中,数据库可以是一个或多个,不同的数据库可以位于不同的存储节点,数据库为关系型数据库。
本申请实施例中还提供了一种访问数据库的计算设备。图3示例性的提供了计算设备300的一种可能的架构图。
计算设备300包括存储器301、处理器302、通信接口303以及总线304。其中,存储器301、处理器302、通信接口303通过总线304实现彼此之间的通信连接。
存储器301可以是只读存储器(read only memory,ROM),静态存储设备,动态存储设备或者随机存储器(random access memory,RAM)。存储器301可以存储程序,当存储器301中存储的程序被处理器302执行时,处理器302和通信接口303用于执行访问数据库的方法。
处理器302可以采用通用的中央处理器(central processing unit,CPU),微处理器,应用专用集成电路(application specific integrated circuit,ASIC),图形处理器(graphics processing unit,GPU)或者一个或多个集成电路。
处理器302还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本申请的访问数据库的装置的部分或全部功能可以通过处理器302中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器302还可以是通用处理器、数字信号处理器(digital signal processing,DSP)、专用集成电路、现成可编程门阵列(fieldprogrammable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器301,处理器302读取存储器301中的信息,结合其硬件完成本申请的访问数据库的装置的部分功能。
通信接口303使用例如但不限于收发器一类的收发模块,来实现计算设备300与其他设备或通信网络之间的通信。例如,可以通过通信接口303接收业务请求。
总线304可包括在计算设备300各个部件(例如,存储器301、处理器302、通信接口303)之间传送信息的通路。
在计算设备300为多个时,上述每个计算设备300间通过通信网络建立通信通路。
在描述访问数据库的方法之前,介绍对原数据库进行分库分表的处理,处理流程见图4:
步骤401,访问装置获取分片策略。
在本实施例中,在业务的数据记录增多的情况下,需要对业务的数据库进行分库分表时,首先用户可以判断数据库的数据表中每条数据记录本身是否包括分片因子。如果数据库的数据表中每条数据记录本身包括分片因子的字段,用户可以在数据表中选定分片因子的字段,后续访问装置使用数据记录本身包括的分片因子对数据库进行分库分表。如果数据表中每条数据记录本身不包括分片因子的字段,则用户可以输入该数据表的分片因子,即在每条数据记录中增加分片因子,后续访问装置使用增加的分片因子对数据库进行分库分表。
示例性的,用户使用申请的账户和密码登录数据库中间件。在登录数据库中间件后,用户可以通过数据库中间件提供的交互界面,输入分片策略。分片策略包括用户输入的分片因子的字段、分库分表后每个数据库中各种数据表的数目以及分库分表规则,每个数据库中各种数据表的数目可以相同也可以不相同,分库分表规则为进行分库分表时如何使用分片因子拆分数据库。例如,分片因子为用户标识,分库分表后每个数据库中各种数据表的数目为2,分库分表规则为:对用户标识计算消息摘要,取计算消息摘要后的前x位或者后x位进行分库分表,x为正整数,示例性的,计算消息摘要可以使用消息摘要算法(messagedigest algorithm,MD5)等。此处分库分表后每个数据库中各种数据表的数目可以是基于业务的数据记录量估计,如数据记录量越多,分库分表后每个数据库中各种数据表的数目可以越大,但是不能超过该数据库所在存储节点的最大容量。另外,在分片策略中,每个数据库中各种数据表的数目是一个可选的内容,在分片策略不包括时,访问装置可以获取预设的每个数据库中各种数据表的数目。
本申请实施例应用于订单业务系统中,确定分片因子的过程为:订单业务系统的数据库包括用户订单表、订购关系表等多种数据表,进行分库分表的数据表可以包括用户订单表、订购关系表。用户订单表中每条数据记录包括但不限于如下内容:订单标识、用户标识、下单时间、订单状态(订单状态可以包括成功或无效等)和订单价格。订购关系表中每条数据记录包括但不限于如下内容:订购关系标识、生成该订购关系的订单标识(生成该订购关系的订单标识与用户订单表中的订单标识一致)、订购时长和订购关系状态(订购关系状态可以包括持续和无效等)。用户订单表包括用户标识,由于用户标识唯一,所以可以用户标识作为用户订单表的分片因子。而订购关系表包括的任一字段均不能作为分片因子,所以需要在订购关系表中添加分片因子。示例性的,用户可以在分片策略中输入用户标识的字段,访问装置可以使用订购关系表中生成订购关系的订单标识,在用户订单表中查找每个订单标识对应的用户标识,将每个订单标识对应的用户标识,添加至每个订单标识所属的数据记录中。这样,订购关系表中每条数据记录包括但不限于如下内容:订购关系标识、生成该订购关系的订单标识、订购时长、订购关系状态和用户标识。用户标识可以作为订购关系表的分片因子。
在本申请实施例中,对数据库的数据表进行分库分表时,是进行水平分库分表。
此处需要说明的,上述是以用户输入分片因子的字段为例,当然也可以是数据库中间件分析数据表,获得分片因子的字段。在选取分片因子的字段时,可以选取将数据库中的数据记录均匀的分布在多个数据表中的字段。
步骤402,访问装置基于分片策略,对数据库进行分库分表。
在本实施例中,用户还可以通过数据库中间件提供的交互界面,创建逻辑库,以及该逻辑库下每种数据表的逻辑表。逻辑库用于数据库中间件管理数据库,逻辑库与数据库关联,可以记录数据库的访问地址。每种数据表的逻辑表与该数据表分库分表后的数据表关联。例如,数据表包括用户订单表和订购关系表,用户订单表对应一个逻辑表,订购关系表对应一个逻辑表。逻辑库和逻辑表均与分片策略对应。对于业务层并不知晓实际的数据库,而是知晓逻辑库和逻辑表,所以数据库中间件会将逻辑表的标识和逻辑库的标识通知给业务层。
然后用户还可以新建N个数据库,N可以为2的n次方,n为非负整数,这样,对于某个数据库的数据记录,一半数据记录移到新的数据库,剩余可以不移动。N个数据库用于存储原数据库中的数据记录,此处原数据库指进行分库分表的数据库,N个数据库可以位于不同的存储节点上,当然在存储节点的处理能力足够大,单个存储节点上也可以设置多个数据库。然后用户通过数据库中间件提供的交互界面将N个数据库的访问地址导入到数据库中间件,数据库中间件将N个数据库与逻辑库关联,逻辑库记录关联的数据库的访问地址。
然后数据库中间件按照分片策略,将原数据库中的数据记录迁移至新的数据库中,此处原数据库中可以保留部分数据记录,也可以不保留数据记录。示例性的,数据库系统还包括数据复制服务,数据库中间件调用数据复制服务的接口,将原数据库中的数据记录,按照分片因子和分片策略,迁移至N个数据库中。
例如,将原来的用户订单表中的数据记录迁移至新建的数据库中的用户订单表,并且将原来的订购关系表中的数据记录迁移至新建的数据库中的订购关系表中。
可选的,数据库中间件在对数据记录进行迁移时,可以获取每条数据记录中的查询字段和分片因子的字段。对于任一数据记录,该数据记录的查询字段为该数据记录中除分片因子的字段之外的唯一标识,如数据记录为订购关系表中的数据记录,查询字段为订单标识。数据库中间件建立每条数据记录中查询字段与分片因子的字段的映射关系。数据库中间件将该映射关系,存储至适配模块可以访问的区域,如存储至适配模块所在的处理节点的内存中,或者存储至适配模块所能访问的数据库中等。
这样,在对原数据库分库分表后,各个数据库(数据库也可以称为是分库)包括的数据记录不相同,所有分库中数据表包括的数据记录的总和为原数据库包括的数据记录。
为了更好地理解本申请实施例,针对步骤402,还提供了分库分表的示意图:
如图5所示,用户通过数据库中间件提供的交互界面创建逻辑库、逻辑表和分片策略。然后用户将新建的数据库与数据库中间件关联。数据库中间件使用分片因子和分片策略,将原数据库中数据表的数据记录迁移至新建的N个数据库的数据表中,原数据库中可以保留部分数据记录,也可以不保留数据记录。
另外,随着业务的发展,业务的数据记录越来越多,新建的数据库可能需要进行扩展,此时可以通过数据库中间件对新建的数据库进行水平扩容。此处水平扩容可以包括增加数据库,在数据库中增加数据表等。
下面将结合图6对本申请实施例提供的访问数据库的方法进行说明,该方法可以由访问装置执行。如图6所示,该方法的处理流程如下:
步骤601,访问装置接收业务请求。
其中,业务请求可以是任何一种应用的业务请求。
在本实施例中,业务模块在检测到有业务处理时,可以将业务代码生成业务请求。业务模块向访问装置发送该业务请求。访问装置接收业务模块发送的业务请求。
可选的,业务请求还可以包括逻辑库的标识和逻辑表的标识,逻辑库的标识用于指示该业务请求所要访问的数据库,逻辑表的标识用于指示该业务请求所要访问何种数据表。例如,业务请求用于访问用户订单表,逻辑表的标识为用户订单表对应的逻辑表的标识。
可选的,业务请求使用结构化查询语言(structured query language,SQL)语句表示。
步骤602,访问装置获取业务请求对应的目标分片因子。
在本实施例中,访问装置在接收到业务请求后,可以判断该业务请求中是否包括分片因子。在确定业务请求不包括分片因子的情况下,访问装置获取该业务请求对应的分片因子,后续该分片因子可以称为是目标分片因子。
步骤603,访问装置基于目标分片因子,访问业务请求对应的数据库。
在本实施例中,访问装置使用业务请求中逻辑库的标识,确定业务请求对应的逻辑库,并使用业务请求中逻辑表的标识,确定业务请求所要访问何种数据表。然后访问装置使用目标分片因子、分库分表后每个数据库中数据表的数目和分库分表规则,在逻辑库关联的数据库中,确定业务请求对应的数据库和数据表。例如,业务请求所要访问订购关系表,原数据库进行分库分表后,被分为两个数据库,每个数据库包括两个关于订购关系表的数据表。分库分表规则为:数据库为目标分片因子%4/2,数据表为目标分片因子%4,此处“%”表示取余,“/”表示取整。
然后访问装置访问业务请求对应的数据库中的数据表,执行业务请求,获得执行结果。访问装置将执行结果返回给业务模块。
这样,本申请实施例中,是访问装置获取业务请求对应的分片因子,而不是业务层在业务请求中携带分片因子,所以业务模块不需要知晓业务请求对应的分片因子,因此,在对数据库分库分表后,对业务的侵入比较低。
如下针对图6的流程进行进一步说明:
在一种可能的实现方式中,在步骤603之后,访问装置将目标分片因子添加至业务请求中,访问装置使用添加有目标分片因子的业务请求,访问业务请求对应的数据库。示例性的,访问装置中的适配模块,将添加有目标分片因子的业务请求,发送至数据库中间件,数据库中间件使用该业务请求中的目标分片因子,访问数据库。
在一种可能的实现方式中,业务请求为用于增加数据记录、删除数据记录、修改数据记录或者查询数据记录的请求。
1、在业务请求为增加数据记录的请求的情况下,业务请求包括所要增加的数据记录,访问装置判断该数据记录中是否包括分片因子。在数据记录不包括分片因子的情况下,访问装置确定业务请求中未包括分片因子。访问装置确定数据记录中的查询字段,数据记录的查询字段为在该数据记录存储至数据库后,可以用于查询该数据记录的字段,如数据记录为订购关系表中的数据记录,查询字段为订单标识。
2、在业务请求为删除数据记录、修改数据记录或者查询数据记录的请求的情况下,该业务请求包括所要管理的数据记录的唯一标识,该唯一标识可以称为是查询字段,该查询字段在一种数据表中可以唯一确定一条数据记录,如数据记录为订购关系表中的数据记录,查询字段为订单标识。访问装置判断该业务请求中是否包括分片因子,示例性的,访问装置可以判断业务请求的哪里(where)条件字段中是否包括分片因子,在确定where条件字段中不包括分片因子时,访问装置可以确定业务请求中不包括分片因子。
针对上述1和2,访问装置确定出查询字段后,访问装置在存储的分片因子中,使用该查询字段获取业务请求对应的目标分片因子。示例性的,访问装置的内存中缓存分片因子的字段与查询字段的映射关系,访问装置可以在该映射关系中,获取到数据记录中的查询字段对应的分片因子的字段,确定为业务请求对应的目标分片因子。示例性的,专门设置有数据库存储分片因子与查询字段的映射关系,访问装置可以访问该数据库,在分片因子与查询字段的映射关系中,获取到数据记录中的查询字段对应的分片因子的字段,确定为业务请求对应的目标分片因子。
或者,访问装置确定数据记录中的查询字段后,访问装置使用该查询字段,在数据库中查询该查询字段所属的数据记录,即查询与业务请求对应的数据记录存在关联关系的数据记录。访问装置在存在关联关系的数据记录中,获取该数据记录的分片因子的字段,确定为业务请求对应的目标分片因子。例如,业务请求对应的数据记录为订购关系表中的数据记录,访问装置可以使用数据记录中的订单标识,在用户订单表中查找到订单标识所属的数据记录中的用户标识,确定为业务请求对应的目标分片因子。
针对1,访问装置使用目标分片因子,确定增加的数据记录所要存储至的数据库和数据表。访问装置将增加的数据记录,添加至所要存储至的数据库和数据表。这样,在业务模块不知晓分片因子的情况下,就能新增数据记录,减少对业务的侵入。
针对2,访问装置使用目标分片因子,确定业务请求对应的数据记录所在的数据库和数据表。访问装置在该数据库和数据表中,对业务请求对应的数据记录执行相应的处理。这样,在业务模块不知晓分片因子的情况下,就能对数据记录进行修改、删除或者查询等,减少对业务的侵入。
另外,访问装置可以使用业务请求中的逻辑表的标识,确定业务请求中是否包括分片因子。示例性的,对于某些数据表中的数据记录本身有分片因子,大部分情况下是使用分片因子对数据记录进行操作,业务请求中通常会包括分片因子,而对于某些数据表中的数据记录本身不包括分片因子,业务层不知晓分片因子,大部分情况下不会使用分片因子对数据记录进行操作,业务请求中通常不会包括分片因子。例如,逻辑表的标识指示订购关系表的逻辑表,则业务请求中不包括分片因子,逻辑表的标识指示用户订单表,则业务请求中有可能包括分片因子,再按照前文中的方式判断业务请求中是否包括分片因子。
另外,访问装置确定业务请求包括分片因子的情况下,访问装置可以直接使用业务请求中的分片因子访问数据库。
在一种可能的实现方式中,为了使得业务模块可以随时访问数据库,如图7所示,访问装置包括主数据库中间件和备数据库中间件,主数据库中间件与备数据库中间件建立有通信连接。适配模块、主数据库中间件和备数据库中间件可以分别位于不相同的处理节点上,如主数据库中间件位于处理节点1,备数据库中间件位于处理节点2,适配模块位于处理节点3。业务模块与主数据库中间件建立有通信连接,业务模块与备数据库中间件建立有通信连接。主数据库中间件和备数据库中间件均能连接数据库。备数据库中间件和主数据库中间件采用相同的分片策略,以保证主数据库中间件和备数据库中间件对数据库分库分表后的结果一致。
在存在备数据库中间件的情况下,步骤603的处理为:检测到主数据库中间件可用的情况下,通过主数据库中间件基于目标分片因子,访问业务请求对应的数据库;检测到主数据库中间件不可用的情况下,通过备数据库中间件基于目标分片因子,访问业务请求对应的数据库。
在本实施例中,检测主数据库中间件是否可用的方式多种多样,此处示例性的给出两种可行的方式,方式一,适配模块与主数据库中间件建立有心跳连接,适配模块周期性向主数据库中间件发送心跳报文。主数据库中间件接收到适配模块发送的心跳报文后,向适配模块发送反馈报文。适配模块每个周期均接收到主数据库中间件返回的反馈报文,确定主数据库中间件可用,适配模块可以向主数据库中间件发送业务请求,由主数据库中间件访问业务请求对应的数据库,执行业务请求。适配模块连续目标数目个周期未接收到主数据库中间件返回的反馈报文,确定主数据库中间件不可用,该目标数目也预设,如目标数目为2等。方式二,适配模块在向主数据库中间件发送业务请求后,在预设时长内未接收到主数据库中间件返回的执行结果,确定主数据库中间件不可用。该预设时长可以预设,是一个执行业务请求所用时长的经验值。
适配模块确定主数据库中间件不可用后,适配模块可以向备数据库中间件发送业务请求,由备数据库中间件访问数据库,执行业务请求。
这样,由于在主数据库中间件不可用的情况下,使用备数据库中间件,所以可以避免单数据库中间件异常而导致的业务中断。
可选的,在检测到主数据库中间件不可用的情况下,访问装置控制备数据库中间件升级为主数据库中间件。示例性的,适配模块向备数据库中间件发送升级通知。备数据库中间件接收到升级通知后,如果未与数据库建立连接,则与数据库建立连接,此时备数据库中间件升级为主数据库中间件。
此处需要说明的是,在主数据库中间件可用的情况下,备数据库中间件的数据源进行懒加载,备数据库中间件的数据源定义连接到数据库的一条路径,数据源中并无真正的数据,仅仅记录的是连接至的数据库,以及如何与数据库进行连接。由于备数据库中间件的数据源未加载,所以此时备数据库中间件未真正创建与数据库的连接,可以有效地提高服务启动速度,并避免消耗数据库的连接。此处的懒加载可以采用包装(wrapper)方式。在启用备数据库中间件时,备数据库中间件基于数据源连接到数据库。
在另一种可能的实现方式中,数据库系统提供了维护界面,维护界面中设置有切换数据库中间件的选项,技术人员可以在维护界面中,选择备数据库中间件作为当前的数据库中间件,备数据库中间件会接收到切换请求。备数据库中间件与数据库建立连接,并且向适配模块发送启用通知。适配模块接收到启用通知后,适配模块向备数据库中间件发送业务请求。这样,也可以完成主数据库中间件与备数据库中间件的切换。
可选的,上述提到的主数据库中间件与备数据库中间件可以是热备、冷备、双活等高可用(high available,HA)中的任一种。
其中,在本申请实施例中,HA指在主数据库中间件不可用的情况下,如何缩短业务中断的时间。
在本申请实施例中,热备指:仅有主数据库中间件承担业务,备数据库中间件实时对主数据库中间件的处理请求进行备份,在主数据库中间件不可用时,备数据库中间件可以直接接管发往主数据库中间件的业务请求,业务不会中断。
冷备指:仅有主数据库中间件承担业务,备数据库中间件不对主数据库中间件的处理请求进行备份,在主数据库中间件不可用时,备数据库中间件启动接管发往主数据库中间件的业务请求,业务会中断。
双活指:主数据库中间件与备数据库中间件均承担业务请求,主数据库中间件与备数据库中间件互为备份,对对方执行的处理请求进行实时备份。在主数据库中间件不可用时,备数据库中间件可以直接接管发往主数据库中间件的业务请求,业务不会中断。
针对上述描述的热备、冷备、双活,示例性的提供了备数据库中间件接管业务的过程:
备数据库中间件周期性向主数据库中间件发送心跳报文。主数据库中间件接收到备数据库中间件发送的心跳报文后,会向备数据库中间件发送应答报文。备数据库中间件在目标数目个周期未接收到主数据库中间件返回的应答报文,确定主数据库中间件不可用,向适配模块发送通知消息,通知适配模块主数据库中间件不可用,并且备数据库中间件与数据库创建连接。适配模块将发往主数据库中间件的业务请求,发送至备数据库中间件。
在本申请实施例中,如果存在跨数据库的统计类查询,可由数据库中间件访问各数据库获得统计结果。或者,数据库系统连接数据分析系统,数据分析系统访问各数据库获得统计结果,而不经过数据库中间件。
本申请实施例中,在使用用户标识作为分片因子时,针对同一个数据表,每个用户标识下的数据记录位于一个数据库。这样,针对某个用户标识的数据记录的增加、删除、修改和查询限定在同一个数据库内,不存在跨数据库操作带来的性能损耗,该性能损耗包括时延损耗、处理资源损耗等。
本申请实施例中,在业务请求不包括分片因子的情况下,增加了分片因子,使用分片因子访问数据库,业务层不需要知晓分片因子,所以避免对业务造成侵入。
另外,在主数据库中间件不可用时,支持使用备数据库中间件,避免数据库中间件异常导致业务中断。
图8是本申请实施例提供的访问数据库的装置的结构图。该装置可以通过软件、硬件或者两者的结合实现成为装置中的部分或者全部。本申请实施例提供的装置可以实现本申请实施例图6所述的流程,该装置包括:接收模块810、获取模块820和访问模块830,其中:
接收模块810,用于接收业务请求,具体可以用于实现步骤601的接收功能以及执行步骤601包含的隐含步骤;
获取模块820,用于获取所述业务请求对应的目标分片因子,具体可以用于实现步骤602的获取功能以及执行步骤602包含的隐含步骤;
访问模块830,用于基于所述目标分片因子,访问所述业务请求对应的数据库,具体可以用于实现步骤603的访问功能以及执行步骤603包含的隐含步骤。
在一种可能的实现方式中,所述访问模块830,还用于:
将获取的目标分片因子,添加至所述业务请求中。
在一种可能的实现方式中,所述业务请求中不包括所述目标分片因子。
在一种可能的实现方式中,所述业务请求为用于增加数据记录、删除数据记录、修改数据记录或者查询数据记录的请求。
在一种可能的实现方式中,所述获取模块820,用于:
在存储的分片因子中,获取所述业务请求对应的目标分片因子。
在一种可能的实现方式中,所述获取模块820,用于:
在与所述业务请求对应的数据记录存在关联关系的数据记录中,获取所述业务请求对应的目标分片因子。
在一种可能的实现方式中,所述访问模块830,用于:
通过主数据库中间件基于所述目标分片因子,访问所述业务请求对应的数据库。
在一种可能的实现方式中,所述访问模块830,用于:
检测到所述主数据库中间件可用的情况下,通过主数据库中间件基于所述目标分片因子,访问所述业务请求对应的数据库;
所述访问模块830,还用于:
检测到所述主数据库中间件不可用的情况下,通过备数据库中间件基于所述目标分片因子,访问所述业务请求对应的数据库。
在一种可能的实现方式中,所述访问模块830,还用于:
通过备数据库中间件基于所述目标分片因子,访问所述业务请求对应的数据库之前,控制所述备数据库中间件升级为主数据库中间件。
本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时也可以有另外的划分方式,另外,在本申请各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成为一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
该集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以是个人计算机,手机,或者网络设备等)或处理器(processor)执行本申请各个实施例该方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现,当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令,在服务器或终端上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴光缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是服务器或终端能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(如软盘、硬盘和磁带等),也可以是光介质(如数字视盘(digital video disk,DVD)等),或者半导体介质(如固态硬盘等)。

Claims (21)

1.一种访问数据库的方法,其特征在于,所述方法包括:
接收业务请求;
获取所述业务请求对应的目标分片因子;
基于所述目标分片因子,访问所述业务请求对应的数据库。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将获取的目标分片因子,添加至所述业务请求中。
3.根据权利要求1或2所述的方法,其特征在于,所述业务请求中不包括所述目标分片因子。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述业务请求为用于增加数据记录、删除数据记录、修改数据记录或者查询数据记录的请求。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述获取所述业务请求对应的目标分片因子,包括:
在存储的分片因子中,获取所述业务请求对应的目标分片因子。
6.根据权利要求1至4任一项所述的方法,其特征在于,所述获取所述业务请求对应的目标分片因子,包括:
在与所述业务请求对应的数据记录存在关联关系的数据记录中,获取所述业务请求对应的目标分片因子。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述基于所述目标分片因子,访问所述业务请求对应的数据库,包括:
通过主数据库中间件基于所述目标分片因子,访问所述业务请求对应的数据库。
8.根据权利要求7所述的方法,其特征在于,所述通过主数据库中间件基于所述目标分片因子,访问所述业务请求对应的数据库,包括:
检测到所述主数据库中间件可用的情况下,通过主数据库中间件基于所述目标分片因子,访问所述业务请求对应的数据库;
所述方法还包括:
检测到所述主数据库中间件不可用的情况下,通过备数据库中间件基于所述目标分片因子,访问所述业务请求对应的数据库。
9.根据权利要求8所述的方法,其特征在于,所述通过备数据库中间件基于所述目标分片因子,访问所述业务请求对应的数据库之前,还包括:
控制所述备数据库中间件升级为主数据库中间件。
10.一种数据库系统,其特征在于,所述系统包括处理节点和存储节点;其中,
所述处理节点用于实现权利要求1至9任一项所述的方法;
所述存储节点设置有数据库。
11.一种访问数据库的装置,其特征在于,所述装置包括:
接收模块,用于接收业务请求;
获取模块,用于获取所述业务请求对应的目标分片因子;
访问模块,用于基于所述目标分片因子,访问所述业务请求对应的数据库。
12.根据权利要求11所述的装置,其特征在于,所述访问模块,还用于:
将获取的目标分片因子,添加至所述业务请求中。
13.根据权利要求11或12所述的装置,其特征在于,所述业务请求中不包括所述目标分片因子。
14.根据权利要求11至13任一项所述的装置,其特征在于,所述业务请求为用于增加数据记录、删除数据记录、修改数据记录或者查询数据记录的请求。
15.根据权利要求11至14任一项所述的装置,其特征在于,所述获取模块,用于:
在存储的分片因子中,获取所述业务请求对应的目标分片因子。
16.根据权利要求11至14任一项所述的装置,其特征在于,所述获取模块,用于:
在与所述业务请求对应的数据记录存在关联关系的数据记录中,获取所述业务请求对应的目标分片因子。
17.根据权利要求11至16任一项所述的装置,其特征在于,所述访问模块,用于:
通过主数据库中间件基于所述目标分片因子,访问所述业务请求对应的数据库。
18.根据权利要求17所述的装置,其特征在于,所述访问模块,用于:
检测到所述主数据库中间件可用的情况下,通过主数据库中间件基于所述目标分片因子,访问所述业务请求对应的数据库;
所述访问模块,还用于:
检测到所述主数据库中间件不可用的情况下,通过备数据库中间件基于所述目标分片因子,访问所述业务请求对应的数据库。
19.根据权利要求18所述的装置,其特征在于,所述访问模块,还用于:
通过备数据库中间件基于所述目标分片因子,访问所述业务请求对应的数据库之前,控制所述备数据库中间件升级为主数据库中间件。
20.一种访问数据库的计算设备,其特征在于,所述计算设备包括处理器和存储器,其中:
所述存储器中存储有计算机指令;
所述处理器执行所述计算机指令,以使所述计算设备执行所述权利要求1至9任一项权利要求所述的方法。
21.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,当所述计算机可读存储介质中的计算机指令被计算设备执行时,使得所述计算设备执行所述权利要求1至9任一项权利要求所述的方法,或者使得所述计算设备实现所述权利要求11至19任一项权利要求所述的装置的功能。
CN202011507449.9A 2020-12-18 2020-12-18 访问数据库的方法、装置、计算设备和存储介质 Pending CN114647697A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011507449.9A CN114647697A (zh) 2020-12-18 2020-12-18 访问数据库的方法、装置、计算设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011507449.9A CN114647697A (zh) 2020-12-18 2020-12-18 访问数据库的方法、装置、计算设备和存储介质

Publications (1)

Publication Number Publication Date
CN114647697A true CN114647697A (zh) 2022-06-21

Family

ID=81990860

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011507449.9A Pending CN114647697A (zh) 2020-12-18 2020-12-18 访问数据库的方法、装置、计算设备和存储介质

Country Status (1)

Country Link
CN (1) CN114647697A (zh)

Similar Documents

Publication Publication Date Title
KR101871383B1 (ko) 계층적 데이터 구조의 노드 상에서 재귀적 이벤트 리스너를 사용하기 위한 방법 및 시스템
CN111475483B (zh) 数据库迁移方法、装置及计算设备
CN107870954B (zh) 一种分布式数据库的扩展方法及装置
US20220300477A1 (en) Data Read/Write Method and Apparatus for Database
US12001450B2 (en) Distributed table storage processing method, device and system
CN112121413A (zh) 功能服务的响应方法、系统、装置、终端及介质
US20060112083A1 (en) Object relation information management program, method, and apparatus
CN115277145A (zh) 分布式存储访问授权管理方法、系统、设备和可读介质
CN107181773A (zh) 分布式存储系统的数据存储及数据管理方法、设备
CN113127477A (zh) 访问数据库的方法、装置、计算机设备和存储介质
US20240205292A1 (en) Data processing method and apparatus, computer device, and computer-readable storage medium
CN111459913B (zh) 分布式数据库的容量扩展方法、装置及电子设备
CN113239012A (zh) 一种数据库迁移方法、装置、电子设备和存储介质
US11394748B2 (en) Authentication method for anonymous account and server
CN113051221A (zh) 数据存储方法、装置、介质、设备及分布式文件系统
WO2020134786A1 (zh) 服务器的扩容方法及装置、服务器、存储介质
CN114647697A (zh) 访问数据库的方法、装置、计算设备和存储介质
CN111221857B (zh) 从分布式系统中读数据记录的方法和装置
CN111782634B (zh) 数据分布式存储方法、装置、电子设备及存储介质
CN103685359A (zh) 数据处理方法及装置
WO2021063242A1 (zh) 一种存储系统的元数据的发送方法及存储系统
WO2020207078A1 (zh) 数据处理方法、装置和分布式数据库系统
CN116955495A (zh) 数据处理方法、装置、介质及设备
CN116186165A (zh) 数据复制方法、装置、系统及存储介质
CN114880336A (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