CN116662019B - 请求的分配方法、装置、存储介质及电子装置 - Google Patents
请求的分配方法、装置、存储介质及电子装置 Download PDFInfo
- Publication number
- CN116662019B CN116662019B CN202310951716.9A CN202310951716A CN116662019B CN 116662019 B CN116662019 B CN 116662019B CN 202310951716 A CN202310951716 A CN 202310951716A CN 116662019 B CN116662019 B CN 116662019B
- Authority
- CN
- China
- Prior art keywords
- leaf node
- thread
- node
- request
- key
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 122
- 230000008569 process Effects 0.000 claims abstract description 40
- 238000004590 computer program Methods 0.000 claims description 16
- 238000012545 processing Methods 0.000 claims description 14
- 238000010586 diagram Methods 0.000 description 18
- 238000012986 modification Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 5
- 238000003780 insertion Methods 0.000 description 5
- 230000037431 insertion Effects 0.000 description 5
- 238000013507 mapping Methods 0.000 description 5
- 238000012217 deletion Methods 0.000 description 4
- 230000037430 deletion Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请实施例提供了一种请求的分配方法、装置、存储介质及电子装置,其中,该方法包括:获取多个第一元数据访问请求,并将每个第一元数据访问请求拆分为多个子访问请求,其中,多个子访问请求包括:读请求、操作请求,每个第一元数据访问请求携带有元数据的第一逻辑块地址;将多个读请求分配至多个第一线程;控制多个第一线程在目标树上并行处理多个读请求,并在目标树中确定多个读请求对应的叶子节点,其中,目标树用于存储元数据的第一逻辑块地址和物理块地址;将多个操作请求分配至第二线程,以使第二线程根据叶子节点在目标树上处理操作请求。通过本申请,解决了现有技术中访问元数据时系统整体的吞吐量低、时延小的问题。
Description
技术领域
本申请实施例涉及通信领域,具体而言,涉及一种请求的分配方法、装置、存储介质及电子装置。
背景技术
元数据(Mete data)是指描述数据的数据(data about data),可以理解为比一般意义的数据范畴更加广泛的数据,不仅仅是表示数据的类型、名称、值等信息,也进一步提供了数据的上下文信息,例如数据所属域、数据来源等等。在数据存储系统中,元数据是信息存储的基础,是数据的最小单元。近年来,随着信息技术的发展,产生了海量的数据,但是如何有效地管理和组织这些海量数据已经成为一个突出的问题。对于存储的大量数据,查询分析其中的数据内容和数据含义,才能更加有效的利用数据。在存储系统中元数据的高效组织和管理是解决这一问题的有效手段,能支持系统对数据的管理和维护。简言之,只有有效的管理元数据,数据才变得更有价值。因此,如何有效的管理元数据和使用元数据,是一个非常值得探讨的问题。
在全闪存数据存储中,必然涉及到大量且高并发的数据访问和查询问题,有效的管理元数据,才能增加并发访问量和访问效率。因此全闪存中元数据的多并发读、写有效管理方法至关重要,可使大规模并发随机访问元数据有更高的吞吐量和更小的时延。
因此,现有技术中有访问元数据时系统整体的吞吐量低、时延小的问题并未得到有效解决。
发明内容
本申请实施例提供了一种请求的分配方法、装置、存储介质及电子装置,以至少解决相关技术中访问元数据时系统整体的吞吐量低、时延小的问题。
根据本申请的一个实施例,提供了一种请求的分配方法,包括:获取多个第一元数据访问请求,并将每个第一元数据访问请求拆分为多个子访问请求,其中,所述多个子访问请求包括:读请求、操作请求,所述每个第一元数据访问请求携带有元数据的第一逻辑块地址;将多个读请求分配至多个第一线程;控制所述多个第一线程在目标树上并行处理所述多个读请求,并在所述目标树中确定所述多个读请求对应的叶子节点,其中,所述目标树用于存储所述元数据的第一逻辑块地址和物理块地址;将多个所述操作请求分配至第二线程,以使所述第二线程根据所述叶子节点在所述目标树上处理所述操作请求。
在一个示例性实施例中,在所述目标树中确定所述多个读请求对应的叶子节点,包括:确定每个第一元数据访问请求中携带的第一逻辑块地址;根据所述第一逻辑块地址遍历所述目标树中的节点信息,以确定每个所述读请求对应的叶子节点。
在一个示例性实施例中,在所述第一元数据访问请求为查询请求的情况下,将所述操作请求分配至第二线程之后,所述方法还包括:控制所述第二线程确定所述叶子节点中是否存储有所述第一逻辑块地址对应的物理块地址;在所述叶子节点中存储有所述物理块地址的情况下,控制所述第二线程返回所述物理块地址。
在一个示例性实施例中,控制所述第二线程确定所述叶子节点中是否存储有所述第一逻辑块地址对应的物理块地址之后,所述方法还包括:在所述叶子节点中未存储有所述物理块地址的情况下,控制所述第二线程返回空值。
在一个示例性实施例中,在所述第一元数据访问请求为插入请求的情况下,将多个所述操作请求分配至第二线程之后,所述方法还包括:控制所述第二线程在所述叶子节点中串行插入第一关键字,其中,所述第一元数据访问请求中携带有所述第一关键字,所述第一关键字指示第一逻辑块地址与第一物理块地址的对应关系;在将所述第一关键字已分别插入至所述叶子节点的情况下,确定所述叶子节点是否需要更新;在所述叶子节点需要更新的情况下,对所述叶子节点执行分裂操作。
在一个示例性实施例中,对所述叶子节点执行分裂操作之后,所述方法还包括:确定所述叶子节点中存储的多个第二关键字;确定所述多个第二关键字中的第三关键字,并将所述第三关键字插入所述叶子节点的父节点中。
在一个示例性实施例中,将所述第三关键字插入所述叶子节点的父节点中之后,所述方法还包括:确定插入所述第三关键字的父节点是否需要更新;在插入所述第三关键字的父节点需要更新的情况下,将所述父节点对应的更新请求分配至第三线程,以使所述第三线程 在所述目标树上并行处理所述更新请求。
在一个示例性实施例中,确定所述叶子节点是否需要更新,包括:确定所述叶子节点中存储的关键字的数值,以及确定允许所述叶子节点存储的关键字的最大值;根据所述数值和所述最大值的大小关系确定所述叶子节点是否需要更新。
在一个示例性实施例中,根据所述数值和所述最大值的大小关系确定所述叶子节点是否需要更新,包括:在所述数值大于所述最大值的情况下,确定所述叶子节点需要更新;在所述数值小于或者等于所述最大值的情况下,确定所述叶子节点不需要更新。
在一个示例性实施例中,控制所述第二线程在所述叶子节点中串行插入第一关键字,包括:插入步骤:在多个所述第二线程中的任一线程获取到目标锁的情况下,控制所述任一线程在所述叶子节点中插入对应的第一关键字;循环执行所述插入步骤,直至每个所述第二线程均在所述叶子节点中插入第一关键字。
在一个示例性实施例中,控制所述第二线程在所述叶子节点中串行插入第一关键字,包括:将多个所述第二线程分配至同一线程队列中;在所述线程队列中依次取出任一第二线程,控制所述任一第二线程在所述叶子节点中插入第一关键字,直至每个所述第二线程串行均在所述叶子节点中插入第一关键字。
在一个示例性实施例中,在所述第一元数据访问请求为删除请求的情况下,将所述操作请求分配至第二线程之后,所述方法还包括:控制所述第二线程在所述叶子节点中串行删除第二关键字,其中,所述第一元数据访问请求中携带有所述第二关键字,所述第二关键字指示第一逻辑块地址与物理块地址的对应关系;在将多个所述第二关键字均删除的情况下,确定所述叶子节点是否需要更新;在所述叶子节点需要更新的情况下,对所述叶子节点执行合并操作。
在一个示例性实施例中,对所述叶子节点执行合并操作之后,所述方法还包括:在所述合并操作为将所述叶子节点的第四关键字插入所述叶子节点的情况下,确定所述叶子节点的兄弟节点的第四关键字和父节点的第五关键字;将所述第四关键字插入所述父节点,以及将所述第五关键字插入至所述叶子节点;在所述合并操作为将所述叶子节点的关键字插入所述叶子节点的兄弟节点的情况下,删除所述叶子节点的父节点的第六关键字,其中,所述第六关键字的孩子指针指向所述叶子节点和所述兄弟节点。
在一个示例性实施例中,将所述第四关键字插入所述父节点之后,所述方法还包括:确定插入所述第四关键字的父节点是否需要更新;在插入所述第四关键字的父节点需要更新的情况下,将所述父节点对应的更新请求分配至第四线程,以使所述第四线程在所述目标树上并行处理所述更新请求。
在一个示例性实施例中,在所述第一元数据访问请求为删除请求和插入请求的情况下,将所述操作请求分配至第二线程之后,所述方法还包括:控制所述第二线程串行在第一叶子节点中插入第一关键字和在第二叶子节点中删除第二关键字,其中,所述叶子节点包括:所述第一叶子节点和所述第二叶子节点,所述第一元数据访问请求中携带有所述第一关键字和第二关键字,所述第一关键字和第二关键字均指示第一逻辑块地址与物理块地址的对应关系;在将多个所述第一关键字插入至所述叶子节点,以及将多个所述第二关键字均删除的情况下,确定所述叶子节点是否需要更新;在所述多个叶子节点需要更新的情况下,对所述叶子节点执行分裂操作或者合并操作。
在一个示例性实施例中,获取多个第一元数据访问请求之前,所述方法还包括:获取多个第二元数据访问请求,其中,所述多个第二元数据访问请求包括:所述多个第一元数据访问请求;获取所述多个第二元数据访问请求中分别携带的第二逻辑块地址;根据多个所述第二逻辑块地址在所述多个第二元数据访问请求中获取所述多个第一元数据访问请求。
在一个示例性实施例中,根据多个所述第二逻辑块地址在所述多个第二元数据访问请求中获取所述多个第一元数据访问请求,包括:确定每个所述第二逻辑块地址对应的第一地址范围;将位于相同第一地址范围的第二逻辑块地址划分为同一分组;确定所述同一分组对应的第二元数据访问请求为所述第一元数据访问请求。
在一个示例性实施例中,控制所述多个第一线程在目标树上并行处理所述多个读请求之前,所述方法还包括:确定所述多个第一元数据访问请求对应的第二地址范围;确定所述第二地址范围对应的目标树,其中,所述目标树用于存储所述第二地址范围的元数据。
在一个示例性实施例中,所述目标树,包括:B+树。
根据本申请的另一个实施例,提供了一种请求的分配装置,包括:获取模块,用于获取多个第一元数据访问请求,并将每个第一元数据访问请求拆分为多个子访问请求,其中,所述多个子访问请求包括:读请求、操作请求,所述每个第一元数据访问请求携带有元数据的第一逻辑块地址;第一分配模块,用于将多个读请求分配至多个第一线程;获取模块,用于控制所述多个第一线程在目标树上并行处理所述多个读请求,并在所述目标树中确定所述多个读请求对应的叶子节点,其中,所述目标树用于存储所述元数据的第一逻辑块地址和物理块地址;第二分配模块,用于将多个所述操作请求分配至第二线程,以使所述第二线程根据所述叶子节点在所述目标树上处理所述操作请求。
根据本申请的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本申请,由于将每个第一元数据访问请求拆分为读请求、操作请求,其中,所述每个第一元数据访问请求携带有元数据的第一逻辑块地址,并将每个第一元数据访问请求拆分为多个子访问请求,将多个读请求分配至多个第一线程,将多个操作请求分配至第二线程。以及控制所述多个第一线程在目标树上并行处理所述多个读请求,并在所述目标树中确定所述多个读请求对应的叶子节点,所述第二线程根据所述叶子节点在所述目标树上处理所述操作请求。因此,可以解决现有技术中访问元数据时系统整体的吞吐量低、时延小的技术问题,达到了避免线程的竞争,提高系统整体的吞吐量的技术效果。
附图说明
图1是本申请实施例的一种请求的分配方法的移动终端的硬件结构框图;
图2是根据本申请实施例的一种请求的分配方法的流程图;
图3是根据本申请实施例的元数据在整个存储中的读写流程图;
图4是根据本申请实施例的一种新的多并发批量操作元数据方法的工作流程图;
图5是根据本申请实施例的按照线程划分批量查询的工作示意图;
图6是根据本申请实施例的查询叶子节点的工作示意图;
图7是根据本申请实施例的线程重新分配节点的工作示意图;
图8是根据本申请实施例的修改叶子节点的工作示意图;
图9是根据本申请实施例的修改中间节点的工作示意图;
图10是根据本申请实施例的修改根节点的工作示意图;
图11是根据本申请实施例的请求的分配装置的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请的实施例。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是本申请实施例的一种请求的分配方法的移动终端的硬件结构框图。如图1所示,移动终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,其中,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的请求的分配方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
图2是根据本申请实施例的一种请求的分配方法的流程图,如图2所示,该流程包括如下步骤:
步骤S202,获取多个第一元数据访问请求,并将每个第一元数据访问请求拆分为多个子访问请求,其中,所述多个子访问请求包括:读请求、操作请求,所述每个第一元数据访问请求携带有元数据的第一逻辑块地址;
步骤S204,将多个读请求分配至多个第一线程;
例如:将8个读请求分配给4个工作线程(相当于上述第一线程),每个工作线程并行处理对应的读请求,因此,每个工作线程循环两次即可处理完成所述8个工作线程。又或者,将8个读请求分配给6个工作线程(相当于上述第一线程),其中,4个工作线程处理1个读请求,两个工作线程工作处理2个读请求,即6个工作线程并行处理对应的读请求之后任意两个工作线程再次处理分配至所述工作线程的读请求。
步骤S206,控制所述多个第一线程在目标树上并行处理所述多个读请求,并在所述目标树中确定所述多个读请求对应的叶子节点,其中,所述目标树用于存储所述元数据的第一逻辑块地址和物理块地址;
需要说明的是,上述目标树可以是B+树。B+树是一种索引数据结构,用于在数据库系统中加快数据的查找速度。它是一种多路搜索树,每个子节点可以包含多个关键字和对应的指针。B+树的特点是所有的关键字都在叶子节点上,而非叶子节点只用来索引,这样可以使得数据分布均衡,减少了数据的存储空间,B+树的特点还包括:适应范围广、支持范围查询和支持快速的插入和删除。
本发明实施例中的全闪存储元数据使用B+树的数据结构来组织,针对B+树等索引优化并行查找效率,兼顾数据落盘时的连续大块写,采用批量更新的机制,将多个请求打包一起完成数据的查找、落盘持久化,批量处理多个操作请求,降低重复冗余的查询路径,去除多个线程因同步、竞争而导致的额外CPU开销。
上述目标树中记录了逻辑块地址和物理块地址的对应关系,通过这个映射关系,可以将逻辑块地址转换为对应的物理块地址,从而实现对数据的读请求和操作请求。同时,逻辑块地址和物理块地址的映射关系也可以进行数据的备份和恢复操作,提高数据的可靠性。
步骤S208,将多个所述操作请求分配至第二线程,以使所述第二线程根据所述叶子节点在所述目标树上处理所述操作请求。
可以理解的是,元数据访问请求包括但不限于:查询请求、插入请求、删除请求等。
可选的,上述步骤S206可以通过以下方式实现:确定每个第一元数据访问请求中携带的第一逻辑块地址;根据所述第一逻辑块地址遍历所述目标树中的节点信息,以确定每个所述读请求对应的叶子节点。
可以理解的是,由于目标树可以存储元数据的第一逻辑块地址和物理块地址,所以可以通过目标树确定每个第一元数据访问请求中携带的第一逻辑块地址对应的物理地址。根据第一逻辑块地址遍历目标树中的节点信息,从而确定每个读请求对应的叶子节点。
举例说明,将8个读请求分配给4个工作线程(相当于上述第一线程),每个工作线程分别处理2个读请求,4个工作线程分别确定8个读请求中携带的第一逻辑块地址,根据第一逻辑块地址按照B+树路径遍历目标树中的节点信息,从而确定8个读请求对应的叶子节点。
可选的,在所述第一元数据访问请求为查询请求的情况下,将所述操作请求分配至第二线程之后,还需要执行以下步骤:控制所述第二线程确定所述叶子节点中是否存储有所述第一逻辑块地址对应的物理块地址;在所述叶子节点中存储有所述物理块地址的情况下,控制所述第二线程返回所述物理块地址;在所述叶子节点中未存储有所述物理块地址的情况下,控制所述第二线程返回空值。
可以理解的是,控制所述第二线程确定所述叶子节点中是否存储有所述第一逻辑块地址对应的物理块地址,叶子节点中储存有第一逻辑块地址对应的物理块地址的情况下,才可以确定逻辑块地址到物理块地址的映射关系,从而可以控制第二线程返回物理块地址;叶子节点中未存储有所述物理块地址的情况下,即目标树中未存储有逻辑块地址到物理块地址的映射关系,因此,要控制第二线程返回空值。
可选的,在所述第一元数据访问请求为插入请求的情况下,将多个所述操作请求分配至第二线程之后,还包括:控制所述第二线程在所述叶子节点中串行插入第一关键字,其中,所述第一元数据访问请求中携带有所述第一关键字,所述第一关键字指示第一逻辑块地址与第一物理块地址的对应关系;在将所述第一关键字已分别插入至所述叶子节点的情况下,确定所述叶子节点是否需要更新;在所述叶子节点需要更新的情况下,对所述叶子节点执行分裂操作。
可选的,通过以下方式确定所述叶子节点是否需要更新:确定所述叶子节点中存储的关键字的数值,以及确定允许所述叶子节点存储的关键字的最大值;在所述数值大于所述最大值的情况下,确定所述叶子节点需要更新;在所述数值小于或者等于所述最大值的情况下,确定所述叶子节点不需要更新。
可以理解的是,在所述第一元数据访问请求为插入请求的情况下,将多个插入请求分配给多个第二线程,以使得每个第二线程并行处理一部分插入请求,控制第二线程在上述叶子节点中串行插入第一关键字,例如,在第二线程包括:线程一、线程二、线程三的情况下,控制线程三、线程一、线程二分别在叶子节点中串行插入第一关键字,其中,由于B+树的原理,每一叶子节点的数值是有限制的,所以要确定第二线程的线程一和线程三的叶子节点数值是否超过上述最大数值限制,若没有超过最大数值限制,则不用更新叶子节点;若超过了最大数值限制,则更新叶子节点,对叶子节点执行分裂操作。
需要说明的是,B+树的关键字的个数的确定方式是根据B+树的阶数来确定的。B+树的阶数定义为每个节点中关键字的最大个数。
根据关键字值找到叶子节点,向这个叶子节点插入记录。插入后,若当前节点关键字的个数小于等于m-1,则插入结束,其中,m为该目标树的阶数。否则将这个叶子节点分裂成左右两个叶子节点,左叶子节点包含前m/2+1个记录,右节点包含剩下的记录,将第m/2+1个记录的关键字进位到父节点中(父节点一定是索引类型节点),进位到父节点的关键字左孩子指针向左节点,右孩子指针向右节点。将当前节点的指针指向父节点。
可选的,对所述叶子节点执行分裂操作之后,还包括:确定所述叶子节点中存储的多个第二关键字;确定所述多个第二关键字中的第三关键字,并将所述第三关键字插入所述叶子节点的父节点中。
可以理解的是,若叶子节点的关键字的数值超过了最大数值限制,更新叶子节点,对叶子节点执行分裂操作,将叶子节点分裂成更多个分别带有不超过最大数值限制的叶子节点,从分裂后前的叶子节点中分别确定第二关键字,在从第二关键字中确定第三关键字,从而确定分裂后的叶子节点的父节点。需要说明的是,上述第三关键字用于指示第m/2+1个记录的逻辑块地址。
可选的,将所述第三关键字插入所述叶子节点的父节点中之后,还包括:确定插入所述第三关键字的父节点是否需要更新;在插入所述第三关键字的父节点需要更新的情况下,将所述父节点对应的更新请求分配至第三线程,以使所述第三线程在所述目标树上并行处理所述更新请求。
可以理解的是,在对叶子节点分裂,且在父节点中插入第三关键字后,同样的,由于每一父节点的数值也是有最大限制的,需要判断每一父节点的数值是否超过最大限制,若没有超过最大限制,则不需要更新;若超过最大限制,则需要更新,将父节点对应的更新请求分配至父节点上一层的第三线程,以使得第三线程在目标树上并行处理更新请求。
需要说明的是,若插入的关键字比当前节点中的最大值还大,破坏了B+树中从根节点到当前节点的所有索引值,此时需要及时修正后,再做其他操作。插入的关键字比最大值还大的情况下,插入之后,从根节点到该节点经过的所有节点中的所有值都要由最大值改为关键字。改完之后再做分裂操作。
可选的,可以通过以下两种方式在叶子节点中插入第一关键字:
1)插入步骤:在多个所述第二线程中的任一线程获取到目标锁的情况下,控制所述任一线程在所述叶子节点中插入对应的第一关键字;循环执行所述插入步骤,直至每个所述第二线程均在所述叶子节点中插入第一关键字。
可以理解的是,由于多个线程访问目标树,需要加锁(互斥锁、读写锁、递归锁等),否则可能存在寄存器和内存数据不一致。因此,在对目标树进行修改时,需要对每个线程进行加锁;多个第二线程之间的锁竞争,在竞争成功的任一线程中插入第一关键字,之后插入了一个第一关键字的第二线程之外的第二线程进行锁竞争,在竞争成功的任一线程中插入第一关键字,循环上述方法,直到第一关键字全部插入到第二线程的叶子节点中。
2)将多个所述第二线程分配至同一线程队列中;在所述线程队列中依次取出任一第二线程,控制所述任一第二线程在所述叶子节点中插入第一关键字,直至每个所述第二线程串行均在所述叶子节点中插入第一关键字。
可以理解的是,将多个第二线程分配至同一线程队列中,每次从线程队列中依次获取一个第二线程,以使所述一个第二线程所述叶子节点中插入第一关键字,直至线程队列中的每个所述第二线程串行均在所述叶子节点中插入第一关键字。
可选的,在所述第一元数据访问请求为删除请求的情况下,上述步骤S208之后,还需要执行以下操作:控制所述第二线程在所述叶子节点中串行删除第二关键字,其中,所述第一元数据访问请求中携带有所述第二关键字,所述第二关键字指示第一逻辑块地址与物理块地址的对应关系;在将多个所述第二关键字均删除的情况下,确定所述叶子节点是否需要更新;在所述叶子节点需要更新的情况下,对所述叶子节点执行合并操作。
可选的,对所述叶子节点执行合并操作之后,还包括:在所述合并操作为将所述叶子节点的第四关键字插入所述叶子节点的情况下,确定所述叶子节点的兄弟节点的第四关键字和父节点的第五关键字;将所述第四关键字插入所述父节点,以及将所述第五关键字插入至所述叶子节点;在所述合并操作为将所述叶子节点的关键字插入所述叶子节点的兄弟节点的情况下,删除所述叶子节点的父节点的第六关键字,其中,所述第六关键字的孩子指针指向所述叶子节点和所述兄弟节点。
可以理解的是,在所述第一元数据访问请求为删除请求的情况下,将用于删除叶子节点中的关键字的操作给多个第二线程,以使得每个第二线程串行处理删除叶子节点中的关键字的操作,控制第二线程在上述叶子节点中串行删除第二关键字,若删除关键字后的叶子节点的关键字的个数大于或者等于叶子节点的最小数值限制,也可能小于最小数值限制。若关键字的个数小于最小数值限制,则更新叶子节点,对叶子节点执行合并操作;若关键字的个数大于或者等于最小数值限制,则不更新叶子节点。
具体的:
步骤1:删除后若节点的key的个数大于等于Math.ceil(m-1)/2,删除操作结束,否则执行步骤2;
步骤2:若兄弟节点key有富余(大于Math.ceil(m-1)/2–1),向兄弟节点借一个记录,同时用借到的key替换父节点(即当前叶子节点和兄弟节点共同的父节点)点中的key,删除结束。否则执行步骤3;
步骤3:若兄弟节点中没有富余的key,则当前节点和兄弟节点合并成一个新的叶子节点,并删除父节点中的key(父节点中的这个key两边的孩子指针就变成了一个指针,正好指向这个新的叶子节点),将当前节点指向父节点(必为索引节点),执行步骤4(第4步以后的操作和B树就完全一样了,主要是为了更新索引节点);
步骤4:若索引节点的key的个数大于等于Math.ceil(m-1)/2–1,则删除操作结束。否则执行步骤5;
步骤5:若兄弟节点有富余,父节点key下移,兄弟节点key上移,删除结束。否则执行第6步;
步骤6:当前节点和兄弟节点及父节点下移key合并成一个新的节点。将当前节点指向父节点,重复步骤4。
可选的,将所述第四关键字插入所述父节点之后,还包括:确定插入所述第四关键字的父节点是否需要更新;在插入所述第四关键字的父节点需要更新的情况下,将所述父节点对应的更新请求分配至第四线程,以使所述第四线程在所述目标树上并行处理所述更新请求。
通过以下方式确定插入所述第四关键字的父节点是否需要更新:判断每一父节点的数值是否超过最大限制,若没有超过最大限制,则不需要更新;若超过最大限制,则需要更新,将所述父节点对应的更新请求分配至第四线程,其中,第四线程用于更新父节点。
可选的,在所述第一元数据访问请求为删除请求和插入请求的情况下,将所述操作请求分配至第二线程之后,还包括:控制所述第二线程串行在第一叶子节点中插入第一关键字和在第二叶子节点中删除第二关键字,其中,所述叶子节点包括:所述第一叶子节点和所述第二叶子节点,所述第一元数据访问请求中携带有所述第一关键字和第二关键字,所述第一关键字和第二关键字均指示第一逻辑块地址与物理块地址的对应关系;在将多个所述第一关键字插入至所述叶子节点,以及将多个所述第二关键字均删除的情况下,确定所述叶子节点是否需要更新;在所述多个叶子节点需要更新的情况下,对所述叶子节点执行分裂操作或者合并操作。
可以理解的是,在所述第一元数据访问请求为删除请求和插入请求的情况下,则需要确定删除请求和插入请求之后的叶子节点是否需要合并和/或分裂,若需要合并和/或分裂操作,则按照上述叶子节点的合并和/分裂方法执行操作。
可选的,获取多个第一元数据访问请求之前,还包括:获取多个第二元数据访问请求,其中,所述多个第二元数据访问请求包括:所述多个第一元数据访问请求;获取所述多个第二元数据访问请求中分别携带的第二逻辑块地址;确定每个所述第二逻辑块地址对应的第一地址范围;将位于相同第一地址范围的第二逻辑块地址划分为同一分组;确定所述同一分组对应的第二元数据访问请求为所述第一元数据访问请求。
可以理解的是,由于每个目标树存储目标区间范围的逻辑块地址,因此,在获取多个第二元数据访问请求分别携带的第二逻辑块地址,可以根据第二逻辑块地址对多个第二元数据访问请求进行分组,其中每一分组中的第二元数据访问请求对应的地址范围相同。
可选的,控制所述多个第一线程在目标树上并行处理所述多个读请求之前,所述方法还包括:确定所述多个第一元数据访问请求对应的第二地址范围;确定所述第二地址范围对应的目标树,其中,所述目标树用于存储所述第二地址范围的元数据。
需要说明的是,由于每个目标树存储目标区间范围的逻辑块地址,因此,根据元数据访问请求对应的第二地址范围,确定元数据访问请求需要范文的目标树。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
为了更好的理解上述请求的分配方法的过程,以下再结合可选实施例对上述请求的分配方法的实现流程进行说明,但不用于限定本申请实施例的技术方案。
在结合可选实施例对上述请求的分配方法的实现流程进行说明之前,要了解元数据整个存储中的读写流程中的功能和位置,如图3所示,图3是根据本申请实施例的元数据在整个存储中的读写流程图。
步骤S301,写数据时,写请求先将数据写入磁盘或SSD盘,即写1;从磁盘或SSD盘返回后将返给的PBA(物理块地址)值写入元数据,即写2;
步骤S302,读数据时,读请求首先去访问元数据,获取LBA(逻辑块地址)对应的PBA(物理块地址)值,即读1;从元数据获取PBA(物理块地址)值后,向磁盘或SSD盘获取数据,即读2。
由此可见,元数据在整个存储的IO过程中的位置是相当重要的,其访问的性能将严重影响整个存储的性能。
一种新的多并发批量操作元数据方法具体实施过程如下:
为了支持全闪存内部元数据对象的有效查找,需要有一种先进的索引结构支持,可以获得较好的查找性能。B+树索引具有50%的查找时间复杂度和50%的空间使用率(非叶子节点作为索引节点,不作为保存数据的节点);B+树查找是通过根节点然后逐级往下遍历直到叶子节点;综合来看B+树有更好的搜索效率,更适合组织元数据对象。
图4是根据本申请实施例的一种新的多并发批量操作元数据方法的工作流程图,如图4所示:
根据本申请实施例的一种新的多并发批量操作元数据方法的工作流程划分为四个阶段,对应6个操作。每个阶段之间存在屏障,保障所有工作线程同时完成,然后再统一执行下一个阶段。
步骤S401,图5是根据本申请实施例的按照线程划分批量查询的工作示意图,如图5所示,首先是阶段1-1,将一批请求(图4中为8个请求)分配给N个工作线程(图4中为4个工作线程),每个线程处理一部分操作请求(图4中为2个请求);
步骤S402,图6是根据本申请实施例的批量查询,到达叶子节点的工作示意图,如图6所示,阶段1-2,将所有的操作根据B+树路径遍历至叶子节点,构建操作请求到叶子节点的映射。由于只是纯读操作,此阶段无需加锁。多个请求同时下降至叶子节点,减少中间节点的额外内存访问开销;
步骤S403,图7是根据本申请实施例的线程重新分配节点的工作示意图,如图7所示,执行阶段2-1,将节点重新分配,保证每个叶子节点只由一个工作线程操作;
步骤S404,图8是根据本申请实施例的修改叶子节点的工作示意图,如图8所示,执行阶段2-2,叶子节点的读取、删除、插入等操作,此处执行的返回结果与顺序执行单个请求的返回结果一致(即保证顺序一致性)。此时,由于读取操作不会修改B+树,可以直接获取执行结果。之后对节点进行批量修改操作;
步骤S405,图9是根据本申请实施例的修改中间节点的工作示意图,如图9所示,执行阶段3,自底向上逐层更新中间节点;
步骤S406,图10是根据本申请实施例的修改根节点的工作示意图,如图10所示,执行阶段4-,修改直至根节点。
此批量执行的好处在于减少了中间节点访问开销,也消除了额外的锁竞争开销。
叶子节点和中间节点批量修改的逻辑是一样的。先对节点进行增删操作,之后根据节点大小判断是否分裂或合并。如果分裂则需要等分成若干个新的节点,并将指针传递到上层插入父节点。如果是合并则需要把该节点的孩子分配到相应的兄弟节点。
通过上述方法可以看出,全闪存储元数据使用B+树的数据结构来组织,针对B+树等索引优化并行查找效率,兼顾数据落盘时的连续大块写,采用批量更新的机制,将多个请求打包一起完成数据的查找、落盘持久化,批量处理多个操作请求,降低重复冗余的查询路径,去除多个线程因同步、竞争而导致的额外CPU开销;基于批量处理思想,把写缓存中小批量的数据打包成一个批处理操作,作为B+树的输入,同时由若干个工作线程统一执行。每个工作线程在四个划分好的阶段,负责处理对应B+树节点的操作,从而避免了线程的竞争、互斥开销,提高系统整体的吞吐量;该方法可以获得高效的元数据访问和增加并发查询的高效性。
在本实施例中还提供了一种请求的分配装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图11是根据本申请实施例的请求的分配装置的结构框图,如图11所示,该装置包括:
获取模块1102,用于获取多个第一元数据访问请求,并将每个第一元数据访问请求拆分为多个子访问请求,其中,所述多个子访问请求包括:读请求、操作请求,所述每个第一元数据访问请求携带有元数据的第一逻辑块地址;
第一分配模块1104,用于将多个读请求分配至多个第一线程;
控制模块1106,用于控制所述多个第一线程在目标树上并行处理所述多个读请求,并在所述目标树中确定所述多个读请求对应的叶子节点,其中,所述目标树用于存储所述元数据的第一逻辑块地址和物理块地址;
第二分配模块1108,用于将多个所述操作请求分配至第二线程,以使所述第二线程根据所述叶子节点在所述目标树上处理所述操作请求。
通过上述装置,由于将每个第一元数据访问请求拆分为读请求、操作请求,其中,所述每个第一元数据访问请求携带有元数据的第一逻辑块地址,并将每个第一元数据访问请求拆分为多个子访问请求,将多个读请求分配至多个第一线程,将多个操作请求分配至第二线程。以及控制所述多个第一线程在目标树上并行处理所述多个读请求,并在所述目标树中确定所述多个读请求对应的叶子节点,所述第二线程根据所述叶子节点在所述目标树上处理所述操作请求。因此,可以解决现有技术中访问元数据时系统整体的吞吐量低、时延小的技术问题,达到了避免线程的竞争,提高系统整体的吞吐量的技术效果。
在一个可选的实施例中,所述获取模块,还用于确定每个第一元数据访问请求中携带的第一逻辑块地址;根据所述第一逻辑块地址遍历所述目标树中的节点信息,以确定每个所述读请求对应的叶子节点。
在一个可选的实施例中,上述装置还包括:查询模块,用于在所述第一元数据访问请求为查询请求的情况下,控制所述第二线程确定所述叶子节点中是否存储有所述第一逻辑块地址对应的物理块地址;在所述叶子节点中存储有所述物理块地址的情况下,控制所述第二线程返回所述物理块地址;在所述叶子节点中未存储有所述物理块地址的情况下,控制所述第二线程返回空值。
在一个可选的实施例中,上述装置还包括:更新模块,用于在所述第一元数据访问请求为插入请求的情况下,控制所述第二线程在所述叶子节点中串行插入第一关键字,其中,所述第一元数据访问请求中携带有所述第一关键字,所述第一关键字指示第一逻辑块地址与第一物理块地址的对应关系;在将所述第一关键字已分别插入至所述叶子节点的情况下,确定所述叶子节点是否需要更新;在所述叶子节点需要更新的情况下,对所述叶子节点执行分裂操作。
在一个可选的实施例中,更新模块,用于确定所述叶子节点中存储的多个第二关键字;确定所述多个第二关键字中的第三关键字,并将所述第三关键字插入所述叶子节点的父节点中。
在一个可选的实施例中,更新模块,用于确定插入所述第三关键字的父节点是否需要更新;在插入所述第三关键字的父节点需要更新的情况下,将所述父节点对应的更新请求分配至第三线程,以使所述第三线程 在所述目标树上并行处理所述更新请求。
在一个可选的实施例中,更新模块,用于确定所述叶子节点中存储的关键字的数值,以及确定允许所述叶子节点存储的关键字的最大值;根据所述数值和所述最大值的大小关系确定所述叶子节点是否需要更新。
在一个可选的实施例中,更新模块,用于在所述数值大于所述最大值的情况下,确定所述叶子节点需要更新;在所述数值小于或者等于所述最大值的情况下,确定所述叶子节点不需要更新。
在一个可选的实施例中,更新模块,用于插入步骤:在多个所述第二线程中的任一线程获取到目标锁的情况下,控制所述任一线程在所述叶子节点中插入对应的第一关键字;循环执行所述插入步骤,直至每个所述第二线程均在所述叶子节点中插入第一关键字。
在一个可选的实施例中,所述第二分配模块,还用于将多个所述第二线程分配至同一线程队列中;在所述线程队列中依次取出任一第二线程,控制所述任一第二线程在所述叶子节点中插入第一关键字,直至每个所述第二线程串行均在所述叶子节点中插入第一关键字。
在一个可选的实施例中,上述装置还包括:更新模块,用于在所述第一元数据访问请求为删除请求的情况下,控制所述第二线程在所述叶子节点中串行删除第二关键字,其中,所述第一元数据访问请求中携带有所述第二关键字,所述第二关键字指示第一逻辑块地址与物理块地址的对应关系;在将多个所述第二关键字均删除的情况下,确定所述叶子节点是否需要更新;在所述叶子节点需要更新的情况下,对所述叶子节点执行合并操作。
在一个可选的实施例中,更新模块,用于在所述合并操作为将所述叶子节点的第四关键字插入所述叶子节点的情况下,确定所述叶子节点的兄弟节点的第四关键字和父节点的第五关键字;将所述第四关键字插入所述父节点,以及将所述第五关键字插入至所述叶子节点;在所述合并操作为将所述叶子节点的关键字插入所述叶子节点的兄弟节点的情况下,删除所述叶子节点的父节点的第六关键字,其中,所述第六关键字的孩子指针指向所述叶子节点和所述兄弟节点。
在一个可选的实施例中,更新模块,用于确定插入所述第四关键字的父节点是否需要更新;在插入所述第四关键字的父节点需要更新的情况下,将所述父节点对应的更新请求分配至第四线程,以使所述第四线程在所述目标树上并行处理所述更新请求。
在一个可选的实施例中,更新模块,用于控制所述第二线程串行在第一叶子节点中插入第一关键字和在第二叶子节点中删除第二关键字,其中,所述叶子节点包括:所述第一叶子节点和所述第二叶子节点,所述第一元数据访问请求中携带有所述第一关键字和第二关键字,所述第一关键字和第二关键字均指示第一逻辑块地址与物理块地址的对应关系;在将多个所述第一关键字插入至所述叶子节点,以及将多个所述第二关键字均删除的情况下,确定所述叶子节点是否需要更新;在所述多个叶子节点需要更新的情况下,对所述叶子节点执行分裂操作或者合并操作。
在一个可选的实施例中,更新模块,用于获取多个第二元数据访问请求,其中,所述多个第二元数据访问请求包括:所述多个第一元数据访问请求;获取所述多个第二元数据访问请求中分别携带的第二逻辑块地址;根据多个所述第二逻辑块地址在所述多个第二元数据访问请求中获取所述多个第一元数据访问请求。
在一个可选的实施例中,所述装置还包括,确定模块,用于确定每个所述第二逻辑块地址对应的第一地址范围;将位于相同第一地址范围的第二逻辑块地址划分为同一分组;确定所述同一分组对应的第二元数据访问请求为所述第一元数据访问请求。
在一个可选的实施例中,更新模块,用于确定所述多个第一元数据访问请求对应的第二地址范围;确定所述第二地址范围对应的目标树,其中,所述目标树用于存储所述第二地址范围的元数据。
在一个可选的实施例中,所述目标树,包括:B+树。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本申请的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (21)
1.一种请求的分配方法,其特征在于,包括:
获取多个第一元数据访问请求,并将每个第一元数据访问请求拆分为多个子访问请求,其中,所述多个子访问请求包括:读请求、操作请求,所述每个第一元数据访问请求携带有元数据的第一逻辑块地址;
将多个读请求分配至多个第一线程;
控制所述多个第一线程在目标树上并行处理所述多个读请求,并在所述目标树中确定所述多个读请求对应的叶子节点,其中,所述目标树用于存储所述元数据的第一逻辑块地址和物理块地址;
将多个所述操作请求分配至第二线程,以使所述第二线程根据所述叶子节点在所述目标树上处理所述操作请求;
其中,所述目标树,包括:B+树。
2.根据权利要求1所述的方法,其特征在于,在所述目标树中确定所述多个读请求对应的叶子节点,包括:
确定每个第一元数据访问请求中携带的第一逻辑块地址;
根据所述第一逻辑块地址遍历所述目标树中的节点信息,以确定每个所述读请求对应的叶子节点。
3.根据权利要求1所述的方法,其特征在于,在所述第一元数据访问请求为查询请求的情况下,将所述操作请求分配至第二线程之后,所述方法还包括:
控制所述第二线程确定所述叶子节点中是否存储有所述第一逻辑块地址对应的物理块地址;
在所述叶子节点中存储有所述物理块地址的情况下,控制所述第二线程返回所述物理块地址。
4.根据权利要求3所述的方法,其特征在于,控制所述第二线程确定所述叶子节点中是否存储有所述第一逻辑块地址对应的物理块地址之后,所述方法还包括:
在所述叶子节点中未存储有所述物理块地址的情况下,控制所述第二线程返回空值。
5.根据权利要求1所述的方法,其特征在于,在所述第一元数据访问请求为插入请求的情况下,将多个所述操作请求分配至第二线程之后,所述方法还包括:
控制所述第二线程在所述叶子节点中串行插入第一关键字,其中,所述第一元数据访问请求中携带有所述第一关键字,所述第一关键字指示第一逻辑块地址与第一物理块地址的对应关系;
在将所述第一关键字已分别插入至所述叶子节点的情况下,确定所述叶子节点是否需要更新;
在所述叶子节点需要更新的情况下,对所述叶子节点执行分裂操作。
6.根据权利要求5所述的方法,其特征在于,对所述叶子节点执行分裂操作之后,所述方法还包括:
确定所述叶子节点中存储的多个第二关键字;
确定所述多个第二关键字中的第三关键字,并将所述第三关键字插入所述叶子节点的父节点中。
7.根据权利要求6所述的方法,其特征在于,将所述第三关键字插入所述叶子节点的父节点中之后,所述方法还包括:
确定插入所述第三关键字的父节点是否需要更新;
在插入所述第三关键字的父节点需要更新的情况下,将所述父节点对应的更新请求分配至第三线程,以使所述第三线程在所述目标树上并行处理所述更新请求。
8.根据权利要求5所述的方法,其特征在于,确定所述叶子节点是否需要更新,包括:
确定所述叶子节点中存储的关键字的数值,以及确定允许所述叶子节点存储的关键字的最大值;
根据所述数值和所述最大值的大小关系确定所述叶子节点是否需要更新。
9.根据权利要求8所述的方法,其特征在于,根据所述数值和所述最大值的大小关系确定所述叶子节点是否需要更新,包括:
在所述数值大于所述最大值的情况下,确定所述叶子节点需要更新;
在所述数值小于或者等于所述最大值的情况下,确定所述叶子节点不需要更新。
10.根据权利要求5所述的方法,其特征在于,控制所述第二线程在所述叶子节点中串行插入第一关键字,包括:
插入步骤:在多个所述第二线程中的任一线程获取到目标锁的情况下,控制所述任一线程在所述叶子节点中插入对应的第一关键字;
循环执行所述插入步骤,直至每个所述第二线程均在所述叶子节点中插入第一关键字。
11.根据权利要求5所述的方法,其特征在于,控制所述第二线程在所述叶子节点中串行插入第一关键字,包括:
将多个所述第二线程分配至同一线程队列中;
在所述线程队列中依次取出任一第二线程,控制所述任一第二线程在所述叶子节点中插入第一关键字,直至每个所述第二线程串行均在所述叶子节点中插入第一关键字。
12.根据权利要求1所述的方法,其特征在于,在所述第一元数据访问请求为删除请求的情况下,将所述操作请求分配至第二线程之后,所述方法还包括:
控制所述第二线程在所述叶子节点中串行删除第二关键字,其中,所述第一元数据访问请求中携带有所述第二关键字,所述第二关键字指示第一逻辑块地址与物理块地址的对应关系;
在将多个所述第二关键字均删除的情况下,确定所述叶子节点是否需要更新;
在所述叶子节点需要更新的情况下,对所述叶子节点执行合并操作。
13.根据权利要求12所述的方法,其特征在于,对所述叶子节点执行合并操作之后,所述方法还包括:
在所述合并操作为将所述叶子节点的第四关键字插入所述叶子节点的情况下,确定所述叶子节点的兄弟节点的第四关键字和父节点的第五关键字;将所述第四关键字插入所述父节点,以及将所述第五关键字插入至所述叶子节点;
在所述合并操作为将所述叶子节点的关键字插入所述叶子节点的兄弟节点的情况下,删除所述叶子节点的父节点的第六关键字,其中,所述第六关键字的孩子指针指向所述叶子节点和所述兄弟节点。
14.根据权利要求13所述的方法,其特征在于,将所述第四关键字插入所述父节点之后,所述方法还包括:
确定插入所述第四关键字的父节点是否需要更新;
在插入所述第四关键字的父节点需要更新的情况下,将所述父节点对应的更新请求分配至第四线程,以使所述第四线程在所述目标树上并行处理所述更新请求。
15.根据权利要求1所述的方法,其特征在于,在所述第一元数据访问请求为删除请求和插入请求的情况下,将所述操作请求分配至第二线程之后,所述方法还包括:
控制所述第二线程串行在第一叶子节点中插入第一关键字和在第二叶子节点中删除第二关键字,其中,所述叶子节点包括:所述第一叶子节点和所述第二叶子节点,所述第一元数据访问请求中携带有所述第一关键字和第二关键字,所述第一关键字和第二关键字均指示第一逻辑块地址与物理块地址的对应关系;
在将多个所述第一关键字插入至所述叶子节点,以及将多个所述第二关键字均删除的情况下,确定所述叶子节点是否需要更新;
在所述多个叶子节点需要更新的情况下,对所述叶子节点执行分裂操作或者合并操作。
16.根据权利要求1所述的方法,其特征在于,获取多个第一元数据访问请求之前,所述方法还包括:
获取多个第二元数据访问请求,其中,所述多个第二元数据访问请求包括:所述多个第一元数据访问请求;
获取所述多个第二元数据访问请求中分别携带的第二逻辑块地址;
根据多个所述第二逻辑块地址在所述多个第二元数据访问请求中获取所述多个第一元数据访问请求。
17.根据权利要求16所述的方法,其特征在于,根据多个所述第二逻辑块地址在所述多个第二元数据访问请求中获取所述多个第一元数据访问请求,包括:
确定每个所述第二逻辑块地址对应的第一地址范围;
将位于相同第一地址范围的第二逻辑块地址划分为同一分组;
确定所述同一分组对应的第二元数据访问请求为所述第一元数据访问请求。
18.根据权利要求17所述的方法,其特征在于,控制所述多个第一线程在目标树上并行处理所述多个读请求之前,所述方法还包括:
确定所述多个第一元数据访问请求对应的第二地址范围;
确定所述第二地址范围对应的目标树,其中,所述目标树用于存储所述第二地址范围的元数据。
19.一种请求的分配装置,其特征在于,包括:
获取模块,用于获取多个第一元数据访问请求,并将每个第一元数据访问请求拆分为多个子访问请求,其中,所述多个子访问请求包括:读请求、操作请求,所述每个第一元数据访问请求携带有元数据的第一逻辑块地址;
第一分配模块,用于将多个读请求分配至多个第一线程;
控制模块,用于控制所述多个第一线程在目标树上并行处理所述多个读请求,并在所述目标树中确定所述多个读请求对应的叶子节点,其中,所述目标树用于存储所述元数据的第一逻辑块地址和物理块地址;
第二分配模块,用于将多个所述操作请求分配至第二线程,以使所述第二线程根据所述叶子节点在所述目标树上处理所述操作请求;
其中,所述目标树,包括:B+树。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至18任一项中所述的方法的步骤。
21.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述权利要求1至18任一项中所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310951716.9A CN116662019B (zh) | 2023-07-31 | 2023-07-31 | 请求的分配方法、装置、存储介质及电子装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310951716.9A CN116662019B (zh) | 2023-07-31 | 2023-07-31 | 请求的分配方法、装置、存储介质及电子装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116662019A CN116662019A (zh) | 2023-08-29 |
CN116662019B true CN116662019B (zh) | 2023-11-03 |
Family
ID=87717509
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310951716.9A Active CN116662019B (zh) | 2023-07-31 | 2023-07-31 | 请求的分配方法、装置、存储介质及电子装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116662019B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117312327B (zh) * | 2023-11-28 | 2024-03-08 | 苏州元脑智能科技有限公司 | 一种数据存储方法、装置、设备及计算机可读存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101567003A (zh) * | 2009-05-27 | 2009-10-28 | 清华大学 | 并行文件系统中资源的管理和分配方法 |
CN102279802A (zh) * | 2010-06-13 | 2011-12-14 | 中兴通讯股份有限公司 | 提高同步动态随机存储控制器的读操作效率的方法和装置 |
CN109213699A (zh) * | 2018-09-21 | 2019-01-15 | 郑州云海信息技术有限公司 | 一种元数据管理方法、系统、设备及计算机可读存储介质 |
CN110928493A (zh) * | 2019-10-31 | 2020-03-27 | 苏州浪潮智能科技有限公司 | 一种元数据模块及元数据模块处理方法 |
CN111125447A (zh) * | 2019-12-22 | 2020-05-08 | 北京浪潮数据技术有限公司 | 一种元数据访问方法、装置、设备及可读存储介质 |
WO2022037016A1 (zh) * | 2020-08-20 | 2022-02-24 | 苏州浪潮智能科技有限公司 | 一种树结构数据的存储方法、系统及相关装置 |
CN116431590A (zh) * | 2021-07-22 | 2023-07-14 | 华为技术有限公司 | 一种数据处理的方法及相关设备 |
-
2023
- 2023-07-31 CN CN202310951716.9A patent/CN116662019B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101567003A (zh) * | 2009-05-27 | 2009-10-28 | 清华大学 | 并行文件系统中资源的管理和分配方法 |
CN102279802A (zh) * | 2010-06-13 | 2011-12-14 | 中兴通讯股份有限公司 | 提高同步动态随机存储控制器的读操作效率的方法和装置 |
CN109213699A (zh) * | 2018-09-21 | 2019-01-15 | 郑州云海信息技术有限公司 | 一种元数据管理方法、系统、设备及计算机可读存储介质 |
CN110928493A (zh) * | 2019-10-31 | 2020-03-27 | 苏州浪潮智能科技有限公司 | 一种元数据模块及元数据模块处理方法 |
CN111125447A (zh) * | 2019-12-22 | 2020-05-08 | 北京浪潮数据技术有限公司 | 一种元数据访问方法、装置、设备及可读存储介质 |
WO2022037016A1 (zh) * | 2020-08-20 | 2022-02-24 | 苏州浪潮智能科技有限公司 | 一种树结构数据的存储方法、系统及相关装置 |
CN116431590A (zh) * | 2021-07-22 | 2023-07-14 | 华为技术有限公司 | 一种数据处理的方法及相关设备 |
Non-Patent Citations (2)
Title |
---|
PR-SSD: Maximizing Partial Read Potential by Exploiting Compression and Channel-Level Parallelism;Mincheol Kang等;《IEEE Transactions on Computers》;全文 * |
基于代理的并行文件系统元数据优化与实现;易建亮等;《计算机研究与发展》;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN116662019A (zh) | 2023-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106021266B (zh) | 支持动态更新的快速多层索引 | |
JP6025149B2 (ja) | データを管理するシステムおよび方法 | |
US8849876B2 (en) | Methods and apparatuses to optimize updates in a file system based on birth time | |
CN106294190B (zh) | 一种存储空间管理方法及装置 | |
US20200293532A1 (en) | Database engine | |
CN106471501B (zh) | 数据查询的方法、数据对象的存储方法和数据系统 | |
CN116662019B (zh) | 请求的分配方法、装置、存储介质及电子装置 | |
US10102267B2 (en) | Method and apparatus for access control | |
CN111459884B (zh) | 一种数据的处理方法、装置、计算机设备和存储介质 | |
CN103914483A (zh) | 文件存储方法、装置及文件读取方法、装置 | |
Tao et al. | Clustering massive small data for IOT | |
CN114090695A (zh) | 分布式数据库的查询优化的方法和装置 | |
US10558636B2 (en) | Index page with latch-free access | |
CN104573112A (zh) | Oltp集群数据库中页面查询方法及数据处理节点 | |
CN106294189B (zh) | 内存碎片整理方法及装置 | |
WO2024078122A1 (zh) | 数据库表扫描的方法、装置以及设备 | |
WO2016192057A1 (zh) | 索引表的更新方法和设备 | |
CN111414422B (zh) | 一种数据分布方法、装置、设备和存储介质 | |
Roumelis et al. | Bulk-loading and bulk-insertion algorithms for xBR^+-trees xBR+-trees in Solid State Drives | |
US11068514B2 (en) | System and method for indexing spatial data in a computer network using the least differential sum and binary decision tree | |
CN108804571B (zh) | 一种数据存储方法、装置以及设备 | |
CN114661668A (zh) | 文件管理方法及相关装置 | |
CN114443598A (zh) | 写数据方法、装置、计算机设备及存储介质 | |
US9330152B2 (en) | Grid loader process | |
US10380090B1 (en) | Nested object serialization and deserialization |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |