一种存储系统中的数据处理方法、装置和系统转让专利

申请号 : CN201510821434.2

文献号 : CN106775435B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王朝海

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本发明实施例公开了一种存储系统中的数据处理方法、装置和系统;接收业务侧发送的数据处理请求,其中,该数据处理请求携带业务标识,并指示需要处理的键、以及处理内容,根据该业务标识获取对应的请求树,该请求树包括多个叶子节点,确定与该需要处理的键对应的叶子节点,然后,根据该处理内容对确定的叶子节点进行处理;该方案不仅可以节省网络资源的消耗,提高处理效率,而且可以提升并发处理能力。

权利要求 :

1.一种存储系统中的数据处理方法,其特征在于,包括:接收业务侧发送的数据处理请求,所述数据处理请求携带业务标识,并指示需要处理的键、以及处理内容;

根据所述业务标识获取对应的请求树,所述请求树包括多个叶子节点;

确定与所述需要处理的键对应的叶子节点;

根据所述处理内容对确定的叶子节点进行处理;

所述根据所述业务标识获取对应的请求树之前,还包括:接收请求树建立请求,所述请求树建立请求携带所述业务标识;

根据所述业务标识获取业务信息;

对所述业务信息进行分析,以提取键信息,所述键信息包括键标识、以及各个键之间的关联关系;

根据所述键信息建立所述业务的所述请求树。

2.根据权利要求1所述的方法,其特征在于,所述确定与所述需要处理的键对应的叶子节点,包括:根据所述需要处理的键确定访问路径;

基于所述访问路径确定访问节点,得到所述需要处理的键对应的叶子节点。

3.根据权利要求1所述的方法,其特征在于,所述根据所述处理内容对确定的叶子节点进行处理,包括:若所述处理内容指示写入数据,且指示所述键的值,则在确定的叶子节点上添加子节点,并根据指示的键的值在所述叶子节点上写入数据;和/或,若所述处理内容指示读取数据,则读取所述叶子节点上存储的数据,将读取的数据返回给业务侧;和/或,若所述处理内容指示对所述键进行更新,且指示所述键的值,则根据指示的键的值对确定的叶子节点上存储的数据进行更新;和/或,若所述处理内容指示删除数据,则删除确定的叶子节点。

4.根据权利要求3所述的方法,其特征在于,所述需要处理的键有多个,所述数据处理请求还指示多个键之间的操作关系,则所述根据所述处理内容对确定的叶子节点进行处理时,还包括:若所述操作关系为预设第一关系,则在所述多个键中的任意一个键所对应的叶子节点操作失败时,取消所述多个键中所有键相应的叶子节点的操作;

若所述操作关系为预设第二关系,则在所述多个键中的任意一个键所对应的叶子节点操作失败时,取消与该操作失败的键具有关联关系的键所对应的叶子节点的操作;

若所述操作关系为预设第三关系,则在所述多个键中的任意一个键所对应的叶子节点操作失败时,保留所述多个键中其他键相应的叶子节点的操作。

5.根据权利要求3所述的方法,其特征在于,所述根据指示的键的值在所述叶子节点上写入数据,包括:根据指示的键的值确定需要写入的数据,并对数据进行压缩,得到压缩数据;

将所述压缩数据写入所述叶子节点。

6.根据权利要求5所述的方法,其特征在于,所述读取所述叶子节点上存储的数据,将读取的数据返回给业务侧,包括:读取所述叶子节点上存储的压缩数据;

对所述压缩数据进行解压缩,得到解压缩数据;

将解压缩数据返回给业务侧。

7.根据权利要求1至6任一项所述的方法,其特征在于,所述根据所述处理内容对确定的叶子节点进行处理之前,还包括:确定所述处理内容是否符合预置条件;

若是,则执行根据所述处理内容对确定的叶子节点进行处理的步骤;

若否,则拒绝所述数据处理请求。

8.一种存储系统中的数据处理装置,其特征在于,包括:接收单元,用于接收业务侧发送的数据处理请求,所述数据处理请求携带业务标识,并指示需要处理的键、以及处理内容;以及用于接收请求树建立请求,所述请求树建立请求携带所述业务标识;

获取单元,用于根据所述业务标识获取对应的请求树,所述请求树包括多个叶子节点;

以及用于根据所述业务标识获取业务信息;

确定单元,用于确定与所述需要处理的键对应的叶子节点;

处理单元,用于根据所述处理内容对确定的叶子节点进行处理;

所述建立单元,用于对所述业务信息进行分析,以提取键信息,所述键信息包括键标识、以及各个键之间的关联关系,根据所述键信息建立所述业务的所述请求树。

9.根据权利要求8所述的装置,其特征在于,

所述确定单元,具体用于根据所述需要处理的键确定访问路径,基于所述访问路径确定访问节点,得到所述需要处理的键对应的叶子节点。

10.根据权利要求8所述的装置,其特征在于,所述处理单元,具体用于:若所述处理内容指示写入数据,且指示所述键的值,则在确定的叶子节点上添加子节点,并根据指示的键的值在所述叶子节点上写入数据;和/或,若所述处理内容指示读取数据,则读取所述叶子节点上存储的数据,将读取的数据返回给业务侧;和/或,若所述处理内容指示对所述键进行更新,且指示所述键的值,则根据指示的键的值对确定的叶子节点上存储的数据进行更新;和/或,若所述处理内容指示删除数据,则删除确定的叶子节点。

11.根据权利要求10所述的装置,其特征在于,所述需要处理的键有多个,所述数据处理请求还指示多个键之间的操作关系,则所述处理单元,还用于:若所述操作关系为预设第一关系,则在所述多个键中的任意一个键所对应的叶子节点操作失败时,取消所述多个键中所有键相应的叶子节点的操作;

若所述操作关系为预设第二关系,则在所述多个键中的任意一个键所对应的叶子节点操作失败时,取消与该操作失败的键具有关联关系的键所对应的叶子节点的操作;

若所述操作关系为预设第三关系,则在所述多个键中的任意一个键所对应的叶子节点操作失败时,保留所述多个键中其他键相应的叶子节点的操作。

12.根据权利要求10所述的装置,其特征在于,所述处理单元,具体用于在所述处理内容指示写入数据,且指示所述键的值时,根据指示的键的值确定需要写入的数据,并对数据进行压缩,得到压缩数据,将所述压缩数据写入所述叶子节点。

13.根据权利要求12所述的装置,其特征在于,所述处理单元,具体用于在所述处理内容指示读取数据时,读取所述叶子节点上存储的压缩数据,对所述压缩数据进行解压缩,得到解压缩数据,将解压缩数据返回给业务侧。

14.根据权利要求8至13任一项所述的装置,其特征在于,还包括判断单元;

所述判断单元,用于确定所述处理内容是否符合预置条件,在确定不符合预置条件时,拒绝所述数据处理请求;

所述处理单元,具体用于在判断单元确定所述处理内容符合预置条件时,根据所述处理内容对确定的叶子节点进行处理。

15.一种存储系统,其特征在于,包括权利要求8至14任一项所述的存储系统中的数据处理装置。

16.根据权利要求15所述的存储系统,其特征在于,还包括业务侧设备;

所述业务侧设备,用于向存储系统中的数据处理装置发送数据处理请求,所述数据处理请求携带业务标识,并指示需要处理的键、以及处理内容。

说明书 :

一种存储系统中的数据处理方法、装置和系统

技术领域

[0001] 本发明涉及通信技术领域,具体涉及一种存储系统中的数据处理方法、装置和系统。

背景技术

[0002] 存储系统在通信系统中具有极为重要的地位,其容量、以及处理效率直接关系到整个通信系统的性能。关于存储系统,现在用的最多的基于键值对(key-value)数据格式的NoSql(非关系型的数据库,Not Only SQL)分布式存储系统,简称为Key-value存储系统,其数据按照键值对的形式进行存储,以键(key)作为值(value)的索引,由于它可以不涉及过多的业务关系数据,不用关心数据的存储格式,因此,比SQL数据库拥有更好的读写性能。
[0003] 在现有技术中,对于Key-value存储系统的局部更新,一般需要由业务侧先把value全部读取出来,然后解码并更新其中的一部分数据,再重新将数据写回。如果涉及并发修改,则需要实现乐观锁,即在写回的过程需要检查value是否被修改,如果被修改,则需要重新读取数据,然后更新再写入,不停重试,直到成功为止。而且,如果业务需要存储结构化数据,则在写入时需要将结构化数据读取到业务侧,由业务侧将结构化数据进行序列化操作,然后在读取时再进行反序列化。
[0004] 在对现有技术的研究和实践过程中,本发明的发明人发现,由于每次都需要拉取全量的value数据,因此,需要消耗较多的网络资源,且处理效率较低;而且,由于在存储结构化数据时,需要将数据读取到业务侧进行序列化操作,因此,会造成大量的网络资源消耗,且不利于数据的并发处理。

发明内容

[0005] 本发明实施例提供一种存储系统中的数据处理方法、装置和系统,可以节省网络资源的消耗,提升并发处理能力,以提高处理效率。
[0006] 本发明实施例提供一种存储系统中的数据处理方法,包括:
[0007] 接收业务侧发送的数据处理请求,所述数据处理请求携带业务标识,并指示需要处理的键、以及处理内容;
[0008] 根据所述业务标识获取对应的请求树,所述请求树包括多个叶子节点;
[0009] 确定与所述需要处理的键对应的叶子节点;
[0010] 根据所述处理内容对确定的叶子节点进行处理。
[0011] 相应的,本发明实施例还提供一种存储系统中的数据处理装置,包括:
[0012] 接收单元,用于接收业务侧发送的数据处理请求,所述数据处理请求携带业务标识,并指示需要处理的键、以及处理内容;
[0013] 获取单元,用于根据所述业务标识获取对应的请求树,所述请求树包括多个叶子节点;
[0014] 确定单元,用于确定与所述需要处理的键对应的叶子节点;
[0015] 处理单元,用于根据所述处理内容对确定的叶子节点进行处理。
[0016] 此外,本发明实施例还提供一种存储系统,包括本发明实施例所提供的任一种存储系统中的数据处理装置。
[0017] 本发明实施例采用接收业务侧发送的数据处理请求,其中,该数据处理请求携带业务标识,并指示需要处理的键、以及处理内容,根据该业务标识获取对应的请求树,该请求树包括多个叶子节点,确定与该需要处理的键对应的叶子节点,然后,根据该处理内容对确定的叶子节点进行处理;由于该方案可以根据需要处理的键直接获取对应的叶子节点进行处理,即只需拉取需要处理的部分value数据进行处理,因此,相对于现有技术中只能拉取全量的value数据的方案而言,大大节省了网络资源的消耗,以及提高处理效率;而且,由于该方案在对数据进行处理时,都无需业务侧参与,因此,有利于保证事务的完整性,以及降低操作的复杂性,适合大规模海量数据处理,可以提升存储系统的并发处理能力;总而言之,该方案不仅可以节省网络资源的消耗,提高处理效率,而且可以提升并发处理能力。

附图说明

[0018] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0019] 图1a是本发明实施例提供的存储系统的场景示意图;
[0020] 图1b是本发明实施例提供的存储系统中的数据处理方法的流程图;
[0021] 图2a是本发明实施例提供的存储系统的架构图;
[0022] 图2b是本发明实施例提供的请求树的示例图;
[0023] 图2c是本发明实施例提供的存储系统中的数据处理方法的另一流程图;
[0024] 图2d是本发明实施例提供的请求树的另一示例图;
[0025] 图3a是本发明实施例提供的存储系统中的数据处理装置的结构示意图;
[0026] 图3b是本发明实施例提供的存储系统中的数据处理装置的另一结构示意图。

具体实施方式

[0027] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0028] 本发明实施例提供一种存储系统中的数据处理方法、装置和系统。
[0029] 该存储系统可以包括本发明实施例所提供的任一种存储系统中的数据处理装置,该存储系统中的数据处理装置具体可以作为独立的实体存在,也可以集成在存储侧,比如存储服务器等设备中。
[0030] 以集成在存储服务器中为例,参见图1a,该存储服务器可以接收业务侧,如业务服务器发送的数据处理请求,比如数据读取请求、数据写入请求或数据更新请求,等等,其中,该数据处理请求可以携带业务标识,并指示需要处理的键、以及处理内容,然后,存储服务器根据该业务标识获取对应的请求树,并确定与该需要处理的键对应的叶子节点,其中,该请求树可以包括多个叶子节点,比如节点A、B、C、D、E、F和G等,再然后,根据该处理内容对确定的叶子节点,如F和G进行处理,比如进行数据的写入、读取、更新或删除,等等,此后,存储服务器还可以返回相应的处理结果给业务侧;也就是说,该方案只需拉取需要处理的部分value数据(即叶子节点所存储的数据),比如F和G上的数据进行处理,而无需拉取全量的value数据,因此,可以大大节省了网络资源的消耗,以及提高处理效率。
[0031] 以下将分别进行详细说明。
[0032] 实施例一、
[0033] 本实施例中将从存储系统中的数据处理装置的角度进行描述,该存储系统中的数据处理装置可以作为独立的实体,也可以集成在存储侧,比如存储服务器等设备中。
[0034] 一种存储系统中的数据处理方法,包括:接收业务侧发送的数据处理请求,该数据处理请求携带业务标识,并指示需要处理的键、以及处理内容;根据该业务标识获取对应的请求树,该请求树包括多个叶子节点;确定与该需要处理的键对应的叶子节点;根据该处理内容对确定的叶子节点进行处理。
[0035] 如图1b所示,该存储系统中的数据处理方法的具体流程可以如下:
[0036] 101、接收业务侧发送的数据处理请求,该数据处理请求携带业务标识,并指示需要处理的键、以及处理内容等信息。
[0037] 其中,该数据处理请求可以是数据读取请求、数据写入请求、数据更新请求或数据删除请求等,根据不同的请求类型,所指示的处理内容也会有所不同,比如,可以如下:
[0038] 若是数据读取请求,则指示的处理内容为读取数据;若是数据更新请求,则指示的处理内容为更新数据,比如对键进行更新;若是数据写入请求,则指示的处理内容为写入数据;而若是数据删除请求,则指示的处理内容为删除数据,等等。
[0039] 其中,业务标识指的是可以用于识别业务的信息,比如业务名称、业务编号或业务代码等等。
[0040] 102、根据该业务标识获取对应的请求树。
[0041] 其中,该请求树可以包括多个叶子节点,每个键都有其对应的叶子节点,叶子节点中存储有相应的键的value数据,在本发明实施例中简称数据。
[0042] 该请求树可以根据实际应用的需求进行设置,比如,可以由维护人员预先根据业务进行来构建,或者,也可以由该存储系统自行进行建立,比如可以通过获取业务信息,并对该业务信息进行分析,以提取键信息,然后基于该键信息建立该业务的请求树,等等;即在步骤“根据该业务标识获取对应的请求树”之前,该存储系统中的数据处理方法还可以包括:
[0043] 接收请求树建立请求,该请求树建立请求携带业务标识,根据该业务标识获取业务信息,对该业务信息进行分析,以提取键信息,其中,该键信息可以包括键标识、以及各个键之间的关联关系等信息,然后,根据该键信息建立该业务的请求树。
[0044] 其中,键标识指的是可以用于识别键的信息,比如可以是键的名称、编号或代码等,各个键之间的关联关系可以是平级关系、也可以是从属(如父子等)关系,在此不再赘述。
[0045] 103、确定与该需要处理的键对应的叶子节点,例如,可以如下:
[0046] 根据该需要处理的键确定访问路径,基于该访问路径确定访问节点,得到该需要处理的键对应的叶子节点。
[0047] 104、根据该处理内容对确定的叶子节点进行处理。
[0048] 其中,该处理可以包括对数据的写入、读取、更新和删除等处理,例如可以是如下任意一种或几种操作:
[0049] (1)写入;
[0050] 若该处理内容指示写入数据,且指示该键的值,则在确定的叶子节点上添加子节点,并根据指示的键的值在该叶子节点上写入数据。
[0051] 需说明的是,在指示该键的值时,除了可以指示该键本身的值之外,还可以包括指示即将建立的该键的子建的值。
[0052] (2)读取;
[0053] 若该处理内容指示读取数据,则读取该叶子节点上存储的数据,将读取的数据返回给业务侧。
[0054] (3)更新;
[0055] 若该处理内容指示对该键进行更新,且指示该键的值,则根据指示的键的值对确定的叶子节点上存储的数据进行更新。
[0056] 需说明的是,这里的更新主要指的是修改。
[0057] (4)删除;
[0058] 若该处理内容指示删除数据,则删除确定的叶子节点。
[0059] 可选的,为了节省存储空间,在写入时,可以对数据进行压缩,读取时再进行解压缩,即步骤“根据指示的键的值在该叶子节点上写入数据”可以包括:
[0060] 根据指示的键的值确定需要写入的数据,并对数据进行压缩,得到压缩数据,将该压缩数据写入该叶子节点。
[0061] 其中,压缩时所采用的压缩算法可以根据实际应用的需求进行设置。
[0062] 若在写入时,已经对数据进行了压缩,则在读取时,需要采用与压缩算法相应的解压缩算法进行解压缩,即在步骤“读取该叶子节点上存储的数据,将读取的数据返回给业务侧”可以包括:
[0063] 读取该叶子节点上存储的压缩数据,对该压缩数据进行解压缩,得到解压缩数据,将解压缩数据返回给业务侧。
[0064] 可选的,数据处理请求中所指示的需要处理的键可以是一个,也可以是多个,即可以将多个操作封装在同一个数据处理请求中,比如可以在一个数据处理请求中包含两个操作(如OpeReg),一个操作是执行对叶子节点1上的数据进行加1,一个是执行对叶子节点2上的数据进行减1,等等。
[0065] 当该需要处理的键有多个时,还可以在该数据处理请求中指示这多个键之间的操作关系(或者说是执行关系),比如可以设置当其中任意一个操作为失败时,则取消所有的操作;或者,还可以设置各个操作的执行不影响其他的操作,即不管操作是否成功,保留其他操作的执行结果;又或者,还可以设置某些操作之间的关联关系,即若某个操作执行失败,则只取消与之关联的其他操作,而不影响与之不具有关联关系的其他操作,等等。也就是说,在执行步骤“根据该处理内容对确定的叶子节点进行处理”时,该存储系统中的数据处理方法还可以包括:
[0066] 若该操作关系为预设第一关系,则在该多个键中的任意一个键所对应的叶子节点操作失败时,取消该多个键中所有键相应的叶子节点的操作;
[0067] 若该操作关系为预设第二关系,则在该多个键中的任意一个键所对应的叶子节点操作失败时,取消与该操作失败的键具有关联关系的键所对应的叶子节点的操作;
[0068] 若该操作关系为预设第三关系,则在该多个键中的任意一个键所对应的叶子节点操作失败时,保留该多个键中其他键相应的叶子节点的操作。
[0069] 其中,第一关系、第二关系和第三关系可以根据实际应用的需求进行设置,可以分别采用不同的标识来对其进行识别,比如,可以将第一关系标识为“break”,将第三关系标识为“continue”,而对于第二关系,则需要标明哪些键之间是具有“continue”关系,哪些键之间是具有“break”关系,这样,当该存储系统中的数据处理装置识别到这些信息时,便可以采用相应的执行方式。
[0070] 可选的,还可以为处理内容设置相应的限制条件,只要满足该条件,才可以执行该数据处理请求,即在步骤“根据该处理内容对确定的叶子节点进行处理”之前,该存储系统中的数据处理方法还可以包括:
[0071] 确定该处理内容是否符合预置条件,若是,则执行根据该处理内容对确定的叶子节点进行处理的步骤(即步骤104),若否,则拒绝该数据处理请求。
[0072] 可选的,在拒绝该数据处理请求时,还可以提供相应的提示信息,比如拒绝的原因等。
[0073] 其中,该预置条件的具体内容可以根据实际应用的需求进行设置,可以预设在该存储系统中,也可以携带在数据处理请求中,在此不再赘述。
[0074] 由上可知,本实施例采用接收业务侧发送的数据处理请求,其中,该数据处理请求携带业务标识,并指示需要处理的键、以及处理内容,根据该业务标识获取对应的请求树,该请求树包括多个叶子节点,确定与该需要处理的键对应的叶子节点,然后,根据该处理内容对确定的叶子节点进行处理;由于该方案可以根据需要处理的键直接获取对应的叶子节点进行处理,即只需拉取需要处理的部分value数据进行处理,因此,相对于现有技术中只能拉取全量的value数据的方案而言,大大节省了网络资源的消耗,以及提高处理效率;而且,由于该方案在对数据进行处理时,都无需业务侧参与,因此,有利于保证事务的完整性,以及降低操作的复杂性,适合大规模海量数据处理,可以提升存储系统的并发处理能力;总而言之,该方案不仅可以节省网络资源的消耗,提高处理效率,而且可以提升并发处理能力。
[0075] 实施例二、
[0076] 根据实施例一所描述的方法,以下将举例作进一步详细说明。
[0077] 在本实施例中,将以该存储系统中的数据处理装置具体集成在存储服务器中为例进行说明。
[0078] 如图2a所示,该存储系统可以包括业务侧设备和存储服务器,具体实现时,该存储服务器可以分为接入层和存储层,如下:
[0079] 接入层主要负责接收业务侧的数据处理请求,并将接收到的数据处理请求转发到指定的存储层,比如转发给存储层中相应的存储机等,该接入层还可以接收存储层返回的处理结果。该接入层可以支持横向扩展,比如,可以包括“access:0”、“access:0”、……“access:n”等,简称“a:0”、“a:0”、……“a:n”;
[0080] 存储层主要负责数据的存储,以及多级键(key)数据的解析和处理等,为了节省存储空间,在写入数据时,可以对数据进行压缩,读取时再进行解压缩,具体可参见实施例一,在此不再赘述。
[0081] 此外,为了提高数据的可靠性,还可以采用主和备的方式来存储这些数据,比如,参见图2a,可以包括“主:cache:0”、“主:cache:1”、……“主:c:n”,简称“主:c:0”、“主:c:1”、……“主:c:n”,以及“备:c:0”、“备:c:1”、……“备:c:n”等,具体的备份方法可参见现有技术,在此不作赘述。
[0082] 在具体实施时,首先,需要根据具体的业务场景构建相应的请求树,该请求树可以由维护人员预先根据业务来进行来构建,也可以由该存储系统自行进行建立,比如可以通过获取业务信息,并对该业务信息进行分析,以提取键信息,然后基于该键信息建立该业务的请求树,等等。
[0083] 其中,该键信息可以包括键标识、以及各个键之间的关联关系等信息。
[0084] 例如,以“红包”为例,假设一个标识为“红包1”的红包的记录的信息包括:红包的总个数、可领取数、已领取数和领取详情等信息,则可以根据确定“键(即key)”可以包括“红包1”、“总个数”、“可领取数”、“已领取数”和“领取详情”等,其中,“红包1”为主键,而“总个数”、“可领取数”、“已领取数”和“领取详情”均为该主键的子键,即“总个数”、“可领取数”、“已领取数”和“领取详情”与“红包1”之间的关联关系为从属关系,而“总个数”、“可领取数”、“已领取数”和“领取详情”四者之间的关系为平级关系,在确定了键信息之后,便可以据此建立该红包对应的请求树,比如,参见图2b。
[0085] 其次,在建立了请求树之后,便可以通过接入层来接收业务侧发送的数据处理请求,并传送给存储层,由存储层基于该请求树,对该数据处理请求进行处理,比如解析该数据处理请求,然后根据该请求树去确定与需要处理的键对应的叶子节点,并对该叶子节点进行读取、写入、更新或删除等操作,以下将进行详细说明。
[0086] 如图2c所示,一种存储系统中的数据处理方法,具体流程可以如下:
[0087] 201、业务侧设备向存储服务器发送数据处理请求,比如TreeReq,其中,该数据处理请求可以携带业务标识,并指示需要处理的键、以及处理内容等信息。
[0088] 其中,该数据处理请求可以是数据读取请求、数据写入请求、数据更新请求或数据删除请求等,根据不同的请求类型,所指示的处理内容也会有所不同,比如,可以如下:
[0089] 若是数据读取请求,则指示的处理内容为读取数据;若是数据更新请求,则指示的处理内容为更新数据,比如对键进行更新;若是数据写入请求,则指示的处理内容为写入数据;而若是数据删除请求,则指示的处理内容为删除数据,等等。
[0090] 其中,业务标识指的是可以用于识别业务的信息,比如业务名称、业务编号或业务代码等等,例如,在“红包”的应用场景下,该业务标识具体可以为“红包”,或者是“0001”,即这个业务的业务代码,等等。
[0091] 可选的,数据处理请求中所指示的需要处理的键可以是一个,也可以是多个,即可以将多个操作封装在同一个数据处理请求中,比如可以在一个数据处理请求中包含两个操作,一个操作是执行“已领取数”加1,一个是执行“可领取数”减1,等等。
[0092] 当该需要处理的键有多个时,还可以在该数据处理请求中指示这多个键之间的操作关系(或者说是执行关系),比如可以设置当其中任意一个操作为失败时,则取消所有的操作(为了描述方便,本发明实施例将这种操作关系称为第一关系);或者,还可以设置各个操作的执行不影响其他的操作,即不管操作是否成功,保留其他操作的执行结果(为了描述方便,本发明实施例将这种操作关系称为第二关系);又或者,还可以设置某些操作之间的关联关系,即若某个操作执行失败,则只取消与之关联的其他操作,而不影响与之不具有关联关系的其他操作(为了描述方便,本发明实施例将这种操作关系称为第三关系),等等。
[0093] 其中,第一关系、第二关系和第三关系可以根据实际应用的需求进行设置,可以分别采用不同的标识来对其进行识别,比如,可以将第一关系标识为“break”,将第三关系标识为“continue”,而对于第二关系,则需要标明哪些键之间是具有“continue”关系,哪些键之间是具有“break”关系,这样,当该存储系统中的数据处理装置识别到这些信息时,便可以采用相应的执行方式,详见步骤205。
[0094] 202、存储服务器在接收到该数据处理请求后,解析该数据处理请求,以提取其中的业务标识,以及指示信息,比需要处理的键、以及处理内容等。
[0095] 例如,该存储服务器具体可以通过接入层接收业务侧发送的数据处理请求,并由接入层将该数据处理请求传送给存储层,由存储层对该数据处理请求进行解析,以提取其中的业务标识,以及指示信息,比需要处理的键、以及处理内容等。
[0096] 203、存储服务器根据该业务标识获取对应的请求树。
[0097] 例如,具体可以由该存储服务器的存储层根据该业务标识获取对应的请求树。
[0098] 其中,该请求树可以包括多个叶子节点,每个键都有其对应的叶子节点,叶子节点中存储有相应的键的value数据。
[0099] 例如,还是以“红包”为例,则此时可以获取“红包”对应的请求树,比如,可以是图2b所示的请求树,即以“红包1”作为根节点,“总个数”、“可领取数”、“已领取数”和“领取详情”作为根节点“红包1”的叶子节点(即子节点)。
[0100] 204、存储服务器根据该需要处理的键确定访问路径,基于该访问路径确定访问节点,得到该需要处理的键对应的叶子节点。
[0101] 例如,具体可以由存储层根据该需要处理的键确定访问路径,然后基于该访问路径确定访问节点,得到该需要处理的键对应的叶子节点。
[0102] 比如,还以“红包”为例,如图2b所示,若有人领取了红包,需要对“领取详情”进行修改,则可以在数据处理请求中指示需要处理的键为“红包1”下的“领取详情”,处理内容为对“领取详情”的数据进更新,那么,此时,便可以根据该需要处理的键确定访问路径为“红包1——领取详情”,进而确定该需要处理的键对应的叶子节点为根节点“红包1”下的叶子节点“领取详情”。
[0103] 又比如,如图2b所示,若用户需要查看“已领取数”和“被领取数”,则可以在数据处理请求中指示需要处理的键为“红包1”下的“已领取数”和“被领取数”,处理内容为对“已领取数”和“被领取数”进行读取,那么,此时,便可以确定第一个操作的访问路径为“红包1——已领取数”,对应的叶子节点为“已领取数”,第二个操作的访问路径为“红包1——被领取数”,对应的叶子节点为“被领取数”。
[0104] 以此类推,等等。
[0105] 205、存储服务器根据该处理内容对确定的叶子节点进行处理。
[0106] 例如,具体可以由存储层根据该处理内容对确定的叶子节点进行处理,比如,进行写入、读取、更新和删除等,具体可以如下:
[0107] (1)写入;
[0108] 若该处理内容指示写入数据,且指示该键的值,则在确定的叶子节点上添加子节点,并根据指示的键的值在该叶子节点上写入数据。
[0109] 例如,具体可以由存储层在该确定的叶子节点上添加子节点,并根据指示的键的值在该叶子节点上写入数据。
[0110] 需说明的是,在指示该键的值时,除了可以指示该键本身的值之外,还可以包括指示即将建立的该键的子建的值,比如,以“红包”下的“领取详情”为例,当0个“红包”被领取时,“领取详情”的值为“0”个,而当有1个红包被领取时,比如a领取了一个“1元”的红包时,则可以在处理内容中指示在“领取详情”中写入“领取详情”的值为“1”个,且领取人为“a”,金额为“1元”,那么,此时,便可以根据该指示将请求树中叶子节点“领取详情”的值修改为“1”个,且可以在“领取详情”下添加相应的子节点,如“被领红包:1”,且“被领红包:1”的子节点为“领取人:a”和“金额:1元”等,参加图2d。
[0111] 同理,若b也领取了一个“2元”的红包,则可以将在处理内容中指示在“领取详情”中写入“领取详情”的值为“2”个,且领取人为“b”,金额为“2元”,那么,此时,便可以根据该指示将请求树中叶子节点“领取详情”的值修改为“2”个,且可以在“领取详情”下添加相应的子节点,如“被领红包:2”,且“被领红包:2”的子节点为“领取人:b”和“金额:2元”等,参加图2d。
[0112] 可选的,为了节省存储空间,在写入数据时,可以对数据进行压缩,比如,具体可以根据指示的键的值确定需要写入的数据,并对数据进行压缩,得到压缩数据,然后,将该压缩数据写入该叶子节点。
[0113] 其中,压缩时所采用的压缩算法可以根据实际应用的需求进行设置。
[0114] (2)读取;
[0115] 若该处理内容指示读取数据,则存储服务器读取该确定的叶子节点上所存储的数据,并将读取的数据返回给业务侧。
[0116] 例如,具体可以通过存储层读取该叶子节点上存储的数据,然后将读取的数据通过接入层返回给业务侧
[0117] 比如,以“红包”为例,若该处理内容指示读取“可领取数”的数据,则此时,可以从叶子节点“可领取数”上读取相应的数据,如“2个”等,然后将读取到的数据返回给业务侧,如通过接入层返回给业务侧。
[0118] 需说明的是,若在写入时,已经对数据进行了压缩,则在读取时,需要采用与压缩算法相应的解压缩算法进行解压缩,比如,具体可以读取该叶子节点上存储的压缩数据,对该压缩数据进行解压缩,得到解压缩数据,然后将解压缩数据返回给业务侧。
[0119] (3)更新;
[0120] 若该处理内容指示对该键进行更新,且指示该键的值,则根据指示的键的值对该确定的叶子节点上存储的数据进行更新。
[0121] 例如,具体可以由存储层根据指示的键的值对该确定的叶子节点上存储的数据进行更新。
[0122] 需说明的是,这里的更新主要指的是修改,比如,若原来叶子节点“可领取数”指示可领取的红包为2个,而此时需要将该数目修改为1个,则可以在数据处理请求中指示需要处理的键为“红包1”下的“可领取数”,并指示该键的值为“1”个,那么,此时便可以根据该键的值将“可领取数”上的“2”个修改为“1”个,以此类推,在此不再赘述。
[0123] (4)删除;
[0124] 若该处理内容指示删除数据,则删除确定的叶子节点。
[0125] 例如,具体可以由存储层删除该确定的叶子节点
[0126] 比如,若该处理内容指示删除“红包1”的相关记录,则此时可以将“红包1”对应的叶子节点都进行删除,包括节点“红包1”以及“红包1”下的其他子节点。
[0127] 需说明的是,当该需要处理的键有多个时,在对各个确定的叶子节点进行处理时还需考虑到各个操作直接的操作关系,例如,以在“红包”应用场景,且操作关系包括“continue”和“break”为例,则具体可以如下:
[0128] 如果“被领取数”加1和“已领取数”减1之间的操作关系为“break”,则只有当“被领取数”加1和“已领取数”减1的操作均为成功,才会保存对“被领取数”和“已领取数”的修改,而不可以只保存“被领取数”加1的操作结果,或者只保存“已领取数”减1的操作结果;比如,如果“被领取数”加1操作成功,而“已领取数”减1操作失败,则需要取消“被领取数”加1的操作,即既不对“已领取数”进行修改,也不对“被领取数”进行修改,以保证事务的完整性,以及降低操作的复杂度。反之,若“被领取数”加1和“已领取数”减1之间的操作关系为“continue”,则“被领取数”加1是否操作成功,并不会影响“已领取数”减1的操作结果,同理,“已领取数”减1是否操作成功,也不会影响“被领取数”加1的操作结果,比如,如果“被领取数”加1操作成功,而“已领取数”减1操作失败,则需要保留“被领取数”加1的操作,即对“被领取数”进行加1,而不对“已领取数”进行减1。
[0129] 可选的,还可以为处理内容设置相应的限制条件,只要满足该条件,才可以执行该数据处理请求。例如,以“红包”为例,在红包领取后,需要将“已领取数”进行加1,则在增加“已领取数”时,可以设置一个条件,比如该“已领取数”需要小于红包的“总个数”,只有在该“已领取数”需要小于红包的“总个数”时,才可以执行加1的操作,否则,则拒绝该数据处理请求。
[0130] 可选的,在拒绝该数据处理请求时,还可以提供相应的提示信息,比如拒绝的原因等。
[0131] 其中,该预置条件的具体内容可以根据实际应用的需求进行设置,可以预设在该存储系统中,也可以携带在数据处理请求中,在此不再赘述。
[0132] 由上可知,本实施例采用由存储服务器接收业务侧发送的数据处理请求,其中,该数据处理请求携带业务标识,并指示需要处理的键、以及处理内容,根据该业务标识获取对应的请求树,该请求树包括多个叶子节点,确定与该需要处理的键对应的叶子节点,然后,根据该处理内容对确定的叶子节点进行处理;由于该方案可以根据需要处理的键直接获取对应的叶子节点进行处理,即只需拉取需要处理的部分value数据进行处理,因此,相对于现有技术中只能拉取全量的value数据的方案而言,大大节省了网络资源的消耗,以及提高处理效率;而且,由于该方案在对数据进行处理时,都无需业务侧参与,因此,有利于保证事务的完整性,以及降低操作的复杂性,适合大规模海量数据处理,可以提升存储系统的并发处理能力;总而言之,该方案不仅可以节省网络资源的消耗,提高处理效率,而且可以提升并发处理能力。
[0133] 实施例三、
[0134] 为了更好地实现以上方法,本发明实施例还提供一种存储系统中的数据处理装置,简称数据处理装置,如图3a所示,该数据处理装置包括接收单元301、获取单元302、确定单元303和处理单元304,如下:
[0135] (1)接收单元301;
[0136] 接收单元301,用于接收业务侧发送的数据处理请求,该数据处理请求携带业务标识,并指示需要处理的键、以及处理内容等信息。
[0137] 其中,该数据处理请求可以是数据读取请求、数据写入请求、数据更新请求或数据删除请求等,根据不同的请求类型,所指示的处理内容也会有所不同,比如,可以如下:
[0138] 若是数据读取请求,则指示的处理内容为读取数据;若是数据更新请求,则指示的处理内容为更新数据,比如对键进行更新;若是数据写入请求,则指示的处理内容为写入数据;而若是数据删除请求,则指示的处理内容为删除数据,等等。
[0139] 其中,业务标识指的是可以用于识别业务的信息,比如业务名称、业务编号或业务代码等等。
[0140] (2)获取单元302;
[0141] 获取单元302,用于根据该业务标识获取对应的请求树,该请求树包括多个叶子节点。
[0142] 该请求树可以根据实际应用的需求进行设置,比如,可以由维护人员预先根据业务进行来构建,或者,也可以由该存储系统自行进行建立,比如可以通过获取业务信息,并对该业务信息进行分析,以提取键信息,然后基于该键信息建立该业务的请求树,等等;即如图3b所示,该数据处理装置还可以包括建立单元305,如下:
[0143] 该接收单元301,还可以用于接收请求树建立请求,该请求树建立请求携带业务标识;
[0144] 该获取单元302,还可以用于根据该业务标识获取业务信息;
[0145] 该建立单元305,用于对该业务信息进行分析,以提取键信息,根据该键信息建立该业务的请求树。
[0146] 其中,该键信息可以包括键标识、以及各个键之间的关联关系等信息;键标识指的是可以用于识别键的信息,比如可以是键的名称、编号或代码等,各个键之间的关联关系可以是平级关系、也可以是从属(如父子等)关系,在此不再赘述。
[0147] (3)确定单元303;
[0148] 确定单元303,用于确定与该需要处理的键对应的叶子节点;
[0149] 例如,该确定单元303,具体可以用于根据该需要处理的键确定访问路径,基于该访问路径确定访问节点,得到该需要处理的键对应的叶子节点。
[0150] (4)处理单元304;
[0151] 处理单元304,用于根据该处理内容对确定的叶子节点进行处理。
[0152] 其中,该处理可以包括对数据的写入、读取、更新和删除等处理,例如,该处理单元304,具体可以用于执行如下操作:
[0153] 若该处理内容指示读取数据,则读取该叶子节点上存储的数据,将读取的数据返回给业务侧;和/或,
[0154] 若该处理内容指示对该键进行更新,且指示该键的值,则根据指示的键的值对确定的叶子节点上存储的数据进行更新;和/或,
[0155] 若该处理内容指示写入数据,且指示该键的值,则在确定的叶子节点上添加子节点,并根据指示的键的值在该叶子节点上写入数据;和/或,
[0156] 若该处理内容指示删除数据,则删除确定的叶子节点。
[0157] 可选的,为了节省存储空间,在写入时,可以对数据进行压缩,即:
[0158] 该处理单元304,具体可以用于在该处理内容指示写入数据,且指示该键的值时,根据指示的键的值确定需要写入的数据,并对数据进行压缩,得到压缩数据,将该压缩数据写入该叶子节点。
[0159] 其中,压缩时所采用的压缩算法可以根据实际应用的需求进行设置。
[0160] 若在写入时,已经对数据进行了压缩,则在读取时,需要采用与压缩算法相应的解压缩算法进行解压缩,即:
[0161] 该处理单元304,具体可以用于在该处理内容指示读取数据时,读取该叶子节点上存储的压缩数据,对该压缩数据进行解压缩,得到解压缩数据,将解压缩数据返回给业务侧。
[0162] 可选的,数据处理请求中所指示的需要处理的键可以是一个,也可以是多个,即可以将多个操作封装在同一个数据处理请求中,比如可以在一个数据处理请求中包含两个操作,一个操作是执行对叶子节点1上的数据进行加1,一个是执行对叶子节点2上的数据进行减1,等等。
[0163] 当该需要处理的键有多个时,还可以在该数据处理请求中指示这多个键之间的操作关系,比如可以设置当其中任意一个操作为失败时,则取消所有的操作;或者,还可以设置各个操作的执行不影响其他的操作,即不管操作是否成功,保留其他操作的执行结果;又或者,还可以设置某些操作之间的关联关系,即若某个操作执行失败,则只取消与之关联的其他操作,而不影响与之不具有关联关系的其他操作,等等。即该处理单元304,还可以用于:
[0164] 若该操作关系为预设第一关系,则在该多个键中的任意一个键所对应的叶子节点操作失败时,取消该多个键中所有键相应的叶子节点的操作;
[0165] 若该操作关系为预设第二关系,则在该多个键中的任意一个键所对应的叶子节点操作失败时,取消与该操作失败的键具有关联关系的键所对应的叶子节点的操作;
[0166] 若该操作关系为预设第三关系,则在该多个键中的任意一个键所对应的叶子节点操作失败时,保留该多个键中其他键相应的叶子节点的操作。
[0167] 其中,第一关系、第二关系和第三关系可以根据实际应用的需求进行设置,可以分别采用不同的标识来对其进行识别,比如,可以将第一关系标识为“break”,将第三关系标识为“continue”,而对于第二关系,则需要标明哪些键之间是具有“continue”关系,哪些键之间是具有“break”关系,这样,当该存储系统中的数据处理装置识别到这些信息时,便可以采用相应的执行方式。
[0168] 可选的,还可以为处理内容设置相应的限制条件,只要满足该条件,才可以执行该数据处理请求,即如图3b所示,该数据处理装置还可以包括判断单元306,如下:
[0169] 该判断单元306,可以用于确定该处理内容是否符合预置条件,在确定不符合预置条件时,拒绝该数据处理请求。
[0170] 则此时,处理单元304,具体可以用于在判断单元306确定该处理内容符合预置条件时,根据该处理内容对确定的叶子节点进行处理。
[0171] 可选的,判断单元306在拒绝该数据处理请求时,还可以提供相应的提示信息,比如拒绝的原因等。
[0172] 其中,该预置条件的具体内容可以根据实际应用的需求进行设置,可以预设在该存储系统中,也可以携带在数据处理请求中,在此不再赘述。
[0173] 具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
[0174] 该数据处理装置可以作为独立的实体,也可以集成在存储侧,比如存储服务器等设备中。
[0175] 由上可知,本实施例的数据处理装置的接收单元301可以接收业务侧发送的数据处理请求,其中,该数据处理请求携带业务标识,并指示需要处理的键、以及处理内容,然后由获取单元302根据该业务标识获取对应的请求树,该请求树包括多个叶子节点,并由确定单元303确定与该需要处理的键对应的叶子节点,再然后,由处理单元304根据该处理内容对确定的叶子节点进行处理;由于该方案可以根据需要处理的键直接获取对应的叶子节点进行处理,即只需拉取需要处理的部分value数据进行处理,因此,相对于现有技术中只能拉取全量的value数据的方案而言,大大节省了网络资源的消耗,以及提高处理效率;而且,由于该方案在对数据进行处理时,都无需业务侧参与,因此,有利于保证事务的完整性,以及降低操作的复杂性,适合大规模海量数据处理,可以提升存储系统的并发处理能力;总而言之,该方案不仅可以节省网络资源的消耗,提高处理效率,而且可以提升并发处理能力。
[0176] 实施例四、
[0177] 相应的,本发明实施例还提供一种存储系统,可以包括本发明实施例所提供的任一种数据处理装置,该数据处理装置可参见实施例三,例如,具体可以如下:
[0178] 数据处理装置,用于接收业务侧发送的数据处理请求,该数据处理请求携带业务标识,并指示需要处理的键、以及处理内容;根据该业务标识获取对应的请求树,该请求树包括多个叶子节点;确定与该需要处理的键对应的叶子节点;根据该处理内容对确定的叶子节点进行处理。
[0179] 其中,该处理可以包括对数据的写入、读取、更新和删除等处理,例如,该数据处理装置,具体可以用于执行如下操作:
[0180] 若该处理内容指示读取数据,则读取该叶子节点上存储的数据,将读取的数据返回给业务侧;和/或,
[0181] 若该处理内容指示对该键进行更新,且指示该键的值,则根据指示的键的值对确定的叶子节点上存储的数据进行更新;和/或,
[0182] 若该处理内容指示写入数据,且指示该键的值,则在确定的叶子节点上添加子节点,并根据指示的键的值在该叶子节点上写入数据;和/或,
[0183] 若该处理内容指示删除数据,则删除确定的叶子节点。
[0184] 可选的,数据处理请求中所指示的需要处理的键可以是一个,也可以是多个,即可以将多个操作封装在同一个数据处理请求中,比如可以在一个数据处理请求中包含两个操作(如OpeReg),一个操作是执行对叶子节点1上的数据进行加1,一个是执行对叶子节点2上的数据进行减1,等等。
[0185] 当该需要处理的键有多个时,还可以在该数据处理请求中指示这多个键之间的操作关系,则此时:
[0186] 该数据处理装置,还可以用于执行如下操作:
[0187] 若该操作关系为预设第一关系,则在该多个键中的任意一个键所对应的叶子节点操作失败时,取消该多个键中所有键相应的叶子节点的操作;
[0188] 若该操作关系为预设第二关系,则在该多个键中的任意一个键所对应的叶子节点操作失败时,取消与该操作失败的键具有关联关系的键所对应的叶子节点的操作;
[0189] 若该操作关系为预设第三关系,则在该多个键中的任意一个键所对应的叶子节点操作失败时,保留该多个键中其他键相应的叶子节点的操作。
[0190] 其中,第一关系、第二关系和第三关系可以根据实际应用的需求进行设置,可以分别采用不同的标识来对其进行识别,比如,可以将第一关系标识为“break”,将第三关系标识为“continue”,而对于第二关系,则需要标明哪些键之间是具有“continue”关系,哪些键之间是具有“break”关系,这样,当该存储系统中的数据处理装置识别到这些信息时,便可以采用相应的执行方式。
[0191] 可选的,还可以为处理内容设置相应的限制条件,只要满足该条件,才可以执行该数据处理请求,即:
[0192] 该数据处理装置,还可以用于确定该处理内容是否符合预置条件,若是,则执行根据该处理内容对确定的叶子节点进行处理的步骤(即步骤104),若否,则拒绝该数据处理请求。
[0193] 其中,该预置条件的具体内容可以根据实际应用的需求进行设置,可以预设在该存储系统中,也可以携带在数据处理请求中,在此不再赘述。
[0194] 此外,该存储系统还可以包括其他的设备,比如业务侧设备,如下:
[0195] 该业务侧设备,可以用于向存储系统中的数据处理装置发送数据处理请求,该数据处理请求可以携带业务标识,并指示需要处理的键、以及处理内容等信息。
[0196] 该业务侧设备,还可以用于接收该数据处理装置返回的处理结果,比如返回的数据等。
[0197] 以上各个设备的具体实施可参见前面的实施例,在此不再赘述。
[0198] 由于该存储系统可以包括本发明实施例所提供的任一种数据处理装置,因此,可以实现本发明实施例所提供的任一种数据处理装置所能实现的有益效果,详见前面的实施例,在此不再赘述。
[0199] 本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
[0200] 以上对本发明实施例所提供的一种存储系统中的数据处理方法、装置和系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。