一种数据存储方法及数据存储系统转让专利

申请号 : CN201910569784.2

文献号 : CN110275681A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄铭毅陈江枫张潮宇

申请人 : 深圳前海微众银行股份有限公司

摘要 :

本发明公开了一种数据存储方法及数据存储系统,涉及数据存储技术领域,用于提供一种对存储容量进行水平扩展的技术方案,以利用现有的单机存储引擎实现对存储容量的水平扩展。在该数据存储方法中,各个执行节点中部署的均是单机存储引擎,例如目标执行节点在接收调度节点调度的存储请求时,是基于本节点内部署的单机存储引擎执行该存储请求,即在保存了单机存储引擎原有优点的基础上,还可以实现对调度到给存储引擎的存储请求的处理。此外,由于执行集群中的每个执行节点均采用单机存储引擎,这样通过组合多个单机的同构存储引擎或异构存储引擎,对外提供统一的服务,从而实现了存储容量的水平扩展。

权利要求 :

1.一种数据存储方法,其特征在于,应用于数据存储系统,所述数据存储系统包括调度集群和执行集群,所述调度集群包括至少一个调度节点,所述执行集群包括至少一个执行节点,所述至少一个执行节点中的每个执行节点均采用单机存储引擎,所述方法包括:所述调度集群中的目标调度节点获得客户端发送的存储请求,其中,所述存储请求包括请求存储的数据的元数据;

所述目标调度节点按照预设存储策略,根据所述元数据从所述执行集群中确定调度的目标执行节点,并将所述存储请求调度给所述目标执行节点;

所述目标执行节点使用对应的单机存储引擎执行所述存储请求。

2.如权利要求1所述的方法,其特征在于,所述目标执行节点使用对应的单机存储引擎执行所述存储请求,包括:所述目标执行节点根据对应的单机存储引擎对所述存储请求进行适配处理,以使得与所述目标执行节点对应的单机存储引擎执行所述存储请求。

3.如权利要求2所述的方法,其特征在于,若与所述目标执行节点对应的单机存储引擎为B+树的存储引擎,则所述目标执行节点对所述存储请求进行适配处理,包括:当所述目标执行节点确定所述请求存储的数据量大于预定阈值时,则将所述请求存储的数据划分为均小于所述预定阈值数据的多个数据块。

4.如权利要求2所述的方法,其特征在于,若与所述目标执行节点对应的单机存储引擎为LSM树的存储引擎,则所述目标执行节点对所述存储请求进行适配处理,包括:所述目标执行节点确定接收的多个请求存储数据的存储请求的请求顺序,并按照所述请求顺序对多个存储请求以队列排列;

所述目标执行节点将所述队列中的预设个数的存储请求对应请求的数据,采用压缩重排的方式进行批量处理。

5.如权利要求2所述的方法,其特征在于,若与所述目标执行节点对应的单机存储引擎为基于编程语言机制的存储引擎,则所述目标执行节点对所述存储请求进行适配处理,包括:所述目标执行节点对编程语言的字典类型进行封装,以使得基于编程语言机制的存储引擎支持内存存储;

所述目标执行节点将所述存储请求所请求存储的数据在基于编程语言机制的存储引擎中以内存存储的方式进行存储。

6.如权利要求2所述的方法,其特征在于,若与所述目标执行节点对应的单机存储引擎基于编程语言机制的存储引擎或内存存储引擎,所述基于编程语言机制的存储引擎支持内存存储,则所述目标执行节点对所述存储请求进行适配处理,包括:所述目标执行节点将所述存储请求所请求存储的数据以内存存储的方式进行存储;或者,所述目标执行节点获得用于指示持久存储的指示,并根据所述指示将所述存储请求所请求存储的数据按照预设的持久化存储机制进行持久性存储。

7.如权利要求1-6任一所述的方法,其特征在于,所述目标执行节点使用对应的单机存储引擎执行所述存储请求之后,所述方法还包括:所述目标执行节点将执行结果发送给所述调度集群;

所述调度集群将所述执行结果发送给所述客户端。

8.一种数据存储系统,其特征在于,所述系统包括调度集群和执行集群,其中:所述调度集群,包括至少一个调度节点,所述至少一个调度节点中的目标调度节点用于:获得客户端发送的存储请求,其中,所述存储请求包括请求存储的数据的元数据;并按照预设存储策略,根据所述元数据从所述执行集群中确定调度的目标执行节点;以及将所述存储请求调度给所述目标执行节点;

所述执行集群,包括至少一个执行节点,所述至少一个执行节点中的每个执行节点均采用单机存储引擎,其中,所述至少一个执行节点中的所述目标执行节点用于:获得存储请求,并使用对应的单机存储引擎执行所述存储请求。

9.如权利要求8所述的数据存储系统,其特征在于,所述目标执行节点还用于:根据对应的单机存储引擎对所述存储请求进行适配处理,以使与所述目标执行节点对应的单机存储引擎执行所述存储请求。

10.如权利要求8或9所述的数据存储系统,其特征在于,所述目标执行节点还用于将执行结果发送给所述调度集群,以使所述调度集群将所述执行结果发送给所述客户端。

说明书 :

一种数据存储方法及数据存储系统

技术领域

[0001] 本发明涉及数据存储技术领域,尤其涉及一种数据存储方法及数据存储系统。

背景技术

[0002] 随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Fintech)转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。
[0003] 在实际使用过程中,金融行业(例如银行)随着业务的发展,业务数据量增长迅速,从而出现海量的数据,海量的数据需要相应的存储空间。然而,在实际的使用过程中,一台存储设备的存储上限是固定的,但是在大数据的时代,数据的上限往往超过一台存储设备的存储上限。所以,对存储容量进行水平扩展是需要考虑的问题。

发明内容

[0004] 本申请实施例提供一种数据存储方法及数据存储系统,用于提供一种对存储容量进行水平扩展的技术方案,以利用现有的单机存储引擎实现对存储容量的水平扩展。
[0005] 第一方面,提供一种数据存储方法,应用于数据存储系统,所述数据存储系统包括调度集群和执行集群,所述调度集群包括至少一个调度节点,所述执行集群包括至少一个执行节点,所述至少一个执行节点中的每个执行节点均采用单机存储引擎,所述方法包括:
[0006] 所述调度集群中的目标调度节点获得客户端发送的存储请求,其中,所述存储请求包括请求存储的数据的元数据;
[0007] 所述目标调度节点按照预设存储策略,根据所述元数据从所述执行集群中确定调度的目标执行节点,并将所述存储请求调度给所述目标执行节点;
[0008] 所述目标执行节点使用对应的单机存储引擎执行所述存储请求。
[0009] 在一种可能的设计中,所述目标执行节点使用对应的单机存储引擎执行所述存储请求,包括:
[0010] 所述目标执行节点根据对应的单机存储引擎对所述存储请求进行适配处理,以使得与所述目标执行节点对应的单机存储引擎执行所述存储请求。
[0011] 在一种可能的设计中,若与所述目标执行节点对应的单机存储引擎为B+树的存储引擎,则所述目标执行节点对所述存储请求进行适配处理,包括:
[0012] 当所述目标执行节点确定所述请求存储的数据量大于预定阈值时,则将所述请求存储的数据划分为均小于所述预定阈值数据的多个数据块。
[0013] 在一种可能的设计中,若与所述目标执行节点对应的单机存储引擎为LSM树的存储引擎,则所述目标执行节点对所述存储请求进行适配处理,包括:
[0014] 所述目标执行节点确定接收的多个请求存储数据的存储请求的请求顺序,并按照所述请求顺序对多个存储请求以队列排列;
[0015] 所述目标执行节点将所述队列中的预设个数的存储请求对应请求的数据,采用压缩重排的方式进行批量处理。
[0016] 在一种可能的设计中,若与所述目标执行节点对应的单机存储引擎为基于编程语言机制的存储引擎,则所述目标执行节点对所述存储请求进行适配处理,包括:
[0017] 所述目标执行节点对编程语言的字典类型进行封装,以使得基于编程语言机制的存储引擎支持内存存储;
[0018] 所述目标执行节点将所述存储请求所请求存储的数据在基于编程语言机制的存储引擎中以内存存储的方式存储。
[0019] 在一种可能的设计中,若与所述目标执行节点对应的单机存储引擎基于编程语言机制的存储引擎或内存存储引擎,所述基于编程语言机制的存储引擎支持内存存储,则所述目标执行节点对所述存储请求进行适配处理,包括:
[0020] 所述目标执行节点将所述存储请求所请求存储的数据以内存存储的方式进行存储;或者,
[0021] 所述目标执行节点获得用于指示持久存储的指示,并根据所述指示将所述存储请求所请求存储的数据按照预设的持久化存储机制进行持久性存储。
[0022] 在一种可能的设计中,所述目标执行节点使用对应的单机存储引擎执行所述存储请求之后,所述方法还包括:
[0023] 所述目标执行节点将执行结果发送给所述调度集群;
[0024] 所述调度集群将所述执行结果发送给所述客户端。
[0025] 第二方面,提供一种数据存储系统,所述系统包括如第一方面中所述的调度集群和执行集群,其中:
[0026] 所述调度集群,包括至少一个调度节点,所述至少一个调度节点中的目标调度节点用于:获得客户端发送的存储请求,其中,所述存储请求包括请求存储的数据的元数据;并按照预设存储策略,根据所述元数据从所述执行集群中确定调度的目标执行节点;以及将所述存储请求调度给所述目标执行节点;
[0027] 所述执行集群,包括至少一个执行节点,所述至少一个执行节点中的每个执行节点均采用单机存储引擎,其中,所述至少一个执行节点中的所述目标执行节点用于:获得存储请求,并使用对应的单机存储引擎执行所述存储请求。
[0028] 在一种可能的设计中,所述目标执行节点还用于:
[0029] 根据对应的单机存储引擎对所述存储请求进行适配处理,以使与所述目标执行节点对应的单机存储引擎执行所述存储请求。
[0030] 在一种可能的设计中,所述目标执行节点还用于将执行结果发送给所述调度集群,以使所述调度集群将所述执行结果发送给所述客户端。
[0031] 在本申请实施例中,当调度集群获得客户端发送的存储请求后,可以确定出对应处理该存储请求的目标调度节点,然后目标调度节点获得客户端发送的存储请求,其中,存储请求中包括请求存储的数据的元数据,进而目标调度节点可以按照预设存储策略,根据元数据从执行集群中确定出调度的目标执行节点,并将存储请求调度给目标执行节点,然后目标执行节点使用对应的单机存储引擎执行存储请求。也就是说,目标执行节点使用的是部署在该节点的单机存储引擎来执行相应的存储请求,即在保存了单机存储引擎原有优点的基础上,还可以实现对调度到给存储引擎的存储请求的处理。此外,由于执行集群中的每个执行节点均采用单机存储引擎,这样通过组合多个单机的同构存储引擎或异构存储引擎,对外提供统一的服务,从而实现了存储容量的水平扩展。

附图说明

[0032] 为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0033] 图1为本申请实施例中的一种数据存储系统的系统架构示意图;
[0034] 图2为本申请实施例中的一种数据存储方法的流程示意图。

具体实施方式

[0035] 为使本申请的目的、技术方案和优点更加清楚明白,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0036] 本申请的说明书和权利要求书及上述附图中的术语“包括”以及它们任何变形,意图在于覆盖不排他的保护。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0037] 为了便于理解本申请实施例提供的技术方案,这里先对本申请实施例使用的部分用语进行解释:
[0038] Key-value:关键码值,其中,key代表关键字,value代表值,每个关键字都会对应一个唯一的值,所以可以根据关键字取值,其主要特点是具有极高的并发读写性能。
[0039] 哈希函数:也称为是散列函数,是哈希表的映射函数,它可以把任意长度的输入变换成固定长度的输出,该输出就是哈希值。哈希函数能使对一个数据序列的访问过程变得更加迅速有效,通过哈希函数数据元素能够被很快的进行定位。
[0040] 元信息:元数据(Metadata):又称中介数据或中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
[0041] 元数据还可以理解为是元信息,而元信息是关于信息的信息,用于描述信息的结构、语义、用途和用法等。
[0042] API:应用程序接口(Application Program Interface,API)应用程序接口是一组定义、程序及协议的集合,API就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的API而使操作系统去执行应用程序的命令。
[0043] 为了更好地理解本申请实施例提供的技术方案,下面先介绍本申请实施例的技术背景。
[0044] 金融科技(Fintech)是指将信息技术融入金融领域后,为金融领域带来的一种新的创新科技,通过使用先进的信息技术辅助实现金融作业、交易执行以及金融系统改进,可以提升金融系统的处理效率、业务规模,并可以降低成本和金融风险。
[0045] 如前所述,在大数据的时代,数据的上限往往超过一台存储设备的存储上限。所以,对存储容量进行水平扩展是需要考虑的问题。在实际的使用过程中,现有的分布式存储系统提供一般都是使用一种特定的调用接口,从而对存储引擎的类型有了一定的限制,导致仅可以使用与其系统对应的调用接口,即针对的是特定的存储引擎,导致分布式存储系统的适用性较差。
[0046] 鉴于此,本申请实施例提供了一种数据存储方法,通过本申请实施例中的方法可以利用现有的单机存储引擎实现对存储容量的水平扩展,使得可以使用多种不同的单机存储引擎以组成分布式的存储系统,从而提升用户体验。
[0047] 在介绍完本申请实施例的设计思想之后,下面对本申请实施例中的数据存储方法的技术方案适用的应用场景做一些简单介绍,需要说明的是,以下介绍的应用场景仅用于说明本申请实施例而非限定。在具体实施时,可以根据实际需要灵活地应用本申请实施例提供的技术方案。
[0048] 图1为本申请实施例提供的一种数据存储系统的系统架构示意图,如图1所示,该系统中可以包括调度集群11、执行集群12和元服务集群13。其中,调度集群11包括至少一个调度节点,调度节点用于接收用户发送的请求,并根据请求从执行集群12中确定调度的执行节点。执行集群12包括至少一个执行节点,至少一个执行节点中的每个执行节点中部署的均是单机存储引擎,换言之,每个执行节点均采用单机存储机制,也就是说,每个执行节点在进行数据存储时,都是使用单机存储引擎来执行存储请求的。元服务集群13用于存储系统的元数据,例如表的存储位置、分片数,执行节点的信息等。另外,需要说明的是,本申请实施例中的数据存储系统可以为分布式数据存储系统,即通过多个单机存储引擎以实现分布式的存储架构。
[0049] 请继续参见图1,图1中调度集群11中可以包括调度节点111、调度节点112、调度节点113,相应的,执行集群12可以包括执行节点121、执行节点122、执行节点123。在本申请实施例中,任意两个节点之间均可以进行通信,而这里所说的两个节点可以是两个调度节点,或者是指两个执行节点,或者可以是指一个调度节点和一个执行节点,也就是说,本申请实施例中所说的两个节点之间的通信,不仅包括调度集群11和执行集群12之间的通信,还包括调度集群11内部的通信以及执行集群12内部的通信,同时还包括相互与元服务集群13之间的通信。其中,实现通信连接的方式可以有多种,比如可以通过有线方式实现通信连接,或者也可以通过无线方式实现通信连接,本申请实施例具体不作限定。
[0050] 具体实施中,执行集群12可以接收调度集群11调用执行集群12中的一个或多个执行节点的请求,并可以根据该用户请求(例如存储请求)中的元数据从元服务集群13中确定出请求存储的数据,从而对请求存储的数据执行相应的操作。举例来说,若调度集群11需要实现与执行集群12的通信,则例如调度集群11中的调度节点112可以根据请求确定执行集群12中的执行节点121,用户请求中可以包括请求逻辑和元数据;相应地,执行节点121接收到请求后,可以对该请求进行处理,然后将处理结果反馈给调度集群12,例如反馈给调度集群中的调度节点112。
[0051] 在具体实施过程中,执行集群12中的每个执行节点中部署的均是单机存储引擎,具体的,每个执行节点中部署的单机存储引擎可以是部分数据结构相同的单机存储引擎,还可以是数据结构均相同的单机存储引擎,当然,也可以是数据结构均不同的单机存储引擎,这里的数据结构例如是Key-value或张量或其它类型的数据结构;以及,执行集群12中的执行节点均是同一类型的单机存储引擎,此时执行集群12则采用的同构的单机存储引擎,或者执行集群12中的执行节点也可以是不同类型的单机存储引擎,此时执行集群12则采用的异构的单机存储引擎,也就是说,在本申请实施例中,通过组合多个单机的异构存储引擎或同构存储引擎,对外提供统一的服务,以实现存储容量的水平扩展。
[0052] 例如,若执行集群12共包括5个执行节点,5个执行节点分别部署的单机存储引擎为单机存储引擎1、单机存储引擎2、单机存储引擎3、单机存储引擎4以及单机存储引擎5,且单机存储引擎1为B+树存储引擎、单机存储引擎2为基于编程语言机制的存储引擎、单机存储引擎3为B+树存储引擎、单机存储引擎4以及单机存储引擎5均为LSM树存储引擎,即执行集群12对应的分布式存储系统由5个单机的异构储存引擎组成,从而在现有的单机存储引擎的基础上,可以实现存储容量的水平扩展。
[0053] 为进一步说明本申请实施例提供的技术方案,下面结合附图以及具体实施方式对此进行详细的说明。虽然本申请实施例提供了如下述实施例或附图所示的方法操作步骤,但基于常规或者无需创造性的劳动在所述方法中可以包括更多或者更少的操作步骤。在逻辑上不存在必要因果关系的步骤中,这些步骤的执行顺序不限于本申请实施例提供的执行顺序。所述方法在实际的处理过程中或者装置执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行。
[0054] 请参考图2,本申请实施例基于图1所示的数据存储系统还提供一种数据存储方法,在理解该数据存储方法时,可以结合前述的数据存储系统进行相应理解,本申请实施例中的数据存储方法的流程描述如下。
[0055] 步骤201:调度集群中的目标调度节点获得用户通过客户端发送的存储请求,其中,该存储请求中包括请求存储的数据的元数据。
[0056] 在本申请实施例中,当希望对数据进行操作(例如读取数据操作)时,用户可以通过客户端向数据存储系统发起存储请求,其中,存储请求中包括请求存储的数据的元数据,以及,存储请求中还可以包括所请求存储的数据本身。在本申请实施例中,存储请求可以为对请求存储的数据的读请求、还可以为对请求存储的数据的写请求、也可以是对请求存储的数据流的处理请求、当然存储请求还可以是元数据操作请求,本申请中不作限制。
[0057] 例如,用户希望对请求存储的数据进行读数据操作,则用户可以向分布式的数据存储系统发送写请求,从而分布式存储系统判断调度集群中的调度节点的使用情况,例如按照负载均衡策略确定出目标调度节点来对该存储请求进行调度,从而可以将存储请求分发给目标调度节点,则目标调度节点可以获得该写请求。也就是说,可以根据调度集群中各个调度节点的运行状态,合理的将用户的请求分配到合适的调度节点,以便能够及时处理用户的请求,确保处理效率。
[0058] 步骤202:目标调度节点根据请求按照预设存储策略,根据存储请求所请求存储的数据的元数据从执行集群中确定出用于执行该存储请求的目标执行节点,并将该存储请求调度给确定出的目标执行节点。
[0059] 在本申请实施例中,目标调度节点在接收到存储请求之后,可以根据请求存储的数据的元数据确定请求存储的数据的数据结构,进而根据确定出的数据结构来确定对应的调度方式,换言之,本申请实施例中的预设存储策略例如是根据数据的数据结构确定的,例如目标调度节点确定数据处理请求所请求处理的目标数据结构之后,可以按照预设的数据结构与调度规则之间的对应关系,确定与该目标数据结构对应的目标调度规则,进而再根据目标调度规则和用于描述该目标数据的元数据来确定目标执行节点。其中,数据的数据结构可以是基于key-value的数据结构,或者可以基于张量计算的数据结构,等等。例如,若目标数据的数据结构为key-value结构,那么可以利用哈希算法对目标数据中每个数据的key值进行哈希运算,从而确定出每个数据对应的目标执行节点,若用户请求为存储请求,该目标执行节则为存储目标数据的节点,若用户请求时计算请求,该目标执行节点则为计算目标数据的节点。由于哈希函数可以使对一个数据序列的访问过程变得更加迅速有效,所以,通过哈希函数可以很快的定位出存放请求存储的数据的执行节点,提高了确定执行节点的效率。
[0060] 本申请实施例中,分布式系统在提供给用户的API中,能够支持丰富的数据结构,并且在处理不同数据结构的数据时,可以根据不同的数据结构域计算类型,采用对应的差异化的调度规则来调度给执行节点,即,针对不同数据结构的数据可以采用不同的调度决策,从而提高数据处理的灵活性。
[0061] 步骤203:目标执行节点使用对应的单机存储引擎,执行存储请求。
[0062] 在本申请实施例中,目标执行节点获得目标调度节点所调度的存储请求之后,则可以根据请求存储的数据的元数据,使用与本节点相对应的单机存储引擎来执行存储请求对应的存储任务。例如,若存储请求为将table表中key为1的数据读出,则可以使用目标执行节点对应的本地的单机存储引擎获取1的值。
[0063] 在本申请实施例中,执行集群中的每个执行节点分别对应一个单机存储引擎,而不同的底层的单机存储引擎对应的调用API接口是不同的。为了使得不同的单机存储引擎可以实现本申请中分布式系统的调用API接口,以实现分布式存储的通用,可以对本申请实施例中的单机存储引擎对应的调用API接口进行适配。也就是说,本申请中的数据存储系统提供的API接口为包含对具体单机存储引擎实现相同语义API接口的调用。在本申请实施例中,为了便于理解,以支持KV(Key-value,关键码值)数据结构的单机存储引擎为例来进行说明。
[0064] 为了便于本领域技术人员理解,以下列举几种可能的方式来说明如使得不同数据结构的单机存储引擎可以实现本申请中分布式系统的API接口,应该理解的是,以下举例只是示意性的说明,其并不对本申请实施例构成限定,除去以下所列举的方式,在具体实施过程中还可以再采用其它的适配方式,本文中并不穷举。
[0065] 第一种适配方式
[0066] 在本申请实施例中,若与目标执行节点对应的单机存储引擎为B+树存储引擎,则确定请求存储的数据量大于预定阈值时,则将请求存储的数据划分为均小于该预定阈值的多个数据块,即,划分的每个数据块的数据量均小于预定阈值。
[0067] 在实际使用过程中,在B+树存储引擎中,数据的排列方式可以为形成一棵B+树,那么,相应的使用B+树存储引擎来进行读写请求处理的数据,可以被反映成对树节点的修改。
[0068] 在本申请实施例中,当目标执行节点确定使用的单机存储引擎为B+树存储引擎时,目标执行节点可以确定B+树存储引擎中分片区域中的每片数据块的阈值数据,当确定请求存储的数据大于阈值数据时,目标执行节点可以使用数据存储系统中B+树存储引擎对应的调用API接口,将请求存储的数据划分为小于所述阈值数据的多个数据块。在具体的实施过程中,划分的每个数据块的数据量大小可以相同或者也可以不同,当然,也可以部分数据块的数据量相同,而其余部分的数据量不同,等等。也就是说,通过将请求存储的数据划分数据块的方式,可以降低对请求存储的数据的丢失风险,尽量确保请求存储的数据传输的稳定性。
[0069] 在一种可能的实施方式中,还可以是通过使用数据存储系统中B+树存储引擎对应的调用API接口增加存储子区域的划分数量,例如,B+树存储引擎原来划分的存储子区域数量为10个,现在划分为20个存储子区域,这样的话,可以避免单一存储子区域过大,影响执行节点执行存储任务。进一步的,考虑到可能会出现需要处理多个存储请求的情况,可以复用B+存储引擎本身自带的多线程读写机制,也就是说,同时对多个存储请求进行处理。这样的话,执行节点可以同时对多个存储请求同时执行存储任务,提高处理效率。
[0070] 第二种适配方式
[0071] 在本申请实施例中,若与目标执行节点对应的单机存储引擎为LSM树存储引擎,则目标执行节点确定接收的多个请求存储数据的存储请求的请求顺序,并按照请求顺序对多个存储请求以队列进行排列;在队列中请求存储的存储请求的个数达到预设个数和/或队列排序的时长达到预设时长时,将队列中的多个(例如预设个数)存储请求对应请求的数据,采用压缩重排的方式进行批量处理。这样的话,可以避免执行节点每接收一次请求存储的数据就进行一次存储的问题,减少存储调度次数,还可以使得针对多个存储请求对应的多份数据进行批量处理,进一步地提升了处理效率。
[0072] 在实际应用中,在LSM树存储引擎中,对请求存储的数据的处理方式可以是将请求存储的数据作为日志,然后不断地将日志追加到一个文件中,从而将文件中的请求存储的数据压缩存储。也就是说,LSM存储引擎中对存储请求的数据处理可以将存储请求的数据写放大,然后还可能对存储请求的数据进行压缩处理,以及当针对多个存储请求中的数据时,可能无法同时处理。
[0073] 进一步地,在确定是否达到预设个数时,还可以确定队列排序的时长是否达到预设时长,若达到预设时长,但未达到预设个数,则可以采用压缩重排的方式对所述队列中请求存储的数据进行批量处理。这样的方式,可以尽量确保接收的每个请求存储的数据都被处理。
[0074] 在具体的实施过程中,执行节点确定队列排序的时长达到预设时长,则采用压缩重排的方式对队列中请求存储的数据进行批量处理,这样的方式,可以避免出现长时间只有一个请求存储的数据而未对数据进行处理的情况的出现,可以尽量确保接收的每个请求存储的数据都被处理。
[0075] 具体的,目标执行节点可以通过使用数据存储系统中LSM树存储引擎对应的调用API接口针对LSM树存储引擎的适配可以是在LSM树存储引擎上封装一个服务,通过服务可以单线程读写机制对请求存储的数据进行处理,从而解决多线程读写机制直接对请求存储的数据进行处理带来的线程冲突问题,也就是说,可以是通过使用数据存储系统中LSM树存储引擎对应的调用API接口,来实现对LSM树存储引擎的读写机制的适配处理。
[0076] 进一步地,还可以是通过前述的LSM树存储引擎上封装的服务对请求存储的数据进行缓存,从而可以提高对数据的存储效率。当然也可以是在引擎上的服务对请求进行排序,然后按照排序顺序将请求存储的数据进行处理,从而可以降低数据压缩重排的次数,提升存储效率。
[0077] 第三种适配方式
[0078] 在本申请实施例中,若与目标执行节点对应的单机存储引擎为基于编程语言机制的存储引擎,目标执行节点可以对编程语言的字典类型进行封装,以使得基于编程语言机制的存储引擎支持内存存储。进一步地,目标执行节点将存储请求所请求存储的数据在基于编程语言机制的存储引擎中以内存存储的方式进行存储。
[0079] 第四种适配方式
[0080] 在本申请实施例中,若与目标执行节点对应的单机存储引擎为内存存储引擎(以Redis为例),与第三种适配方式中提到的封装后的基于编程语言机制的存储引擎一样,内存存储引擎默认的是对数据采用内存存储的方式进行存储,而内存存储由于断电即掉的特性,例如可以将内存存储的存储方式称作临时性存储。所以,对于封装后的基于编程语言机制的存储引擎和内存存储引擎,默认采用的临时性存储方式,而若需要对数据进行持久化的存储,则需要开发人员再部署持久化存储机制,例如一种可能的实现方式是,通过上层(例如调度集群)下发用于指示持久存储的指示,在收到该指示之后,目标执行节点则可以根据该指示将存储请求所请求存储的数据按照预设的持久化存储机制进行持久性存储,例如以磁盘进行显示存储等等,从而可以根据实际业务场景对数据进行灵活性的存储。
[0081] 在本申请实施例中,可以具体针对不同的单机存储引擎的API接口进行相应的适配,从而使得基于KV存储的存储引擎都可以使用本申请中的数据存储系统的存储方法,使得数据存储系统可以适应更多的使用。
[0082] 在一种可能的实施方式中,当目标执行节点使用对应的单机存储引擎执行存储请求之后,还可以将执行结果发送给调度集群,例如发送给调度集群中的前述的目标调度节点,然后调度集群可以将执行结果反馈给客户端,从而用户可以清楚的知晓存储请求对应的任务是否执行完成,以提升用户体验。
[0083] 基于同一发明构思,本申请实施例还提供一种数据存储系统,结合图1的说明,本申请实施例中的数据存储系统可以入图1中的调度集群11和执行集群12,以及还可以包括元服务集群13,对于调度集群11和执行集群12的相应实施例可以参见前述图1-图2的实施例描述部分,这里就不再重复说明了。
[0084] 在本申请实施例中,当调度集群获得客户端发送的存储请求后,可以确定出对应处理该存储请求的目标调度节点,然后目标调度节点获得客户端发送的存储请求,其中,存储请求中包括请求存储的数据的元数据,进而目标调度节点可以按照预设存储策略,根据元数据从执行集群中确定出调度的目标执行节点,并将存储请求调度给目标执行节点,然后目标执行节点使用对应的单机存储引擎执行存储请求。也就是说,目标执行节点使用的是部署在该节点的单机存储引擎来执行相应的存储请求,即在保存了单机存储引擎原有优点的基础上,还可以实现对调度到给存储引擎的存储请求的处理。此外,由于执行集群中的每个执行节点均采用单机存储引擎,这样通过组合多个单机的同构存储引擎或异构存储引擎,对外提供统一的服务,从而实现了存储容量的水平扩展。
[0085] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
[0086] 本发明是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0087] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0088] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0089] 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。