CN111221857B - 从分布式***中读数据记录的方法和装置 - Google Patents

从分布式***中读数据记录的方法和装置 Download PDF

Info

Publication number
CN111221857B
CN111221857B CN201811323197.7A CN201811323197A CN111221857B CN 111221857 B CN111221857 B CN 111221857B CN 201811323197 A CN201811323197 A CN 201811323197A CN 111221857 B CN111221857 B CN 111221857B
Authority
CN
China
Prior art keywords
partition
parent
server
data record
range
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.)
Active
Application number
CN201811323197.7A
Other languages
English (en)
Other versions
CN111221857A (zh
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 CN201811323197.7A priority Critical patent/CN111221857B/zh
Publication of CN111221857A publication Critical patent/CN111221857A/zh
Application granted granted Critical
Publication of CN111221857B publication Critical patent/CN111221857B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供了一种从分布式***中读数据记录的方法和装置,分布式***包括分区服务器和客户端,分区服务器用于管理数据表中的父分区,分区服务器存储有第一分区范围检查器,第一分区范围检查器的分区范围为父分区的分区范围,该方法包括:分区服务器在拆分父分区的过程中,接收客户端发送的第一读请求,第一读请求用于请求从父分区中读取第一数据记录;分区服务器根据第一读请求从父分区中读取第一数据记录,读取第一数据记录的完成时刻晚于父分区的拆分完成时刻;分区服务器使用第一分区范围检查器检查第一数据记录的行键值所属的分区的分区范围,有利于提高读取数据记录的准确性。

Description

从分布式***中读数据记录的方法和装置
技术领域
本申请涉及信息技术领域,并且更具体地,涉及从分布式***中读数据记录的方法和装置。
背景技术
在分布式***中,通常通过数据表的形式存储数据记录,例如,Hadoop分布式***中的Hbase表。为了提高查询效率,数据表又可以被划分为多个分区(region),而多个分区被划分给多个分区服务器,每个分区服务器对各自的分区进行管理。在多个分区服务器中有的分区服务器处理访问请求(读请求或写请求)的频率较高,有的分区服务器处理访问请求的频率较低。这样,就会导致多个分区服务器之间负载不均衡的情况。
业界通常是通过对分区进行拆分来均衡各分区服务器的负载。例如,分布式***中负载较高的分区服务器为目标分区服务器,且目标分区服务器管理的分区中目标分区被访问的频率较高,那么,可以将目标分区作为待拆分的分区(即,父分区),再将父分区拆分为多个子分区,并将多个子分区中的部分子分区分散到分布式***中负载较低的分区服务器上,以减轻目标分区服务器的负载。
在分区拆分的过程中,需要修改父分区的分区元数据,以及父分区的分区范围检查器,以应用于新的子分区。然而,若在拆分父分区的过程中,接收到请求从父分区中读取第一数据记录的第一读请求后,且读第一数据记录的完成时间晚于父分区的拆分完成时间,此时,父分区的分区服务器已被修改,若使用修改后的分区服务器检查第一数据记录的分区范围,使得第一数据记录的不再是从父分区中读取的,而是从新生成的子分区中读取的,导致第一数据记录的准确性降低。
发明内容
本申请提供一种从分布式***中读数据记录的方法和装置,以提高读取数据记录的准确性。
第一方面,提供了一种从分布式***中读数据记录的方法,所述分布式***包括分区服务器和客户端,所述分区服务器用于管理数据表中的父分区,所述分区服务器存储有第一分区范围检查器,所述第一分区范围检查器的分区范围为所述父分区的分区范围,所述方法包括:所述分区服务器在拆分所述父分区的过程中,接收所述客户端发送的第一读请求,所述第一读请求用于请求从所述父分区中读取第一数据记录;所述分区服务器根据所述第一读请求从所述父分区中读取所述第一数据记录,读取所述第一数据记录的完成时刻晚于所述父分区的拆分完成时刻;所述分区服务器使用所述第一分区范围检查器检查所述第一数据记录的行键值所属的分区的分区范围。
上述分区服务器使用所述第一分区范围检查器检查所述第一数据记录的行键值所属的分区的分区范围,可以理解为,若上述第一读请求请求从第一文件中的父分区中读取第一数据记录,分区服务器使用第一分区范围检查器检查读取的所述第一文件中的数据记录的行健值,以得到所述第一文件中的所述父分区中的数据记录,以便分区服务器从所述第一文件中的所述父分区的数据记录中读取所述第一数据记录。
在本申请实施例中,对第一读请求请求读取的第一数据记录采用第一分区范围检查器检查,避免了现有技术中,在父分区拆分成功后,第一分区范围检查器本修改为子分区的分区范围检查器,导致读取的数据记录的分区范围不是原本第一读请求希望读取的数据记录所在的分区范围,有利于提高读取数据记录的准确性。
在一种可能的实现方式中,所述分区服务器存储有第二分区范围检查器,所述第二分区检查器的分区范围为第一目标子分区的分区范围,所述第一目标子分区为对所述父分区进行拆分得到的子分区,所述方法还包括:在所述父分区拆分完成后,所述分区服务器接收第二读请求,所述第二读请求用于请求从所述第一目标子分区中读取第二数据记录;所述分区服务器从所述第一目标子分区中读取所述第二数据记录;所述分区服务器使用所述第二分区范围检查器检查所述第二数据记录的行键值所属的分区的分区范围。
在本申请实施例中,对于第二读请求请求读取的数据记录使用第二分区范围检查器进行检查,有利于提高读取数据记录的准确性。
在一种可能的实现方式中,在拆分所述父分区的过程中,所述父分区对应的时间戳的值为最大值,所述方法还包括:所述分区服务器获取所述第一读请求携带的时间戳;若所述第一读请求携带的时间戳小于所述父分区对应的时间戳,所述分区服务器选择所述第一分区范围检查器检查所述第一数据记录的行键值所属的分区的分区范围。
在本申请实施例中,通过父分区对应的时间戳与读请求携带的时间戳进行比较,以选择不同的分区范围检查器,有利于提高选择分区范围检查器的准确性。
在一种可能的实现方式中,在所述父分区拆分完成后,所述父分区对应的时间戳的值为所述父分区的拆分完成时刻,所述分区服务器存储有第三分区范围检查器,所述第三分区范围检查器的分区范围为第二目标子分区的分区范围,所述第二目标子分区为对所述父分区进行拆分得到的子分区,所述方法还包括:所述分区服务器接收第三读请求,所述第三读请求用于请求从所述第二目标子分区中读取第三数据记录,所述第二目标子分区为对所述父分区进行拆分得到的子分区;所述分区服务器获取所述第三读请求携带的时间戳;若所述第三读请求携带的时间戳大于所述父分区对应的时间戳,所述分区服务器使用所述第三分区范围检查器检查所述第三数据记录的行键值所属的分区的分区范围。
在本申请实施例中,通过父分区对应的时间戳与读请求携带的时间戳进行比较,以选择不同的分区范围检查器,有利于提高选择分区范围检查器的准确性。
在一种可能的实现方式中,所述分区服务器存储有所述父分区的分区元数据记录的多个副本,所述方法还包括:在将所述父分区拆分为所述多个子分区之后,所述分区服务器将所述多个副本修改为所述多个子分区的分区元数据记录。
在本申请实施例中,通过修改父分区的分区元数据的副本得到子分区的分区元数据,有利于简化生成子分区的分区元数据的生成过程。
第二方面,提供一种从分布式***中读数据记录的分区服务器,所述分区服务器包括用于执行第一方面或第一方面任一种可能实现方式中的各个模块。
上述模块需要实现的功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
第三方面,提供了一种分区服务器集群,分区服务器集群包括至少一个分区服务器,每个分区服务器包括处理器和存储器。存储器用于存储计算机程序,处理器用于从存储器中调用并运行该计算机程序,使得该分区服务器集群执行上述第一方面中的方法。
第四方面,提供了一种计算机程序产品,所述计算机程序产品包括:计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行上述各方面中的方法。
需要说明的是,上述计算机程序代码可以全部或者部分存储在第一存储介质上,其中第一存储介质可以与处理器封装在一起的,也可以与处理器单独封装,本申请实施例对此不作具体限定。
第五方面,提供了一种计算机可读介质,所述计算机可读介质存储有程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行上述各方面中的方法。
附图说明
图1是本申请实施例适用的分布式***100的架构的示意图。
图2是分布式***中数据表200的示意图。
图3是本申请实施例的分区拆分的方法的流程图。
图4是本申请另一实施例的从分布式***中读数据记录的方法的流程图。
图5是本申请另一实施例的从分布式***中读数据记录的方法的流程图。
图6是本申请实施例的写数据记录的分区服务器的示意性结构图。
图7是本申请另一实施例的分区服务器集群的示意性框图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
为了便于理解,先结合图1介绍本申请实施例适用的分布式***的***架构。图1所示的分布式存储***100包括客户端110,控制服务器120,分区服务器130以及存储服务器140。
存储服务器140,用于为数据记录提供共享存储空间,负责数据记录最终的持久化,所有分区服务器可以共享分布式存储***中的数据记录。
客户端(client)110,可以理解为访问分布式***提供接口。客户端可以通过在缓存中存储分布式***的信息,例如,数据表的分区位置信息等,以提高对数据记录的访问。
控制服务器120,用于管理各个分区服务器,实时监控各分区服务器的状态,均衡各个分区服务器之间的负载。通常控制服务器中还存储有数据表的元数据记录、数据表中各分区的分区元数据、以及路由表。
上述分区的分区元数据包括分区元数据描述的分区的分区范围,以及管理该分区的分区服务器。
上述数据表的元数据用于描述数据表包含的行键的行键值范围,以及该数据表包含的分区的标识。
分区服务器(region server)130,用于维护已分配的分区,并处理请求从该分区中读数据记录的读请求。
在分布式***中,数据记录可以以文件的形式存储,数据记录通常由一个或多个键值对组成(参见表1),每一条数据记录均包含行键(row key)用"_id"表示,键(key)用"key"表示,以及值,用"value"表示。这些数据记录从逻辑上可以以数据表的形式呈现。为了提高分布式***中数据记录的访问性能,可以将数据表在水平方向上拆分为多个分区。例如,图2中数据表200可以划分为分区1,……,分区m,分区m+1,每个分区中包含数据表中一部分连续的行键,每个分区包含的连续的行键的值可以表示分区的分区范围。
表1
{"_id":1,"key1":"value1","key2":"value2","key3":"value3"}
{"_id":2,"key1":"value1","key2":"value2","key3":"value3"}
{"_id":3,"key1":"value1","key2":"value2","key3":"value3"}
{"_id":4,"key1":"value1","key2":"value2","key3":"value3"}
{"_id":5,"key1":"value1","key2":"value2","key3":"value3"}
{"_id":6,"key1":"value1","key2":"value2","key3":"value3","key4":"value4"}
在分布式***中,每个分区有各自的分区范围。每个分区中的数据记录由分布式***存储引擎进行组织和存储,同一分区下的数据记录可以分散在不同数据文件中,相应地,同一数据文件中可能包含数据表中不同分区的数据记录。当分区被拆分之后,该分区对应的分区范围也会变化,为了保证读请求请求读取的数据记录是该分区范围内的数据,可以在分区服务器中设置分区范围检查器(checker),检查读取的数据记录的行键值所属的分区范围。
例如,分区服务器上管理了数据表中的分区A和分区B,分区A的分区范围是[1-100],分区B的分区范围是[101-200],且分区A的数据记录散落在数据文件F1,F2,F3中,同时,分区B数据记录也散落在数据文件F1,F2,F3中。此时,若读请求请求读取分区A中的数据记录,存储引擎会依次从文件F1,F2,F3中读取数据记录,但是,如上文所述,数据文件F1,F2,F3中同时存储有属于分区B的数据记录,则存储引擎在读取数据文件F1,F2,F3的同时会将属于分区B的数据记录一并读出,此时,可以使用分区A的分区范围检查器,排除属于分区B的数据记录。
综合考虑分布式***的负载和性能,可能需要在现有的分区的基础上,进一步对分区进行拆分,以生成更多的分区。例如,可以通过分区拆分提高读写的并发性能。又例如,可以通过分区拆分的机制均衡分布式***中不同分区服务的负载,即,将负载过重的目标分区服务器中的父分区拆分为多个子分区,并将子分区交给其他的分区服务器管理,以减轻目标分区服务器的负载。
下文结合图1所示的分布式***的架构,结合图3介绍分区拆分的方法。图3是本申请实施例的分区拆分的方法的流程图。图3包括步骤310至步骤380。
310,控制服务器根据各个分区服务器的负载情况,以及该分区服务器管理的各个分区中数据记录的被访问频率,选择需要拆分的分区作为父分区。
320,控制服务器向分布式***申请用于存储子分区的存储空间。
330,控制服务器向父分区所在的目标分区服务器发送分区拆分(region split)消息。分区拆分消息中携带父分区的标识(ID),为子分区申请的存储空间,父分区的分区元数据等信息。
340,目标分区服务器关闭父分区的分区业务,即将父分区标记为下线。此时,如果目标分区服务器收到请求从父分区中读取数据记录的读请求,目标分区服务器会向客户端反馈异常告知父分区不是服务分区,相应地,客户端后续可以进行补偿性重试。
350,目标分区服务器根据父分区的分区元数据,以及预设的分区拆分策略将父分区拆分为两个子分区,并将两个子分区中的第一子分区的分区元数据存储到上述存储空间中,第二子分区的分区元数据可以占用父分区的分区元数据的存储空间。
360,目标分区服务器为两个子分区配置分区范围检查器。
具体地,目标分区服务器将父分区拆分完成之后,会将父分区的分区范围检查器的分区范围修改为第一子分区的分区范围,作为第一子分区的分区范围检查器。相应地,再生成一个分区范围检查器作为第二子分区的分区范围检查器。
370,目标分区服务器向控制服务器发送分区拆分成功消息。
380,控制服务器修改路由表的分区信息、分区的元数据、数据表的元数据等信息,以记录上述子分区的分区信息。
从图3所示的分区拆分过程中可以看出,分区服务器在对父分区进行拆分之前会先将父分区下线,即分区服务器不再处理请求从父分区中读取数据记录的读请求,会影响分布式分布式***的整体性能,降低客户端读取数据的成功率。
为了提高分布式***的整体性能,提高客户端读取数据的成功率,本申请还提供了一种读取数据记录的方法,下文基于图1所示的分布式***结合图4详细介绍。
图4是本申请另一实施例的从分布式***中读数据记录的方法的流程图。图4所示的方法包括步骤410和步骤420。
410,目标分区服务器在对父分区进行拆分的过程中,接收客户端发送的第一读请求,第一读请求用于请求从所述父分区中读取第一数据记录。
也就是说,无论是在拆分父分区的过程中,还是准备拆分父分区,父分区都处于在线状态。
上述目标分区服务器在对父分区进行拆分的过程中,可以包括准备对父分区进行拆分,以及拆分父分区的过程。即从目标分区服务器接收到针对父分区的拆分请求直到父分区拆分完成之前的时间段。
420,目标分区服务器根据所述第一读请求从所述父分区中读取所述第一数据记录。
在本申请实施例中,分区服务器在拆分父分区的过程中,还可以从父分区中读取第一读请求请求读取的数据记录,避免了传统的分区拆分过程中,在拆分之前需要先将父分区下线,无法处理针对父分区中的数据记录的第一读请求,有利于提高分布式***的整体性能,提高客户端读取数据的成功率。
目标分区服务器在处理读请求的过程中还存在一种情况,即目标分区服务器读取第一数据记录的完成时刻可能晚于父分区的拆分完成时刻。例如,第一读请求请求读取的第一数据记录的数据量较大,目标分区服务器读取完全部的数据记录时,父分区已经被拆分为多个子分区。此时,由于父分区的分区范围检查器已被修改为子分区的分区范围检查器,如果使用子分区的分区范围检查器检查第一数据记录的行键所属的分区时,会使得第一数据记录中,不属于子分区的分区范围检查器的分区范围的一部分数据记录无法被读出,降低从分布式***中读取数据记录的准确性。
例如,父分区的分区范围以及父分区的分区范围检查器的分区范围为[1,100],第一子分区的分区范围以及第一子分区的分区范围检查器的分区范围为[1,50],第二子分区的分区范围以及第二子分区的分区范围检查器的分区范围为[51,100],第一读请求请求读取的第一数据记录的行键范围为[2,90]。当目标分区服务器在读取第一数据记录的过程中,父分区的分区范围检查器被修改为第一子分区的分区范围检查器后,只能使用第一子分区的分区范围检查器检查第一数据记录,此时,会将第一数据记录中行键值不属于分区范围[1,50]的数据记录作为错误的数据记录,不返回给客户端,降低查询数据记录的准确性。
为了避免上述情况,可以在目标分区服务器中保留父分区的分区范围检查器,以用于检查上述第一数据记录的行键值是否属于父分区。
即,所述分区服务处理完成所述第一读请求的时间晚于所述父分区的拆分完成时刻,所述目标分区服务器存储有第一分区范围检查器,所述第一分区范围检查器的分区范围为所述父分区的分区范围,所述方法还包括:
430,在所述父分区拆分完成后,所述目标分区服务器使用所述第一分区范围检查器检查所述第一数据记录的行键值所属的分区的分区范围。
上述分区服务器使用所述第一分区范围检查器检查所述第一数据记录的行键值所属的分区的分区范围,可以理解为,若上述第一读请求请求从第一文件中的父分区中读取第一数据记录,分区服务器使用第一分区范围检查器检查读取的所述第一文件中的数据记录的行健值,以得到所述第一文件中的所述父分区中的数据记录,以便分区服务器从所述第一文件中的所述父分区的数据记录中读取所述第一数据记录。
需要说明的是,上述第一分区范围检查器(即父分区的分区范围检查器)可以一直存储在目标分区服务器中。但是,为了节省分区服务器的资源,可以在目标分区服务器处理完第一读请求之后,将第一分区范围检查器删除。
也就是说,在本申请实施例中,可以将读请求与分区范围检查器关联,如此,与第一读请求类型相同,即在父分区拆分过程中接收的,且处理时间晚于父分区的拆分完成时刻的读请求可以与第一分区范围检查器关联。
例如,父分区的分区范围以及父分区的分区范围检查器的分区范围为[1,100],第一子分区的分区范围以及第一子分区的分区范围检查器的分区范围为[1,50],第二子分区的分区范围以及第二子分区的分区范围检查器的分区范围为[51,100],第一读请求请求读取的第一数据记录的行键范围为[2,90]。在目标分区服务器读取第一数据记录完成之前,第一分区范围检查器会被保存在目标分区服务器中,以便第一数据记录都可以使用第一分区范围检查器检查。
相应地,对于在父分区拆分完成后,目标分区服务器接收到的读请求可以与子分区的分区范围检查器相关联。
即,目标分区服务器存储有第二分区范围检查器,第二分区检查器的分区范围为第一目标子分区的分区范围,所述第一目标子分区为对所述父分区进行拆分得到的子分区,所述方法还包括:在所述父分区拆分完成后,所述目标分区服务器接收第二读请求,所述第二读请求用于请求从所述第一目标子分区中读取第二数据记录;所述目标分区服务器从所述第一目标子分区中读取所述第二数据记录;所述目标分区服务器使用所述第二分区范围检查器检查所述第二数据记录的行键值所属的分区的分区范围。
上述第一目标子分区可以是基于父分区拆分得到的多个子分区中的任意一个子分区。上述第一目标子分区还可以是多个子分区中需要目标分区服务器需要管理的子分区,相应地,出于负载均衡的原因,多个子分区中的其他子分区可以分配给其它的分区服务器管理。
为了简化子分区的分区范围检查器(第二分区范围检查器)的生成过程,可以先对第一分区范围检查器进行快照,得到第一分区范围检查器的副本,通过修改第一分区范围检查器的副本得到第二分区范围检查器。当然,也可以通过修改第一分区范围检查器得到第二分区范围检查器。
需要说明的是,若在父分区拆分完成后,目标分区服务器再接收到请求从父分区中读取数据记录的读请求时,可以直接向客户端返回分区版本错误的消息,以通知客户端更新分区版本。
目标分区服务器可以通过多种方式判断读请求的接收时刻与父分区的分区拆分完成时刻之间的关系。例如,可以通过预设时间段的方式判断。即以父分区的分区拆分起始时刻为上述预设时间段的起始时刻,在预设时间段内接收到的读请求,即可以与第一分区范围检查器关联的读请求。在预设时间段之后接收到的读请求,即可以与第二分区范围检查器关联的读请求。又例如,还可以通过时间戳的方式判断,具体的判断方式在下文中介绍。
在对父分区进行分区拆分的过程中,目标分区服务器的父分区对应的时间戳的值为最大值,所述方法还包括:所述目标分区服务器根据所述第一读请求携带的时间戳以及所述父分区对应的时间戳,确定所述第一读请求携带的时间戳小于所述父分区对应的时间戳;所述目标分区服务器使用所述第一分区范围检查器检查所述第一数据记录的行键值所属的分区的分区范围。
需要说明的是,目标分区服务器可以为父分区维护一个时间戳(即父分区对应的时间戳),每个这对从父分区的读请求读取的数据记录都需要与父分区的时间戳进行比较,以确定与读请求关联的分区范围检查器。
在所述父分区拆分完成后,所述父分区对应的时间戳的值为所述父分区的拆分完成时刻,所述目标分区服务器存储有第三分区检查器的分区范围为第二目标子分区的分区范围,所述第二目标子分区为对所述父分区进行拆分得到的子分区,所述方法还包括:所述目标分区服务器接收第三读请求,所述第三读请求用于请求从所述第二目标子分区中读取第三数据记录,所述第二目标子分区为对所述父分区进行拆分得到的子分区;所述目标分区服务器确定所述第三读请求携带的时间戳大于所述父分区对应的时间戳;所述目标分区服务器使用所述第三分区范围检查器检查所述第三数据记录的行键值所属的分区的分区范围。
在分区拆分的过程中,目标分区服务器需要生成子分区的分区元数据,为了简化生成分区元数据的生成过程,可以先对父分区的分区元数据进行快照,生成多个父分区的分区元数据的副本,这样,可以通过修改父分区的分区元数据以生成子分区的分区元数据。即所述目标分区服务器存储有所述父分区的分区元数据记录的多个副本,所述方法还包括:在将所述父分区拆分为所述多个子分区之后,所述目标分区服务器将所述多个副本修改为所述多个子分区的分区元数据记录。
上述多个副本包括父分区的原始的分区元数据,上述多个副本的数量可以与多个子分区的数量相等,以便生成每个子分区的分区元数据。
例如,若将父分区拆分为第一子分区和第二子分区,第一子分区的分区范围是父分区的起始行键(start rowkey)至拆分点对应的行键,第二子分区的分区范围是拆分点对应的行键至父分区的结束行键(end rowkey)。那么可以通过快照的方式再生成一个父分区的分区元数据,然后通过删除父分区的原始的分区元数据中第二子分区的分区元数据,即用于描述数据表中拆分点对应的行键至结束行键的分区的元数据,作为第一子分区的分区元数据,通过删除父分区的分区元数据的副本中第一子分区的分区元数据,即用于描述数据表中起始行键至拆分点对应的行键的分区的元数据,作为第二子分区的分区元数据。
需要说明的是,上述对父分区的分区元数据进行快照与上文中介绍的对父分区的分区范围进行快照可以同时执行,也可以不同时执行,本申请实施例对此不作限定。
为了便于理解本申请,下文结合具体的例子介绍本申请实施例的方法。应理解,下文的例子仅仅为了说明本申请实施例的方法,并不会对本申请实施例的范围造成限定。
图5是本申请另一实施例的从分布式***中读数据记录的方法的流程图。图5所示的方法包括步骤510至,需要说明的是,分区拆分的准备工作可以参见图3中的介绍,下文重点介绍分区服务器执行的分区拆分过程,以及拆分分区过程中分区服务器处理读请求的方法流程。
假设待拆分的父分区为分区A,且管理分区A的分区服务器为目标分区服务器。
510,目标分区服务器执行分区拆分前的准备工作,即包括将父分区对应的时间戳调整为最大值,对分区A的分区元数据以及分区A的分区范围检查器进行快照,得到分区A的分区元数据以及分区A的分区范围检查器的副本。
520,目标分区服务器接收第一读请求,第一读请求用于请求从分区A中读取数据记录。
530,目标分区服务器判断第一读请求携带的时间戳,与父分区对应的时间戳之间的大小关系。
由于在拆分过程中,父分区对应的时间戳的值为最大值,那么在拆分过程中接收到的第一读请求携带的时间戳的值小于父分区对应的时间戳的值。
540,目标分区服务器将分区A的分区范围检查器与第一读请求关联。即使用分区A的分区范围检查器检查第一读请求请求读取的数据记录的行键所属的分区。
550,目标分区服务器将分区A拆分为子分区A’以及子分区B。
具体地,目标分区服务器将分区A的分区元数据修改为子分区A’的分区元数据,将分区A的分区元数据的副本修改子分区B的分区元数据。目标分区服务器将分区A的分区范围检查器修改为子分区A’的分区范围检查器,将分区A的分区范围检查器的副本修改子分区B的分区范围检查器。
另外,若目标分区服务器检测到第一读请求请求读取的数据还未处理完成,目标分区服务器还会保留分区A的分区范围检查器,以检查第一读请求请求读出的数据记录的行键所属的分区。
560,目标分区服务器将分区A对应的时间戳调整为分区A的拆分完成时刻。
570,目标分区服务器接收第二读请求。
需要说明的是,若第二读请求携带的分区版本号与目标分区服务器为分区A维护的分区版本号不同,说明发送第二读请求的客户端存储的分区版本过期,此时,目标分区服务器向客户端返回分区版本错误,以通知客户端更新分区版本。若第二读请求携带的分区版本号与目标分区服务器为分区A维护的分区版本号相同,且第二读请求请求从子分区A’中读取数据记录,则执行步骤580。
580,目标分区服务器判断第二读请求携带的时间戳,与分区A对应的时间戳之间的大小关系。
第二读请求携带的时间戳大于分区A对应的时间戳,说明第二读请求是在分区A拆分完成之后发送的,此时,若第二读请求如果请求读取的数据记录属于子分区A’中的数据,那么执行步骤590。
590,目标分区服务器处理第二读请求。
上文结合图1至图5详细地描述了本申请实施例的方法,下文结合图6至图7详细地描述本申请实施例的从分布式***中读数据记录的装置。需要说明的是,图6至图7所示的装置可以实现上述方法中各个步骤,为了简洁,在此不再赘述。
图6是本申请实施例的写数据记录的分区服务器的示意性结构图,图6所示的分区服务器600包括:接收模块610和处理模块620。所述分区服务器用于管理数据表中的父分区,所述分区服务器存储有第一分区范围检查器,所述第一分区范围检查器的分区范围为所述父分区的分区范围,
所述分区服务器包括:
接收模块610,用于在拆分所述父分区的过程中,接收所述客户端发送的第一读请求,所述第一读请求用于请求从所述父分区中读取第一数据记录;
处理模块620,用于根据所述第一读请求从所述父分区中读取所述第一数据记录,读取所述第一数据记录的完成时刻晚于所述父分区的拆分完成时刻;
所述处理模块620,还用于使用所述第一分区范围检查器检查所述第一数据记录的行键值所属的分区的分区范围。
可选地,作为一个实施例,所述分区服务器存储有第二分区范围检查器,所述第二分区检查器的分区范围为第一目标子分区的分区范围,所述第一目标子分区为对所述父分区进行拆分得到的子分区,所述接收模块610,还用于在所述父分区拆分完成后,所述分区服务器接收第二读请求,所述第二读请求用于请求从所述第一目标子分区中读取第二数据记录;所述处理模块620,还用于从所述第一目标子分区中读取所述第二数据记录;所述处理模块620,还用于使用所述第二分区范围检查器检查所述第二数据记录的行键值所属的分区的分区范围。
可选地,作为一个实施例,在拆分所述父分区的过程中,所述父分区对应的时间戳的值为最大值,所述处理模块620还用于:获取所述第一读请求携带的时间戳;若所述第一读请求携带的时间戳小于所述父分区对应的时间戳,选择所述第一分区范围检查器检查所述第一数据记录的行键值所属的分区的分区范围。
可选地,作为一个实施例,在所述父分区拆分完成后,所述父分区对应的时间戳的值为所述父分区的拆分完成时刻,所述分区服务器存储有第三分区范围检查器,所述第三分区范围检查器的分区范围为第二目标子分区的分区范围,所述第二目标子分区为对所述父分区进行拆分得到的子分区,所述接收模块610,还用于接收第三读请求,所述第三读请求用于请求从所述第二目标子分区中读取第三数据记录,所述第二目标子分区为对所述父分区进行拆分得到的子分区;所述处理单元620,还用于获取所述第三读请求携带的时间戳;所述处理单元620,还用于若所述第三读请求携带的时间戳大于所述父分区对应的时间戳,使用所述第三分区范围检查器检查所述第三数据记录的行键值所属的分区的分区范围。
可选地,作为一个实施例,所述分区服务器存储有所述父分区的分区元数据记录的多个副本,所述处理模块620还用于:在将所述父分区拆分为所述多个子分区之后,将所述多个副本修改为所述多个子分区的分区元数据记录。
在可选的实施例中,所述接收模块610可以为输入输出接口730,所述处理模块620可以为处理器720,所述分区服务器还可以包括存储器710,具体如图7所示。
图7是本申请另一实施例的分区服务器集群的示意性框图。图7所示的分区服务器集群700可以包括至少一个分区服务器,每个分区服务器包括:存储器710、处理器720和输入/输出接口730。其中,存储器710、处理器720和输入/输出接口730通过内部连接通路相连,该存储器710用于存储指令,该处理器720用于执行该存储器720存储的指令,以控制输入/输出接口730接收输入的数据和信息,输出操作结果等数据。
需要说明的是,上述分区服务器集群可以包括一个分区服务器,还可以包括多个分区服务器。分区服务器集群包括多个分区服务器时,多个分区服务器相互协作,实现图1-5所示的方法中分区服务器实现的各个功能,分区服务器集群具体结构参见图7,即分区服务器集群可以包括多个存储器,多个处理器和多个输入/输出接口。分区服务器集群包括一个分区服务器时,该分区服务器的具体结构可以参见图7中一个分区服务器结构,即分区服务器集群可以包括一个存储器,一个处理器和一个输入/输出接口。
在实现过程中,上述方法的各步骤可以通过处理器720中的硬件的集成逻辑电路或者软件形式的指令完成。结合本申请实施例所公开的方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器710,处理器720读取存储器710中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
应理解,本申请实施例中,该处理器可以为中央处理单元(central processingunit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(digital signalprocessor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
还应理解,本申请实施例中,该存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。处理器的一部分还可以包括非易失性随机存取存储器。例如,处理器还可以存储设备类型的信息。
应理解,在本申请实施例中,“与A相应的B”表示B与A相关联,根据A可以确定B。但还应理解,根据A确定B并不意味着仅仅根据A确定B,还可以根据A和/或其它信息确定B。
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
在本申请所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够读取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,数字通用光盘(digital video disc,DVD))或者半导体介质(例如,固态硬盘(solid state disk,SSD))等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (13)

1.一种从分布式***中读数据记录的方法,其特征在于,所述分布式***包括分区服务器和客户端,所述分区服务器用于管理数据表中的父分区,所述分区服务器存储有第一分区范围检查器,所述第一分区范围检查器的分区范围为所述父分区的分区范围,
所述方法包括:
所述分区服务器在拆分所述父分区的过程中,接收所述客户端发送的第一读请求,所述第一读请求用于请求从所述父分区中读取第一数据记录;
所述分区服务器根据所述第一读请求从所述父分区中读取所述第一数据记录,读取所述第一数据记录的完成时刻晚于所述父分区的拆分完成时刻;
所述分区服务器使用所述第一分区范围检查器检查所述第一数据记录的行键值所属的分区的分区范围。
2.如权利要求1所述的方法,其特征在于,所述分区服务器存储有第二分区范围检查器,所述第二分区检查器的分区范围为第一目标子分区的分区范围,所述第一目标子分区为对所述父分区进行拆分得到的子分区,
所述方法还包括:
在所述父分区拆分完成后,所述分区服务器接收第二读请求,所述第二读请求用于请求从所述第一目标子分区中读取第二数据记录;
所述分区服务器从所述第一目标子分区中读取所述第二数据记录;
所述分区服务器使用所述第二分区范围检查器检查所述第二数据记录的行键值所属的分区的分区范围。
3.如权利要求1所述的方法,其特征在于,在拆分所述父分区的过程中,所述父分区对应的时间戳的值为最大值,在所述父分区拆分完成后,所述父分区对应的时间戳的值为所述父分区的拆分完成时刻。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
所述分区服务器获取所述第一读请求携带的时间戳;
若所述第一读请求携带的时间戳小于所述父分区对应的时间戳,所述分区服务器选择所述第一分区范围检查器检查所述第一数据记录的行键值所属的分区的分区范围。
5.如权利要求3或4所述的方法,其特征在于,所述分区服务器存储有第三分区范围检查器,所述第三分区范围检查器的分区范围为第二目标子分区的分区范围,所述第二目标子分区为对所述父分区进行拆分得到的子分区,
所述方法还包括:
所述分区服务器接收第三读请求,所述第三读请求用于请求从所述第二目标子分区中读取第三数据记录,所述第二目标子分区为对所述父分区进行拆分得到的子分区;
所述分区服务器获取所述第三读请求携带的时间戳;
若所述第三读请求携带的时间戳大于所述父分区对应的时间戳,所述分区服务器使用所述第三分区范围检查器检查所述第三数据记录的行键值所属的分区的分区范围。
6.如权利要求1-5中任一项所述的方法,其特征在于,所述分区服务器存储有所述父分区的分区元数据记录的多个副本,所述方法还包括:
在将所述父分区拆分为所述多个子分区之后,所述分区服务器将所述多个副本修改为所述多个子分区的分区元数据记录。
7.一种从分布式***中读数据记录的分区服务器,其特征在于,所述分布式***包括所述分区服务器和客户端,所述分区服务器用于管理数据表中的父分区,所述分区服务器存储有第一分区范围检查器,所述第一分区范围检查器的分区范围为所述父分区的分区范围,
所述分区服务器包括:
接收模块,用于在拆分所述父分区的过程中,接收所述客户端发送的第一读请求,所述第一读请求用于请求从所述父分区中读取第一数据记录;
处理模块,用于根据所述第一读请求从所述父分区中读取所述第一数据记录,读取所述第一数据记录的完成时刻晚于所述父分区的拆分完成时刻;
所述处理模块,还用于使用所述第一分区范围检查器检查所述第一数据记录的行键值所属的分区的分区范围。
8.如权利要求7所述的分区服务器,其特征在于,所述分区服务器存储有第二分区范围检查器,所述第二分区检查器的分区范围为第一目标子分区的分区范围,所述第一目标子分区为对所述父分区进行拆分得到的子分区,
所述接收模块,还用于在所述父分区拆分完成后,所述分区服务器接收第二读请求,所述第二读请求用于请求从所述第一目标子分区中读取第二数据记录;
所述处理模块,还用于从所述第一目标子分区中读取所述第二数据记录;
所述处理模块,还用于使用所述第二分区范围检查器检查所述第二数据记录的行键值所属的分区的分区范围。
9.如权利要求7所述的分区服务器,其特征在于,在拆分所述父分区的过程中,所述父分区对应的时间戳的值为最大值,在所述父分区拆分完成后,所述父分区对应的时间戳的值为所述父分区的拆分完成时刻。
10.如权利要求9所述的分区服务器,其特征在于,所述处理模块还用于:
获取所述第一读请求携带的时间戳;
若所述第一读请求携带的时间戳小于所述父分区对应的时间戳,选择所述第一分区范围检查器检查所述第一数据记录的行键值所属的分区的分区范围。
11.如权利要求9或10所述的分区服务器,其特征在于,所述分区服务器存储有第三分区范围检查器,所述第三分区范围检查器的分区范围为第二目标子分区的分区范围,所述第二目标子分区为对所述父分区进行拆分得到的子分区,
所述接收模块,还用于接收第三读请求,所述第三读请求用于请求从所述第二目标子分区中读取第三数据记录,所述第二目标子分区为对所述父分区进行拆分得到的子分区;
所述处理单元,还用于获取所述第三读请求携带的时间戳;
所述处理单元,还用于若所述第三读请求携带的时间戳大于所述父分区对应的时间戳,使用所述第三分区范围检查器检查所述第三数据记录的行键值所属的分区的分区范围。
12.如权利要求7-11中任一项所述的分区服务器,其特征在于,所述分区服务器存储有所述父分区的分区元数据记录的多个副本,所述处理模块还用于:
在将所述父分区拆分为所述多个子分区之后,将所述多个副本修改为所述多个子分区的分区元数据记录。
13.一种从分布式***中读数据记录的分区服务器集群,其特征在于,所述分布式***包括所述分区服务器集群和客户端,所述分区服务器集群包括至少一个分区服务器,每个分区服务器包括处理器和存储器,所述存储器用于存储计算机程序,所述处理器用于从存储器中调用并运行该计算机程序,使得所述分区服务器集群执行如权利要求1-6中任一项所述的方法。
CN201811323197.7A 2018-11-08 2018-11-08 从分布式***中读数据记录的方法和装置 Active CN111221857B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811323197.7A CN111221857B (zh) 2018-11-08 2018-11-08 从分布式***中读数据记录的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811323197.7A CN111221857B (zh) 2018-11-08 2018-11-08 从分布式***中读数据记录的方法和装置

Publications (2)

Publication Number Publication Date
CN111221857A CN111221857A (zh) 2020-06-02
CN111221857B true CN111221857B (zh) 2023-04-18

Family

ID=70830168

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811323197.7A Active CN111221857B (zh) 2018-11-08 2018-11-08 从分布式***中读数据记录的方法和装置

Country Status (1)

Country Link
CN (1) CN111221857B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112115113B (zh) * 2020-09-25 2022-03-25 北京百度网讯科技有限公司 数据存储***、方法、装置、设备以及存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7734615B2 (en) * 2005-05-26 2010-06-08 International Business Machines Corporation Performance data for query optimization of database partitions
US9996572B2 (en) * 2008-10-24 2018-06-12 Microsoft Technology Licensing, Llc Partition management in a partitioned, scalable, and available structured storage
GB2521197A (en) * 2013-12-13 2015-06-17 Ibm Incremental and collocated redistribution for expansion of an online shared nothing database
CN106326241A (zh) * 2015-06-15 2017-01-11 阿里巴巴集团控股有限公司 在将数据表拆分的过程中读写数据表的方法和装置
CN105353988A (zh) * 2015-11-13 2016-02-24 曙光信息产业(北京)有限公司 一种元数据读写方法及装置
US10353895B2 (en) * 2015-11-24 2019-07-16 Sap Se Atomic visibility switch for transactional cache invalidation
US10726009B2 (en) * 2016-09-26 2020-07-28 Splunk Inc. Query processing using query-resource usage and node utilization data

Also Published As

Publication number Publication date
CN111221857A (zh) 2020-06-02

Similar Documents

Publication Publication Date Title
US10740355B2 (en) System and method for optimizing data migration in a partitioned database
US11106538B2 (en) System and method for facilitating replication in a distributed database
US20170083579A1 (en) Distributed data processing method and system
US11296940B2 (en) Centralized configuration data in a distributed file system
US9875259B2 (en) Distribution of an object in volatile memory across a multi-node cluster
CN110071978B (zh) 一种集群管理的方法及装置
US11586641B2 (en) Method and mechanism for efficient re-distribution of in-memory columnar units in a clustered RDBMs on topology change
US11645424B2 (en) Integrity verification in cloud key-value stores
CN108616581B (zh) 基于olap/oltp混合应用的数据存储***及方法
US11082494B2 (en) Cross storage protocol access response for object data stores
JP2014519100A (ja) 分散キャッシングおよびキャッシュ分析
CN113032335A (zh) 文件访问方法、装置、设备及存储介质
KR102121157B1 (ko) 동시 블록체인 트랜잭션 실패를 해결하기 위한 넌스 테이블의 이용
RU2711348C1 (ru) Способ и система для обработки запросов в распределенной базе данных
CN113760901A (zh) 数据处理方法、装置、设备及存储介质
CN108777718B (zh) 一种业务***通过客户端访问读多写少***的方法和装置
CN111221857B (zh) 从分布式***中读数据记录的方法和装置
US20240012800A1 (en) Data processing method, server, and system
CN117520278A (zh) 一种分布式文件***多客户端高精度目录配额控制方法
CN114205354B (zh) 事件管理***、事件管理方法、服务器及存储介质
US11606277B2 (en) Reducing the impact of network latency during a restore operation
CN111782634B (zh) 数据分布式存储方法、装置、电子设备及存储介质
US20240169072A1 (en) Native multi-tenant row table encryption
WO2022083267A1 (zh) 数据处理方法、装置、计算节点以及计算机可读存储介质
US20220261389A1 (en) Distributing rows of a table in a distributed database system

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
TA01 Transfer of patent application right

Effective date of registration: 20220208

Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Applicant after: Huawei Cloud Computing Technologies Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant