一种数据处理方法、设备和系统的制作方法
【专利摘要】本发明实施例公开了一种数据处理方法、设备和系统,该方法包括:分片服务器接收主服务器转发的数据查询请求,其中携带有用于指示请求读取的数据所在行的key字段和用于指示请求读取的数据所在列的列表字段;所述分片服务器根据所述key字段和列表字段在自身存储的数据中查询对应的列数据,并将查询到的列数据以数组的形式返回给所述主服务器。在本发明中,降低了分布式列存储数据库系统中数据处理的性能消耗,提高了数据处理效率。
【专利说明】一种数据处理方法、设备和系统
【技术领域】
[0001]本发明涉及通信【技术领域】,特别是涉及一种数据处理方法、设备和系统。
【背景技术】
[0002]分布式列存储数据库是一种适合快速查询的、分布式的优良解决方案,它在提供海量数据存储的同时,还可以有效地提高对数据的查询速度。
[0003]现有的分布式列存储技术方案中主要聚焦于如何实现数据查询,而没有关注数据分析的需求。而实际应用中,数据库的主要功能除了查询之外,大部分是分析型需求。例如,统计在某种条件下,某个列的总和;对于某几个列进行计算,如计算市话分钟与长话分钟的比例等。
[0004]针对上述问题,目前分布式系统中的解决方案可以采用分布式计算的方法来实现。例如,基于Hadoop的系统,采用Mapreduce作为计算框架,其Map接口为dbinputformat,该接口提供对数据行的读入。具体如下:
[0005]I)、inputformat会按照key划分为几个分片;
[0006]2 )、每个Map读入一个分片;
[0007]3)、Map内部调用分布式数据库提供的读写接口,按照key,读取一行记录。
[0008]在Map内部实现分析的时候,读入的是一行一行的行记录,首先需要按照字段位置区分出具体要处理的字段,然后再进行处理;有些操作需要进入reduce阶段,例如求和。显然,这种按照行读取处理的方式,没有利用列存储数据的优势。
[0009]在实现本发明的过程中,发明人发现现有技术中至少存在以下问题:
[0010]由于分布式列存储,每个列族保存在一个文件中,所以每次读取一行记录的接口,需要按照key从多个文件读取响应的字段,然后合并为一条记录返回;同时,在Map阶段,由于需要针对某个列进行操作,还需要将行记录按照字段分解,才能进一步操作,造成了合并与拆分的两次性能损耗。
【发明内容】
[0011]本发明实施例提供一种数据处理方法、设备和系统,以降低基于分布式列存储数据库系统的数据处理的性能消耗,提高数据处理效率。
[0012]为了达到以上目的,本发明实施例提供了一种数据处理方法,应用于包括主服务器和分片服务器的分布式列存储数据库系统中,该方法包括:
[0013]分片服务器接收主服务器转发的数据查询请求,其中携带有用于指示请求读取的数据所在行的key字段和用于指示请求读取的数据所在列的列表字段;
[0014]所述分片服务器根据所述key字段和列表字段在自身存储的数据中查询对应的列数据,并将查询到的列数据以数组的形式返回给所述主服务器。
[0015]本发明实施例还提供了一种分布式列存储数据库系统,包括主服务器和分片服务器,[0016]所述主服务器用于,接收客户端发起的数据查询请求,并将该数据查询请求转发给分片服务器;以及接收分片服务器返回的数组形式的数据;
[0017]所述分片服务器用于,接收主服务器转发的数据查询请求,其中携带有用于指示请求读取的数据所在行的key字段和用于指示请求读取的数据所在列的列表字段;根据所述key字段和列表字段在自身存储的数据中查询对应的列数据,并将查询到的列数据以数组的形式返回给所述主服务器。
[0018]本发明实施例还提供一种分片服务器,应用于包括主服务器的分布式列存储数据库系统中,所述分布服务器包括:一个数据片模块Hregion,至少一个列模块Hstore,以及至少一个列存储文件HstoreFile ;其中:
[0019]所述Hregion用于,接收主服务转发的数据查询请求,其中携带有用于指示请求读取的数据所在行的key字段和用于指示请求读取的数据所在列的列表字段;根据所述列表字段确定对应的Hstore,并将该数据查询请求转发给该Hstore ;接收Hstore返回的data文件,根据该data文件生成data数组,并将该data数组返回给主服务器;
[0020]所述Hstore用于,当接收到Hregion转发的数据查询请求时,根据所述key字段确定对应的HstoreFile,并将该数据查询请求转发给该HstoreFile ;接收HstoreFile返回的data文件,并将该data文件返回给Hregion ;
[0021]所述HstoreFile用于,当接收到Hstore转发的数据查询请求时,向Hstore返回整个data文件。
[0022]本发明上述实施例中,分片服务器接收主服务器转发的数据查询请求后,根据key字段和列表字段在自身存储的数据中查询对应的列数据,并将查询到的列数据以数组的形式返回给主服务器,降低了分布式列存储数据库系统中数据处理的性能消耗,提高了数据
处理效率。
【专利附图】
【附图说明】
[0023]图1为现有分布式列存储数据库系统结构示意图;
[0024]图2为现有分布式数据库读取数据的流程示意图;
[0025]图3为现有Map任务处理数据的流程示意图;
[0026]图4为本发明实施例提供的一种数据处理方法的流程示意图;
[0027]图5为本发明实施例提供的一种数据处理方法的流程示意图;
[0028]图6为本发明实施例提供的一种数据处理方法的流程示意图;
[0029]图7为本发明实施例提供的一种分布式列存储数据库系统的结构示意图;
[0030]图8为本发明实施例提供的一种分片式服务器的结构示意图。
【具体实施方式】
[0031]为了更好地理解本发明实施例提供的技术方案,下面对现有分布式列存储数据库系统架构、以及基于现有分布式列存储数据库系统架构的常规的数据处理方法进行简单的描述。
[0032]参见图1,现有分布式列存储数据库系统包括主服务器(Master)和分片服务器(Tablet Server),该分片服务器包括:一个数据片模块(Hregion),至少一个列模块(Hstore),以及至少一个列存储文件(HstoreFile);其中:
[0033]一个Hregion中可以存储一个或多个分片数据;该分片数据包括原数据表一行或多行的全部数据,分片的多少可以根据并行处理数据的设备的数量确定;
[0034]—个分片服务器中,Hregion中存储的数据按列或列族存储在不同的Hstore中(即一个Hstore中存储有一个列或一个列家族的数据);Hstore中存储的数据分行存储在HstoreFile中。其中,在分布式列存储数据库中,将经常被同时访问的几个列定义为列家族。
[0035]基于上述分布式列存储数据库系统,现有技术中数据处理流程可以如图2和图3所示。其中,该数据处理流程主要涉及两个流程:第一个是分布式数据库读取数据的过程;第二个是Map任务处理数据的流程。
[0036]参见图2,现有技术中分布式数据库读取数据的过程可以包括以下步骤:
[0037]步骤201、主服务器接收客户端发送的数据查询请求,根据其中携带的用于指示请求读取的数据所在行的key字段将该数据查询请求转发给对应的Hregion。
[0038]步骤202、Hregion接收数据查询请求,遍历Hstore,以查询相应列中对应key字段的数据。
[0039]步骤203、Hstore根据key字段确定对应的HstoreFile ;
[0040]步骤204、HstoreFile根据key字段对应的索引确定请求读取的数据的偏移量(offset),并将该偏移量返回给Hstore。
[0041]步骤205、Hstore根据该偏移量读取对应的数据,并将读取的数据返回给Hregion0
[0042]步骤206、Hregion拼接所有Hstore返回的结果。
[0043]步骤207、Hregion将拼接后的结果返回给主服务器。
[0044]其中,主服务器得到结果后,将其输出给Map任务。
[0045]参见图3,为现有技术中Map任务处理数据的流程可以包括以下步骤:
[0046]步骤301、Map读入一条记录(即一行数据,Map以逐行读取的方式读入数据)。
[0047]步骤302、按照元数据信息从读入的记录中拆分出相应的字段值。
[0048]其中,由于Map读入数据时是以按行读取的方式进行的,而需要进行分析和处理的数据为数据表中某列或某几列的数据,因此,Map读入数据后,需要根据元数据信息从读入的数据中拆分出相应的字段值(如年龄)。
[0049]步骤303、对得到的字段值进行相应处理(如求和)。
[0050]在上述方案中,在进行数据读取时仍然为按行读取,而由于分布式列存储数据库系统中,每个列或列族被保存在一个文件中,按行读取数据的接口,需要按照key从多个文件读取响应的字段,然后合并为一条记录返回,数据读取效率较低;进一步地,在Map任务处理阶段,由于需要针对某个列进行操作,按行读取数据后,需要将行记录按照字段分解,才能进一步操作,增加了数据处理的性能消耗。
[0051]针对上述问题,本发明实施例提供了一种应用于分布式列存储数据库系统中的数据处理的技术方案。在该技术方案中,客户端向分布式列存储数据库系统的主服务器发送的数据查询请求中,不仅携带有用于指示请求读取的数据所在行的key字段,还包括用于指示请求读取的数据所在列的列表字段;主服务器接收到数据查询请求后,根据key字段将该数据查询请求转发给对应的分片服务器;分片服务器接收主服务器转发的数据查询请求后,根据key字段和列表字段在自身存储的数据中查询对应的列数据,并将查询到的列数据以数组的形式返回给主服务器,降低了分布式列存储数据库系统中数据处理的性能消耗,提高了数据处理效率。
[0052]下面将结合本发明的实施例中的附图,对本发明的实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明的实施例保护的范围。
[0053]如图4所示,为本发明实施例提供的一种数据处理方法的流程示意图,可以包括以下步骤:
[0054]步骤401、分片服务器接收主服务器转发的数据查询请求,其中携带有用于指示请求读取的数据所在行的key字段和用于指示请求读取的数据所在列的列表字段。
[0055]具体的,对于分布式列存储数据库系统,当用户需要进行数据查询时,可以通过在客户端输入相应的查询参数以向分布式列存储数据库系统的主服务器发起数据查询请求。
[0056]为了充分利用分布式列存储数据库系统的优势,在本发明实施例中,客户端向分布式列存储数据库系统的主服务器发送的数据查询请求中,除了携带常规的用于指示请求读取的数据所在行的key字段之外,还携带有用于指示请求读取的数据所在列的列表字段。
[0057]主服务器接收到客户端发送的数据查询请求后,根据其中携带的key字段确定所请求查询的数据所在的分片服务器,并将该数据查询请求转发给对应的分片服务器。
[0058]步骤402、分片服务器根据key字段和列表字段在自身存储的数据中查询对应的列数据,并将查询到的列数据以数组的形式返回给主服务器。
[0059]具体的,在本发明实施例中,分片服务器根据key字段和列表字段在自身存储的数据中查询对应的列数据,并将查询到的列数据以数组的形式返回给主服务器的具体实现可以包括以下步骤:
[0060]步骤4021、Hregion根据数据查询请求中携带的列表字段确定对应的Hstore,并将该数据查询请求转发给该Hstore。
[0061]具体的,Hregion中存储的分片数据按列或列族存储在Hstore中,当Hregion接收到数据查询请求后,根据其中携带的列表字段确定请求读取的数据所在的列,进而确定存储该列数据的Hstore,并将该数据查询请求转发给该Hstore。
[0062]步骤4022、Hstore根据数据查询请求中携带的key字段确定对应的HstoreFile,并将该数据查询请求转发给该HstoreFile。
[0063]具体的,Hstore中存储的数据按行存储在HstoreFile中,当Hstore接收到数据查询请求后,根据其中携带的key字段确定请求读取的数据所在的行,进而确定存储该行数据的HstoreFile,并将该数据查询请求转发给该HstoreFile。
[0064]步骤4023、HstoreFile接收到数据查询请求后,向Hstore返回整个data文件。
[0065]具体的,现有技术中,HstoreFile接收到数据查询请求后,需要根据key字段对应的索引确定请求读取的数据的offset,并将该offset返回给Hstore,由Hstore根据该offset读取对应行的整行数据。[0066]为了提高数据处理效率,在本发明实施例中,HstoreFile接收到数据查询请求后,直接将整个data文件返回给Hstore,使Hstore直接得到相应的列数据,而无需根据offset去读取整行数据。
[0067]步骤4024、Hstore将接收到的data文件返回给Hregion。
[0068]步骤4025、Hregion根据接收到的data文件生成data数组,并将该data数组返回给主服务器。
[0069]通过以上方式,实现了分布式列存储数据库系统中列数据的读取,充分利用了列存储数据的优势,降低了数据读取的性能消耗,提高了数据处理的效率。
[0070]主服务器接收到分片服务器返回的数据后,需要将数据输出给Map任务,以进一步地进行Map任务处理。
[0071]如图6所示,本发明实施例提供的数据处理方法还可以包括以下步骤:
[0072]步骤601、Map 读入一个 ColRecorcL
[0073]具体的,在本发明实施例中,定义如下结构:
[0074]ColRecord (coldata[l],coldata[2],......coldata[n])
[0075]其中,η为所述分片服务器查询到的列数据的列数,coldata[i]为所述分片服务器查询到的列数据中的一列数据,i为不大于η的正整数。
[0076]Map接收到主服务器输出的data数组数据后,按照上述数据结构读入数据。
[0077]步骤602、Map根据该ColRecord得到各个列数据。
[0078]步骤603、Map根据得到的列数据按列进行数据处理。
[0079]由于主服务器输出给Map任务的数据不再是整行数据,而是data数组;Map接收到主服务器输出的data数组数据后,可以按照ColRecord结构读入数据,直接得到需要处理的各列数据,从而对各列数据按列进行分析和处理,而无需再对读入的行记录按照字段分解,进一步降低了数据处理的性能消耗,提高了数据处理效率。
[0080]通过以上描述可以看出,在本发明实施例提供的技术方案中,客户端向分布式列存储数据库系统的主服务器发送的数据查询请求中,不仅携带有用于指示请求读取的数据所在行的key字段,还包括用于指示请求读取的数据所在列的列表字段;主服务器接收到数据查询请求后,根据key字段将该数据查询请求转发给对应的分片服务器;分片服务器接收主服务器转发的数据查询请求后,根据key字段和列表字段在自身存储的数据中查询对应的列数据,并将查询到的列数据以数组的形式返回给主服务器,降低了分布式列存储数据库系统中数据处理的性能消耗,提高了数据处理效率。
[0081]基于上述方法实施例相同的技术构思,本发明实施例提供了一种分布式列存储数据库系统。
[0082]如图7所示,为本发明实施例提供的一种分布式列存储数据库系统的结构示意图,可以包括主服务器71和分片服务器72,其中:
[0083]所述主服务器71可以用于,接收客户端发起的数据查询请求,并将该数据查询请求转发给分片服务器72 ;以及接收分片服务器72返回的数组形式的数据;
[0084]所述分 片服务器72用于,接收主服务器71转发的数据查询请求,其中携带有用于指示请求读取的数据所在行的key字段和用于指示请求读取的数据所在列的列表字段;根据所述key字段和列表字段在自身存储的数据中查询对应的列数据,并将查询到的列数据以数组的形式返回给所述主服务器71。
[0085]其中,所述分片服务器72包括一个数据片模块Hregion,至少一个列模块Hstore,以及至少一个列存储文件HstoreFile ;其中:
[0086]所述Hregion用于,接收主服务转发的数据查询请求,其中携带有用于指示请求读取的数据所在行的key字段和用于指示请求读取的数据所在列的列表字段;根据所述列表字段确定对应的Hstore,并将该数据查询请求转发给该Hstore ;接收Hstore返回的data文件,根据该data文件生成data数组,并将该data数组返回给主服务器;[0087]所述Hstore用于,当接收到Hregion转发的数据查询请求时,根据所述key字段确定对应的HstoreFile,并将该数据查询请求转发给该HstoreFile ;接收HstoreFile返回的data文件,并将该data文件返回给Hregion ;
[0088]所述HstoreFile用于,当接收到Hstore转发的数据查询请求时,向Hstore返回整个data文件。
[0089]其中,所述主服务器71还可以用于,将所述data数组输出给Map,以使所述Map根据该data数组读取数据,并根据得到的列数据按列进行分析处理。
[0090]其中,所述主服务器具体用于,将data数组输出给Map,以使所述Map按照ColRecord结构读取所述data数组数据;
[0091]所述ColRecord结构具体为:
[0092]ColRecord (coldata[l],coldata[2],......coldata[n])
[0093]其中,η为所述分片服务器查询到的列数据的列数,coldata[i]为所述分片服务器查询到的列数据中的一列数据,i为不大于η的正整数。
[0094]其中,在本发明实施例提供的分布式列存储数据库系统中,一个主服务器可以对应一个或多个分片服务器。
[0095]基于上述方法实施例相同的技术构思,本发明实施例还提供了一种分片服务器,可以应用于上述方法实施例。
[0096]如图8所示,为本发明实施例提供的一种分片服务器的结构示意图,可以包括:一个数据片模块Hregion81,至少一个列模块Hstore82,以及至少一个列存储文件HstoreFile83 ;其中:
[0097]所述Hregion81用于,接收主服务转发的数据查询请求,其中携带有用于指示请求读取的数据所在行的key字段和用于指示请求读取的数据所在列的列表字段;根据所述列表字段确定对应的HStore82,并将该数据查询请求转发给该HStore82 ;接收HStore82返回的data文件,根据该data文件生成data数组,并将该data数组返回给主服务器;
[0098]所述Hstore82用于,当接收到Hregion81转发的数据查询请求时,根据所述key字段确定对应的HstoreFile83,并将该数据查询请求转发给该HstoreFile83 ;接收HstoreFile83返回的data文件,并将该data文件返回给Hregion81 ;
[0099]所述HstoreFile83用于,当接收到Hstore82转发的数据查询请求时,向Hstore82返回整个data文件。
[0100]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明实施例可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是⑶-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或网络设备等)执行本发明实施例各个实施场景所述的方法。
[0101]本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本发明实施例所必须的。
[0102]本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
[0103]上述本发明实施例序号仅仅为了描述,不代表实施场景的优劣。
[0104]以上公开的仅为本发明实施例的几个具体实施场景,但是,本发明实施例并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明实施例的业务限制范围。
【权利要求】
1.一种数据处理方法,应用于包括主服务器和分片服务器的分布式列存储数据库系统中,其特征在于,该方法包括: 分片服务器接收主服务器转发的数据查询请求,其中携带有用于指示请求读取的数据所在行的key字段和用于指示请求读取的数据所在列的列表字段; 所述分片服务器根据所述 key字段和列表字段在自身存储的数据中查询对应的列数据,并将查询到的列数据以数组的形式返回给所述主服务器。
2.如权利要求1所述的方法,其特征在于,所述分片服务器包括一个数据片模块Hregion,至少一个列模块Hstore,以及至少一个列存储文件HstoreFile ; 所述分片服务器根据所述key字段和列表字段在自身存储的数据中查询对应的列数据,并将查询到的列数据以数组的形式返回给所述主服务器,具体为: 所述Hregion根据所述列表字段确定对应的Hstore,并将该数据查询请求转发给该Hstore ; 所述Hstore根据所述key字段确定对应的HstoreFiIe,并将该数据查询请求转发给该HstoreFile ; 所述HstoreFile接收到数据查询请求后,向Hstore返回整个data文件; 所述Hstore将接收到的data文件返回给Hregion ; 所述Hregion根据接收到的data文件生成data数组,并将该data数组返回给主服务器。
3.如权利要求2所述的方法,其特征在于,该方法还包括: 所述主服务器将所述data数组输出给Map,以使所述Map根据该data数组读取数据,并根据得到的列数据按列进行分析处理。
4.如权利要求3所述的方法,其特征在于,所述Map根据data数组读取数据,具体为: 所述Map按照ColRecord结构读取所述data数组数据; 所述ColRecord结构具体为: ColRecord (coldata[l],coldata[2],......coldata[n]) 其中,η为所述分片服务器查询到的列数据的列数,coldata[i]为所述分片服务器查询到的列数据中的一列数据,i为不大于η的正整数。
5.一种分布式列存储数据库系统,包括主服务器和分片服务器,其特征在于, 所述主服务器用于,接收客户端发起的数据查询请求,并将该数据查询请求转发给分片服务器;以及接收分片服务器返回的数组形式的数据; 所述分片服务器用于,接收主服务器转发的数据查询请求,其中携带有用于指示请求读取的数据所在行的key字段和用于指示请求读取的数据所在列的列表字段;根据所述key字段和列表字段在自身存储的数据中查询对应的列数据,并将查询到的列数据以数组的形式返回给所述主服务器。
6.如权利要求5所述的分布式列存储数据库系统,其特征在于,所述分片服务器包括一个数据片模块Hregion,至少一个列模块Hstore,以及至少一个列存储文件HstoreFile ;其中: 所述Hregion用于,接收主服务转发的数据查询请求,其中携带有用于指示请求读取的数据所在行的key字段和用于指示请求读取的数据所在列的列表字段;根据所述列表字段确定对应的Hstore,并将该数据查询请求转发给该Hstore ;接收Hstore返回的data文件,根据该data文件生成data数组,并将该data数组返回给主服务器; 所述Hstore用于,当接收到Hregion转发的数据查询请求时,根据所述key字段确定对应的HstoreFile,并将该数据查询请求转发给该HstoreFile ;接收HstoreFile返回的data文件,并将该data文件返回给Hregion ; 所述HstoreFile用于,当接收到Hstore转发的数据查询请求时,向Hstore返回整个data文件。
7.如权利要求6所述的系统,其特征在于, 所述主服务器还用于,将所述data数组输出给Map,以使所述Map根据该data数组读取数据,并根据得到的列数据按列进行分析处理。
8.如权利要求7所述的系统,其特征在于, 所述主服务器具体用于,将data数组输出给Map,以使所述Map按照ColRecord结构读取所述data数组数据; 所述ColRecord结构具体为: ColRecord (coldata[l],coldata[2],......coldata[n]) 其中,η为所述分片服务器查询到的列数据的列数,coldata[i]为所述分片服务器查询到的列数据中的一列数据,i为不大于η的正整数。
9.一种分片服务器,应用于包括主服务器的分布式列存储数据库系统中,其特征在于,所述分布服务器包括:一个数据片模块Hregion,至少一个列模块Hstore,以及至少一个列存储文件HstoreFile ;其中: 所述Hregion用于,接收主服务转发的数据查询请求,其中携带有用于指示请求读取的数据所在行的key字段和用于指示请求读取的数据所在列的列表字段;根据所述列表字段确定对应的Hstore,并将该数据查询请求转发给该Hstore ;接收Hstore返回的data文件,根据该data文件生成data数组,并将该data数组返回给主服务器; 所述Hstore用于,当接收到Hregion转发的数据查询请求时,根据所述key字段确定对应的HstoreFile,并将该数据查询请求转发给该HstoreFile ;接收HstoreFile返回的data文件,并将该data文件返回给Hregion ; 所述HstoreFile用于,当接收到Hstore转发的数据查询请求时,向Hstore返回整个data文件。
【文档编号】G06F17/30GK103902614SQ201210584674
【公开日】2014年7月2日 申请日期:2012年12月28日 优先权日:2012年12月28日
【发明者】徐萌, 何鸿凌, 杜宇健, 钱岭, 孙少陵, 金骏 申请人:中国移动通信集团公司