CN111625531A - 基于可编程装置的合并装置、数据合并方法及数据库系统 - Google Patents
基于可编程装置的合并装置、数据合并方法及数据库系统 Download PDFInfo
- Publication number
- CN111625531A CN111625531A CN201910148859.XA CN201910148859A CN111625531A CN 111625531 A CN111625531 A CN 111625531A CN 201910148859 A CN201910148859 A CN 201910148859A CN 111625531 A CN111625531 A CN 111625531A
- Authority
- CN
- China
- Prior art keywords
- data
- merging
- data records
- unit
- task
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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
本申请实施例提供一种基于可编程装置的合并装置、数据合并方法及数据库系统。在本申请实施例中,基于可编程装置实现一种包含至少两个合并器的合并装置,并将基于可编程装置的合并装置应用于数据库系统中,负责对数据库系统中需要合并的数据记录进行合并处理,可卸载CPU的处理负担,降低数据合并操作对数据库系统中CPU资源的占用,降低数据合并操作对数据库系统的读写性能的影响,提高数据库系统的整体能力,改善性能抖动问题;另外,本实施例的合并装置包含执行不同合并逻辑的多个合并器,可满足多样化的数据合并需求;而不同合并器相互独立,还可避免不同数据合并任务之间相互阻塞,使得各数据合并任务具备低时延特性。
Description
技术领域
本申请涉及数据库技术领域,尤其涉及一种基于可编程装置的合并装置、数据合并方法及数据库系统。
背景技术
常见的基于LSM(Log-structured merge-tree)数据结构的键值对(Key-Value,KV)型的数据库有LevelDB和基于LevelDB演变的RocksDB等。在LevelDB或RocksDB中,采用分层存储方式将大部分KV记录存储到磁盘中,其大概过程为:将KV记录写入内存中的memtable(内存表,是一种在内存中保存数据的数据结构)中,memtable达到一定大小后(如64MB)再刷到磁盘上的SSTable(Sorted String Table,SST)文件。
考虑到不同时间段内的SSTable文件之间可能存在Key重叠,现有技术采取合并(compaction)方式对已有KV记录进行整理压缩,把存在Key范围重叠的文件按Key值重新排序,保证不同SSTable文件之间的Key无重叠,从而达到快速查询的目的。但是,现有数据合并过程会消耗大量CPU资源,降低数据库系统的读写性能。
发明内容
本申请的多个方面提供一种基于可编程装置的合并装置、数据合并方法及数据库系统,用以降低数据合并过程对数据库系统的读写性能的影响。
本申请实施例提供一种基于可编程装置的合并装置,包括:至少两个合并器,所述至少两个合并器相互独立且执行不同的合并逻辑;其中,每个合并器包括存储模块、任务管理模块以及合并模块;所述存储模块,用于存储数据库系统中需要由所述存储模块所属合并器进行合并处理的多条数据记录与任务描述符;所述任务管理模块,用于根据数据库系统提供的描述符存储信息,从其所属合并器中的存储模块中读取所述任务描述符并从中解析出任务参数,将所述任务参数下发给其所属合并器中的合并模块;所述合并模块,用于根据所述任务参数对所述多条数据记录进行合并处理,并将合并结果写入其所属合并器中的存储模块以供所述数据库系统读取。
本申请实施例还提供一种数据合并方法,适于基于可编程装置的合并装置中的任一合并器,所述方法包括:接收数据库系统写入的需要由所述合并器进行合并处理的多条数据记录以及任务描述符;根据数据库系统提供的描述符存储信息读取所述任务描述符,并从所述任务描述符中解析出任务参数;根据所述任务参数对所述多条数据记录进行合并处理以得到合并结果,存储所述合并结果以供所述数据库系统读取。
本申请实施例还提供一种数据库系统,包括:存储器、处理器以及基于可编程装置的合并装置;所述基于可编程装置的合并装置包括至少两个合并器,所述至少两个合并器相互独立且执行不同合并逻辑;
所述存储器,用于存储计算机程序以及所述数据库系统中的数据记录;所述处理器与所述存储器和所述合并装置耦合,用于执行所述计算机程序,以用于:根据应用的合并需求,确定需要进行合并处理的多条数据记录,并从所述至少两个合并器中选择对所述多条数据记录进行合并处理所需的目标合并器;将所述多条数据记录以及任务描述符写入所述目标合并器,并向所述目标合并器发送描述符存储信息,以供所述目标合并器根据所述任务描述符对所述多条数据记录进行合并处理,以及从所述目标合并器获取所述多条数据记录的合并结果;
所述至少两个合并器,用于在作为所述目标合并器时,存储所述处理器写入的所述多条数据记录以及任务描述符;根据所述处理器发送的描述符存储信息读取所述任务描述符并从中解析出任务参数;根据所述任务参数对所述多条数据记录进行合并处理以得到所述合并结果。
在本申请实施例中,基于可编程装置实现一种包含至少两个合并器的合并装置,并将基于可编程装置的合并装置应用于数据库系统中,负责对数据库系统中需要合并的数据记录进行合并处理,可卸载CPU的处理负担,降低数据合并操作对数据库系统中CPU资源的占用,降低数据合并操作对数据库系统的读写性能的影响,提高数据库系统的整体能力,改善性能抖动问题;另外,本实施例的合并装置包含执行不同合并逻辑的多个合并器,可满足多样化的数据合并需求;而不同合并器相互独立,还可避免不同数据合并任务之间相互阻塞,使得各数据合并任务具备低时延特性。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1a为本申请一示例性实施例提供的一种数据库系统的结构示意图;
图1b为本申请一示例性实施例提供的数据库系统中分层存储数据记录的示意图;
图1c为本申请一示例性实施例提供的另一种数据库系统的结构示意图;
图2a为本申请另一示例性实施例提供的一种基于可编程装置的合并装置20的结构示意图;
图2b为本申请另一示例性实施例提供的另一种基于可编程装置的合并装置20的结构示意图;
图2c为本申请另一示例性实施例提供的又一种基于可编程装置的合并装置20的结构示意图;
图2d为本申请另一示例性实施例提供的一种排序单元的结构示意图;
图3为本申请又一示例性实施例提供的一种数据合并方法的流程示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在采用分层存储方式的数据库系统中,数据记录先写入内存中的内存表(memtable)中,memtable达到一定大小后(如64MB)再刷到磁盘上的SST文件中。由于这种方式是全追加写方式,没有随机写,利用了磁盘的顺序写性能比随机写性能高很多的特点,因而能达到较高的写性能。但是,由于memtable存储的是一段时间内的数据记录,然后生成SST文件,这意味着不同时间段内的SST文件之间可能存在关键字(key)重叠的数据记录。在读时,为了找到最新的数据记录,需要查询多个SST文件,这就造成了读放大。
为了解决读放大的问题,可以定期对数据记录进行合并(compaction)操作,把存在key范围重叠的文件按key值重新排序,保证不同SST文件中的key无重叠,从而达到快速查询的目的,但是数据合并操作会降低数据库系统的读写性能。一方面,在对memtable中的数据记录进行合并(记为mini compaction)时,需要做得足够快,以便能够在memtable达到一定大小后及时地将数据记录刷到磁盘上,避免内存被memtable用满,从而限制写操作的QPS,导致QPS降低。另一方面,在对磁盘上不同层的SST文件做合并(记为majorcompaction)时,需要进行key的去重处理,以避免同一个key存在多个文件中。数据合并操作会消耗大量CPU资源,这会减少用于数据库读写的CPU资源,进而降低数据库的读写性能。
针对上述技术问题,在本申请一些实施例中,基于可编程装置实现一种包含至少两个合并器的合并装置,并将基于可编程装置的合并装置应用于数据库系统中,负责对数据库系统中需要合并的数据记录进行合并处理,可卸载CPU的处理负担,降低数据合并操作对数据库系统中CPU资源的占用,降低数据合并操作对数据库系统的读写性能的影响,提高数据库系统的整体能力,改善性能抖动问题;另外,本实施例的合并装置包含执行不同合并逻辑的多个合并器,可满足多样化的数据合并需求;而不同合并器相互独立,还可避免不同数据合并任务之间相互阻塞,使得各数据合并任务具备低时延特性。
值得说明的一点是,为简化描述,在本申请下述实施例的有些描述中会将基于可编程装置的合并装置简称为合并装置,本领域技术人员可以理解,本申请各实施例中的“合并装置”与“基于可编程装置的合并装置”是同一概念。另外,本申请实施例中的“可编程装置”是指其逻辑功能可按照用户对装置编程来确定的装置,例如可以是现场可编程门阵列(Field-Programmable Gate Array,FPGA)、复杂可编程逻辑器件(Complex ProgrammableLogic Device,CPLD)等。换句话说,本申请下述实施例中的合并装置可以是基于FPGA实现的合并装置,或者是基于CPLD实现的合并装置。
图1a为本申请一示例性实施例提供的一种数据库系统的结构示意图。如图1a所示,该数据库系统100包括:存储器10、基于可编程装置的合并装置20以及处理器30。存储器10分别与处理器30和基于可编程装置的合并装置20连接。
存储器10主要用作数据库系统100的存储空间,可以包括至少一块存储介质,这些存储介质可以是相同类型的存储介质,也可以是不同类型的存储介质。例如,存储器10可以包括易失性的存储介质,例如RAM,也可以包括非易失性的存储介质,例如只读存储器(Read-Only Memory,ROM)、闪存等。如图1a所示,存储器10主要包括内存和磁盘,内存一般采用易失性的存储介质实现,而磁盘一般采用非易失性的存储介质实现。
存储器10可以存储与数据库系统100相关的各种数据,例如需要数据库系统100存储的数据记录、日志文件、数据库系统100的操作系统(OS)、数据库系统100上运行的各种计算机程序以及程序数据等等。可选地,一条数据记录可以包括关键字(key)和与关键字对应的键值(value),也可简称为kv记录。
在数据库系统100中,采用分层存储的方式对数据记录进行存储。当写入数据记录时,先将该数据记录写入内存中的数据文件中;当内存中的数据文件的大小达到设定大小后,再将内存中的数据文件中的数据记录导出到磁盘上一个新的数据文件中。而在磁盘上,数据文件采用层级结构进行存储,例如第一层(最靠近内存的一层)为Level_0,第二层为Level_1,依次类推,层级逐渐增高。在一些可选实施例中,如图1a所示,内存中的数据文件可以是memtable,磁盘上的数据文件可以是SST文件,但不限于此。
在采用分层存储方式的应用场景中,读取数据记录时需要在内存以及磁盘上各层级数据文件中依照数据记录的新鲜程度依次查找,比较复杂,查找速度较慢。为了加速读取数据记录的速度,可以采用合并(compaction)方式对已有数据记录进行整理压缩,去除一些无效数据记录,并使数据记录有序化,从而降低查询复杂度,提高查询效率。
在本实施例中,存储器10中还存储有与数据合并流程相关的计算机程序,处理器30执行该计算机程序后可配合基于可编程装置的合并装置20实现一种新的数据合并方案。其中,基于可编程装置的合并装置20包括至少两个合并器,至少两个合并器相互独立且执行不同的合并逻辑,用以满足不同的数据合并需求。
值得说明的是,在数据库系统100中,同一时刻或时段内可以只存在一个数据合并任务,也可以同时存在多个数据合并任务。处理器30与基于可编程装置的合并装置20相配合,在同一时刻或时段内可以执行一个数据合并任务,也可以同时执行多个数据合并任务。一个数据合并任务是指需要按照一种合并逻辑对多条数据记录进行合并处理的任务过程。在本申请实施例中,对每个数据合并任务的处理相同或类似,故在本申请各实施例中均以其中一个数据合并任务为例进行说明,换言之,在本申请各实施例中提到的“多条数据记录”是指同一数据合并任务中需要进行合并处理的数据记录。
在本实施例中,处理器30执行存储器10中存储的与数据合并流程相关的计算机程序,可根据应用的合并需求,确定数据库系统中需要进行合并处理的多条数据记录,并从合并装置20包含的至少两个合并器中选择对所述多条数据记录进行合并处理所需的目标合并器,目标合并器是至少两个合并器中的一个合并器;将多条数据记录以及任务描述符写入目标合并器,并向目标合并器发送描述符存储信息,以供目标合并器根据任务描述符对多条数据记录进行合并处理;以及在目标合并器对多条数据记录进行合并处理后,从目标合并器获取多条数据记录的合并结果。
其中,描述符存储信息指向任务描述符在目标合并器中的存储位置,以便于目标合并器找到任务描述符。例如,描述符存储信息可以包括任务描述符在目标合并器中的起始存储地址和任务描述符的长度,但不限于此。
其中,任务描述符是一种数据结构,主要用来配置数据合并任务所需的任务参数。在本实施例中,任务描述符的内容长度非固定,而是可变的,可根据数据合并任务的需求灵活扩展,以满足不同数据合并任务对任务参数的配置需求。根据数据合并任务或合并需求的不同,任务描述符包含的任务参数会有所不同。可选地,任务描述符中携带的任务参数可以包括但不限于:当前时间、指示需要合并的多条数据记录在目标合并器中的存储位置的信息、数据块大小(block_size)、文件大小(FileSize)、后续待合并数据文件的大小、去重间隔参数、压缩标识、元数据计算维度等参数。其中,指示需要合并的多条数据记录在目标合并器中的存储位置的信息可以是这些数据记录所在文件在目标合并器中的直接存储地址,也可以是地址表的地址,地址表中记录有各条数据记录所在数据文件的在目标合并器中的存储地址。后续待合并数据文件的大小可通过后续待合并数据文件包含的关键字范围来表示,但不限于此。关于这些任务参数的作用将在后续实施例中进行详细说明,这里仅作为任务参数的示例列在这里。
一般来说,不同合并需求对应不同的合并逻辑,而本实施例的合并装置20中包含多个执行不同合并逻辑的合并器,可以支持各种合并需求;而且,随着合并需求的持续发展和多样化,可对合并装置20中的合并器进行适应性扩展。下面对不同应用场景中的合并需求进行举例说明:
在一些应用场景中,需对存储器10所包含的磁盘上的数据记录进行合并处理,则本申请实施例中需要进行合并处理的多条数据记录主要包括存储于磁盘上的多个待合并数据文件中的数据记录。可选地,多个待合并数据文件可以是来自于同一层级的数据文件,也可以是来自于至少两个不同层级的数据文件。
如图1b所示,内存中包括memtable文件,磁盘上按照层级结构存储有数据文件level_0、数据文件level_1、数据文件level_2、……、数据文件level_n。则,在针对磁盘上的数据记录进行合并处理的场景中,处理器30可以根据应用的合并需求,从数据文件level_0、数据文件level_1、数据文件level_2、……、以及数据文件level_n中确定多个待合并数据文件,并生成相应的任务描述符,从至少两个合并器中选择合并逻辑与此次合并需求匹配的目标合并器,将多个待合并数据文件和任务描述符写入目标合并器,并向目标合并器发送描述符存储信息,以供目标合并器对多个待合并数据文件进行合并处理。
例如,若位于同一层的不同数据文件之间的数据记录是key乱序的,则处理器30可以根据合并需求,将同一层的数据文件作为待合并数据文件,从而实现同一层内数据记录的合并处理,保证同一层上不同数据文件之间不存在key范围重叠。又例如,若位于同一层的不同数据文件之间的数据记录是key有序的,但是不同层的数据文件之间的数据记录是key乱序的,则处理器30可以根据合并需求,将相邻两层的数据文件作为待合并数据文件,从而实现相邻两层数据文件间的合并处理,保证相邻层上不同数据文件之间不存在key范围重叠。又例如,处理器30还可以将相邻的三层甚至更多层上的数据文件作为待合并数据文件,实现相邻的三层或更多层以上数据文件间的合并处理。当然,若应用需要对不相邻的两层、三层或等多层上的数据文件进行合并处理,本实施例也可以根据应用的合并需求选择不相邻的两层、三层或等多层上的数据文件作为待合并数据文件。
在另一些应用场景中,考虑到内存中的数据记录在累积到一定数量之后需要被导出至磁盘上的数据文件中,然而在数据记录累积过程中可能出现重叠的数据记录,因此在将内存中的数据记录导出至磁盘上的数据文件的过程中,可以对内存中的数据记录进行合并处理。在这种情况下,不仅需要针对存储器10所包含的磁盘上的数据记录进行合并处理,甚至需要针对存储器10所包含的内存上的数据记录进行合并处理,则本申请实施例中需要进行合并处理的多条数据记录主要包括存储于内存以及磁盘上的数据记录。
如图1b所示,内存中包括memtable文件,磁盘上按照层级结构存储有数据文件level_0、数据文件level_1、数据文件level_2、……、数据文件level_n。则,在将memtable文件导出至磁盘的过程中,处理器30可以根据应用的合并需求,读取memtable文件,并生成相应的任务描述符,从至少两个合并器中选择合并逻辑与此次合并需求匹配的目标合并器,将memtable文件和任务描述符写入目标合并器,并向目标合并器发送描述符存储信息,以供目标合并器对memtable文件中的数据记录进行合并处理。
在本实施例中,可由不同的事件或条件,触发处理器30执行数据合并流程。例如,可以设定数据合并周期,每当数据合并周期到达时,可以触发处理器30执行数据合并流程。又例如,当磁盘上某一层级的数据记录的数量达到设定的上限时,可以触发处理器30执行数据合并流程。再例如,在存储器10包括内存和磁盘的场景中,数据记录不断被写入内存,则当内存空间占用率达到一定界限后,可以触发处理器30执行数据合并流程。
在本实施例中,基于可编程装置的合并装置20还与处理器30通信连接。对合并装置20包含的至少两个合并器来说,都有可能被处理器30选择为目标合并器。对每个合并器来说,在作为目标合并器时,可存储处理器30写入的多条数据记录以及任务描述符;根据处理器30发送的描述符存储信息读取任务描述符并从中解析出任务参数;根据任务参数对多条数据记录进行合并处理以得到合并结果。其中,处理器30利用合并结果替换多条待合并数据,可完成数据记录的合并操作。
可选地,基于可编程装置的合并装置20可以采用PCIE板卡的形式挂载在数据库系统100中,则处理器30可以通过PCIE通道将需要合并的多条数据记录写入基于可编程装置的合并装置20中的目标合并器中。
在本实施例中,数据库系统100中增加基于可编程装置的合并装置20,且数据合并过程主要由基于可编程装置的合并装置20中的合并器完成,可节约处理器30的计算资源,降低处理器30的处理负担,使得处理器30可以更加专注数据记录的写入和查询,实现数据存储(写入和查询)与数据合并的分离,进而降低了数据合并操作对数据写入和查询性能的影响,提高数据库系统100的整体能力,改善性能抖动问题。另外,本实施例的合并装置20包含执行不同合并逻辑的多个合并器,可满足多样化的数据合并需求,不受应用场景的限制;而不同合并器相互独立,还可避免不同数据合并任务之间相互阻塞,使得各数据合并任务具备低时延特性。
进一步,如图1c所示,基于可编程装置的合并装置20的每个合并器包括存储模块21、任务管理模块22以及合并模块23。
存储模块21主要用作其所属合并器的存储空间,负责存储与该合并器相关的数据,例如可用于存储数据库系统中需要由该存储模块21所属合并器进行合并处理的多条数据记录与任务描述符。可选地,处理器30可以通过PCIE通道将多条数据记录与任务描述符写入存储模块21中。值得说明的是,除了多条数据记录与任务描述符之外,存储模块21还可以存储其所属合并器的配置文件等。对每个合并器来说,其中的任务管理模块22和合并模块23均可访问该合并器中的存储模块21。
可选地,存储模块21可以包括位于其所属合并器内部实现的片内存储器,和/或,位于其所属合并器外部实现的片外存储器。在本申请各实施例的图示中,以存储模块21位于其所属合并器外部为例,但并不限于此。
任务管理模块22是其所属合并器的控制模块,主要实现该合并器的控制逻辑,可根据数据库系统提供的描述符存储信息,从其所属合并器中的存储模块21中读取任务描述符并从中解析出任务参数,将任务参数下发给其所属合并器中的合并模块23。除此之外,任务管理模块22还可以对合并模块23的合并处理过程进行控制。
合并模块23是其所属合并器中的功能模块,可在任务管理模块22的控制下,根据任务参数对存储于存储模块21中的多条数据记录进行合并处理,并将合并结果写入其所属合并器中的存储模块21以供数据库系统读取。
值得说明的是,本申请实施例并不限定合并装置20所包含的合并器的数量,可以是两个,也可以是两个以上。在本申请一可选实施例中,将所有数据合并任务分为两类:单路合并(Minor Compaction)和多路合并(Major Compaction)。Minor Compaction是指将内存中memtable中的数据记录与磁盘上level_0层一个或多个相邻的数据文件合并成一个更大的数据文件的过程。Major Compaction是指将磁盘上相邻两层的数据文件进行合并的过程。基于此,合并装置20可以包含两个合并器,分别用于执行多路合并逻辑和单路合并逻辑,并将这两个合并器适应性称为多路合并器(Major Compaction)和单路合并器(MinorCompaction)。其中,多路合并器是一种用于对数据库系统中存储于磁盘上的数据记录进行合并处理的合并器;单路合并器是一种用于对数据库系统中存储于内存中的数据记录进行合并处理的合并器。
如图2a所示,是包含多路合并器和单路合并器的合并装置20的实现结构。由图2a可见,无论是多路合并器还是单路合并器,均包括存储模块21、任务管理模块22和合并模块23。由于多路合并器和单路合并器的合并逻辑有所不同,所以存储模块21、任务管理模块22和合并模块23的执行逻辑和实现结构也会有所不同。
在多路合并器中,存储模块21具体用于存储来自数据库系统中磁盘上的多个待合并数据文件,合并模块23具体用于根据任务参数对多个待合并数据文件中的数据记录进行合并处理以得到新的数据文件,并负责将新的数据文件写入存储模块21中,以供数据库系统用来替换磁盘上的多个待合并数据文件。
在单路合并器中,存储模块21具体用于存储来自数据库系统的内存中的内存表(例如memtable),合并模块23具体用于根据任务参数对内存表中的数据记录进行合并处理得到新的数据文件,并负责将新的数据文件写入存储模块21中,以供数据库系统将新的数据文件写入磁盘上。
多路合并器:
本申请实施例给出的多路合并器中的合并模块23的一种可选实现结构,如图2b所示,包括:恢复子模块231和合并子模块232。
恢复子模块231,用于从多路合并器中的存储模块21中读取多个待合并数据文件,从多个待合并数据文件中恢复出多条数据记录,并将多条数据记录缓存至多路合并器中的存储模块21。
合并子模块232,用于从多路合并器中的存储模块21中读取多条数据记录,对多条数据记录进行合并处理以生成新的数据文件,并将新的数据文件写入多路合并器中的存储模块21,以供数据库系统用来替换磁盘上的多个待合并数据文件。
可选地,为了提高读取速度,如图2b所示,多路合并器中的存储模块21可以包括三个DDR内存,分别记为第一DDR内存、第二DDR内存和第三DDR内存。其中,第一DDR内存用于存储处理器写入的多个待合并数据文件和任务描述符。第二DDR内存作为恢复子模块231与合并子模块232之间的中间缓存,用于缓存恢复子模块231从多个待合并数据文件中恢复出的多条数据记录。第三DDR内存用于存储合并子模块232写入的新的数据文件。
可选地,第二DDR内存可由多路合并器内部管理,按大页面分配,每个页面为固定大小(size),每个页面用于存储恢复子模块231从一个待合并数据文件中恢复出的数据记录。可选地,每个页面的大小可以根据待合并数据文件最多可恢复出的数据记录的大小而定,例如若待合并数据文件可恢复出的数据记录最多为512MB,则每个页面可以为512MB。可选地,第二DDR内存包含的页面数量可视多路合并器同时能够处理的待合并数据文件的最大数量而定。例如,第二DDR内存包含的页面数量可以是多路合并器同时能够处理的待合并数据文件的数量的2倍或以上倍数。假设多路合并器最多可以同时对4个数据文件进行合并处理,则第二DDR内存需要存储8个数据文件,因此可以包括8个页面,但不限于8个。其中,这样做的好处是页面管理简单,同时可以保障多路合并器的合并任务不中断,最大程度地发挥可编程装置内部模块间的流水性能。
在本实施例中,恢复子模块231与合并子模块232可流水式执行,两者之间的数据用第二DDR内存作缓存,可同时处理同一个数据合并任务的不同部分,或者也可以同时处理不同的数据合并任务的数据。
值得说明的是,待合并数据文件的封装结构,一定程度上会影响恢复子模块231与合并子模块232的实现结构。下面以SST文件为例,一个SST文件包括数据块(data block)、元数据块(meta block)、元数据索引块(meta index block)、索引块(index block)和脚注(footer)。一个数据块包括至少一条数据记录,每条数据记录包括关键字(key)和键值(value),也可以简称为kv记录。
下面以包含数据块的数据文件为例,对恢复子模块231与合并子模块232的实现结构进行示例性说明。
如图2c所示,恢复子模块231的一种可选实现结构包括:解封装(unwrap)单元、解压缩(dprs)单元和解码(dec)单元。
其中,解封装单元主要用于从第一DDR内存中读取多个待合并数据文件,从多个待合并数据文件中解封装出数据块(data block),并将数据块发送给解压缩单元。除此之外,解封装单元还可以对数据块的格式是否正确进行校验。
可选地,解封装单元具有自己的输入缓存(buffer),可以从第一DDR内存中依次将多个待合并数据文件读取到自己的输入缓存中。考虑到输入缓存的大小有一定限制,解封装单元可以根据输入缓存中是否有可用空间,分批次从第一DDR内存中读取待合并数据文件。同理,解压缩单元也具有自己的输入缓存,且该输入缓存的大小也有一定限制,为此,解封装单元可以分批次将解封装出的数据块发送给解压缩单元的输入缓存。
其中,解压缩单元主要用于对解封装单元发送来的数据块进行解压缩得到解压缩后的数据块,并将解压缩后的数据块发送给解码单元。可选地,解压缩单元以及解码单元都具有自己的输入缓存,基于此,解压缩单元从自己的输入缓存中依次读取数据块,对读取到的数据块进行解压缩后将解压缩后的数据块发送给解压单元的输入缓存。除此之外,解压缩单元还可以在对数据块进行解压缩之前,根据数据块中携带的crc校验值,对数据块进行crc校验,保障数据块的可靠性。
在本实施例中,解压缩单元可以支持多种压缩格式,例如可以支持但不限于:snappy压缩格式、zstd压缩格式、无压缩格式等。解压缩单元具体使用的解压缩方式可以通过任务描述符进行灵活配置。
其中,解码单元主要用于对解压缩单元解压缩后的数据块进行key的解去重和格式解析,从而得到多条数据记录,并将多条数据记录存储至第二DDR内存空间。
相应地,如图2c所示,合并子模块232的一种可选实现结构包括:排序(sort)单元、第一切分(cut)单元、第一去重(enc)单元、第一压缩(cprs)单元、第一过滤(filter)单元和第一封装(wrap)单元。
本实施例提供的排序单元可支持2n路数据输入,在每一路数据内部数据之间是有序的。相应地,在解码单元将解码出的多条数据记录存储至第二DDR内存空间的过程中,可以将每条数据记录在第二DDR内存中的存储地址反馈给任务管理模块22。具体哪些数据记录算为一路输入,可由任务管理模块22决定。例如,若对level_0层的3个数据文件与level_1层的数据文件进行合并处理,则可以将从level_0层的每个数据文件中解码出的数据记录分别作为一路输入,将从level_1层的所有数据文件中解码出的数据记录作为一路输入,从而形成4路输入。
任务管理模块22还用于向排序单元提供每路数据记录在第二DDR内存中的存储地址,以便于排序单元从第二DDR内存中读取每一路数据记录。对排序单元来说,可根据多路合并器中任务管理模块22提供的每路数据记录在第二DDR内存中的存储地址,从第二DDR内存中读取2n路数据记录,对2n路数据记录进行n级流水归并排序,将排序后的数据记录发送给第一切分单元。其中,n是自然数。
可选地,若数据合并任务中需要删除一些数据记录,则在任务描述符中还会携带数据记录删除参数,数据记录删除参数主要标识需要删除哪些数据记录。基于此,排序单元还可以根据任务参数中的数据记录删除参数,删除所述2n路数据记录中的相关数据记录。本实施例并不对数据记录删除参数做限定,例如数据记录删除参数可以包括时间段,这意味着需要将在该时间段内产生的数据记录删除。又例如,数据记录删除参数可以包括key的范围,这意味着需要将key在该范围内的数据记录删除。数据记录删除参数可以包含一种,也可以包含多种,具体根据删除需求而定。
其中,排序单元对数据记录进行删除、归并排序等处理,可以让数据记录有序化,但是数据记录最终需要以数据文件的形式输出,而本实施例每个数据文件包括数据块为例,故在本实施例的任务描述符中还会携带数据块大小、文件大小以及后续待合并数据文件的大小等任务参数,以便于后续第一切分单元对经过合并处理后的数据记录进行切分为封装成数据文件提供条件。其中,数据块大小表示数据文件中包含的数据块的大小;文件大小表示数据文件的大小。除了文件大小之外,后续待合并数据文件的大小也会影响数据文件的大小。如果切分出的数据文件太大,后续需要与该文件进行合并的数据文件的数量会较多,这会降低数据合并效率,故可以通过后续待合并数据文件的大小对第一切分单元的切分过程做个约束,确保第一切分单元切分出的数据文件不至于过大。
其中,任务管理模块会将任务描述符中携带的数据块大小、文件大小以及后续待合并数据文件的大小等任务参数下发给第一切分单元。第一切分单元根据任务参数中的数据块大小、文件大小以及后续待合并数据文件的大小,对排序后的数据记录进行切分以得到数据块切分标记和文件切分标记,并将排序后的数据记录、数据块切分标记以及文件切分标记发送给第一去重单元,以及将排序后的数据记录中的关键字、数据块切分标记以及文件切分标记发送给第一过滤单元。可选地,数据块切分标记可以携带在切分出的每个数据块的最后一条数据记录中,用于标识一个数据块的结束,下一数据块的开始,但不限于此。同理,文件切分标记可以携带在切分出的一个数据文件包含的最后一个数据块的最后一条数据记录中,用于标识一个数据文件的结束,下一个数据文件的开始,但不限于此。
在对排序后的数据记录进行切分后,还可以对切分出的每个数据块内的数据记录进行去重处理。为了提高去重效率,在本实施例的任务描述符中还会携带去重间隔参数。去重间隔参数可以是一个数值,例如3、5、10等,该参数表示在同一数据块内每隔3、5、10等条数据记录,就以新的数据记录中的key作为去重基准对后续数据记录进行去重处理。假设去重间隔参数为3,则针对被且分到同一数据块内的数据记录,以第1条数据记录中的key为基准,对后续3条数据记录进行key去重;然后,以第4条数据记录中的key作为新的基准,对后续3条数据记录进行key去重;接着以第7条数据记录作为新的基准,对后续3条数据记录进行key去重,依次类推,直到对该数据块内的所有数据记录全部进行去重为止。
其中,任务管理模块会将任务描述符中携带的去重间隔参数下发给第一去重单元。第一去重单元可根据任务参数中的去重间隔参数,对接收到的被切分到同一数据块内的数据记录进行key的去重,并将去重后的数据记录、数据块切分标记以及文件切分标记发送给第一压缩单元。
在本实施例中,数据记录最终以数据文件的形式输出,不仅需要对数据记录进行切分,还可以按照以数据块为单位对数据记录进行压缩。值得说明的是,压缩是一个可选过程,是否执行压缩过程可由任务描述符中是否携带压缩标识决定。若任务描述符中携带有压缩标识,则任务管理模块22还会将压缩标识下发给第一压缩单元。可选地,压缩标识不仅可以表示执行压缩过程,还可以指示压缩使用的算法。例如,压缩标识的取值为10,表示snappy压缩算法,取值为11表示zstd压缩算法,等等。第一压缩单元可在任务参数包含压缩标识的情况下,根据压缩标识对应的压缩算法对被切分到同一数据块内的且经过去重后的数据记录进行压缩形成压缩后的数据块,并将压缩后的数据块以及文件切分标记发送给第一封装单元。
在本实施例中,第一过滤单元主要用于根据任务参数中的元数据计算维度以及数据块切分标记和文件切分标记,以排序后的数据记录中的关键字为数据基础进行元数据的计算,将计算出的元数据发送给第一封装单元。
可选地,第一过滤单元具体用于:在元数据计算维度是数据块维度的情况下,根据数据块切分标记,对被切分到同一数据块内的数据记录中的关键字进行布隆过滤器BloomFilter计算,得到被切分出的每个数据块的元数据;或者,在元数据计算维度是文件维度的情况下,根据文件切分标记,对被切分到同一数据文件内的数据记录中的关键字进行BloomFilter计算,得到被切分出的每个数据文件的元数据。在本实施例中,不仅支持以数据块为单位计算元数据,还支持以数据文件为单位计算元数据,而且可以通过任务描述符配置元数据计算维度,更加灵活、方便。
在本实施例中,第一封装单元用于按照文件切分标记,对接收到的元数据、压缩后的数据块进行文件封装以生成新的数据文件,并将新的数据文件输出至第三DDR内存。可选地,第一封装单元除了生成新的数据文件之外,还会生成新的数据文件的属性信息,例如该文件包含的最大key、最小key、生成时间等等。
在本申请实施例中,并不限定排序单元的实现结构,凡是可以对2n路数据记录进行n级流水归并排序的实现结构均适用于本申请实施例。本申请实施例给出了排序单元的一种实现结构,如图2d所示,该排序单元包括:n级子排序单元;其中,对于第k级子排序单元包括:k个比较器和2k个缓存器;其中,每两个缓存器的输出与一个比较器的输入连接,每个比较器的输出连接下一级子排序单元中的缓存器;每个缓存器包括两个缓存队列,一个缓存队列用于缓存进入其所属缓存器中的数据记录中的关键字,另一个缓存队列用于缓存进入其所属缓存器中的数据记录;k是自然数,且k的取值为1到n。在图2d中,以n=2为例,但n的取值并不限于2。其中,将数据记录与数据记录中的关键字(key)分为两个缓存,有利于key的比较和数据记录的输出流水进行,以便发挥合并器的最大性能。
单路合并器:
如图2c所示,在单路合并器中,存储模块21包括第四DDR内存,第四DDR内存用于存储来自数据库系统的内存中的内存表;合并模块23的一种可选实现结构包括:解析(ana)单元、第二切分(cut)单元、第二去重(enc)单元、第二压缩(cprs)单元、第二滤波(filter)单元和第二封装(wrap)单元。
解析单元,用于从第四DDR内存中读取内存表,对内存表中的数据记录进行数据结构转换以得到数据结构符合数据文件要求的数据记录,将数据结构符合数据文件要求的数据记录发送给第二切分单元。
第二切分单元,用于根据任务参数中指定的数据块大小、文件大小以及后续待合并数据文件的大小,对数据结构符合数据文件要求的数据记录进行切分,并将数据结构符合数据文件要求的数据记录、数据块切分标记以及文件切分标记发送给第二去重单元,以及将数据结构符合数据文件要求的数据记录中的关键字、数据块切分标记以及文件切分标记发送给第二过滤单元;
第二去重单元,用于根据任务参数中的去重间隔参数,对接收到的被切分到同一数据块内的数据记录进行关键字的去重,并将去重后的数据记录、数据块切分标记以及文件切分标记发送给第二压缩单元;
第二压缩单元,用于在任务参数包含压缩标识的情况下,根据压缩标识对应的压缩算法对被切分到同一数据块内的且经过去重后的数据记录进行压缩形成压缩后的数据块,并将压缩后的数据块以及文件切分标记发送给第二封装单元;
第二过滤单元,用于根据任务参数中的元数据计算维度以及数据块切分标记和文件切分标记,以排序后的数据记录中的关键字为数据基础进行元数据的计算,将计算出的元数据发送给第二封装单元;
第二封装单元,用于按照文件切分标记,对接收到的元数据、压缩后的数据块进行文件封装以生成新的数据文件,并将新的数据文件输出至第四DDR内存。
关于第二切分单元、第二去重单元、第二压缩单元、第二滤波单元和第二封装单元的功能,与前述第一切分单元、第一去重单元、第一压缩单元、第一滤波单元和第一封装单元的类似,在此不再详述。
进一步,如图2c所示,基于可编程装置的合并装置20还包括与每个合并器中的任务管理模块对应的寄存器。寄存器,用于存储数据库系统提供的描述符存储信息;每个合并器中的任务管理模块22可以从对应的寄存器中读取描述符存储信息,根据描述符存储信息去相应存储模块21中读取任务描述符,对任务描述符进行解析获取任务参数,将任务参数下发给所属合并器中的相应模块或单元。其中,描述符存储信息包括任务描述符的存储地址、长度等信息。
值得说明的是,在上述各实施例中,合并模块23包含的各个单元都可以有自己的输入缓存,这些输入缓存可以采用双端口RAM实现,一端顺序写,另外一端顺序读,提高数据读写效率。在上述各实施例中,上述合并器由合并模块(是一种功能模块)、任务管理模块(相当于控制模块)和存储模块三部分组成。其中,合并模块可由可编程装置芯片上的DSP和LUT资源实现,存储模块可由可编程装置芯片上的BRAM资源等实现。各功能模块的执行状态由相应的控制模块管理,可按照流水方式执行,有利于提高可编程装置芯片的计算资源利用效率。
基于图1a所示数据库系统100,本申请一示例性实施例还提供一种数据合并方法。该方法主要是从基于可编程装置的合并装置20中任一合并器的角度进行的描述,如图3所示,该数据合并方法包括:
301、接收数据库系统写入的需要由合并器进行合并处理的多条数据记录以及任务描述符。
302、根据数据库系统提供的描述符存储信息读取任务描述符,并从任务描述符中解析出任务参数。
303、根据任务参数对多条数据记录进行合并处理以得到合并结果,存储合并结果以供数据库系统读取。
在一可选实施例中,上述执行数据合并任务的合并器是合并装置中用于对数据库系统中存储于磁盘上的数据记录进行合并处理的多路合并器。相应地,需要进行合并操作的多条数据记录包括来自磁盘上的多个待合并数据文件中的数据记录。基于此,在步骤301中,具体为:接收数据库系统写入的来自磁盘上的多个待合并数据文件以及任务描述符;在步骤303中,具体为:根据任务参数对多个待合并数据文件中的数据记录进行合并处理以得到新的数据文件。
在另一可选实施例中,上述执行数据合并任务的合并器是合并装置中用于对数据库系统中存储于内存中的数据记录进行合并处理的单路合并器。相应地,需要进行合并处理的多条数据记录包括来来自内存中的内存表中的数据记录。基于此,在步骤301中,具体为:接收数据库系统写入的来自内存中的内存表和任务描述符;在步骤303中,具体为:对内存表中的数据记录进行合并处理得到新的数据文件。
上述两种可选实施例的详细实施过程与合并器的具体实现结构有关。以图2a-图2d所示合并器的结构为例,则上述两种可选实施例的详细实施过程可参见前述实施例中的描述,在此不再赘述。
需要说明的是,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如301、302等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (19)
1.一种基于可编程装置的合并装置,其特征在于,包括:至少两个合并器,所述至少两个合并器相互独立且执行不同的合并逻辑;其中,每个合并器包括存储模块、任务管理模块以及合并模块;
所述存储模块,用于存储数据库系统中需要由所述存储模块所属合并器进行合并处理的多条数据记录与任务描述符;
所述任务管理模块,用于根据数据库系统提供的描述符存储信息,从其所属合并器中的存储模块中读取所述任务描述符并从中解析出任务参数,将所述任务参数下发给其所属合并器中的合并模块;
所述合并模块,用于根据所述任务参数对所述多条数据记录进行合并处理,并将合并结果写入其所属合并器中的存储模块以供所述数据库系统读取。
2.根据权利要求1所述的合并装置,其特征在于,所述至少两个合并器包括:用于对所述数据库系统中存储于磁盘上的数据记录进行合并处理的多路合并器,以及用于对所述数据库系统中存储于内存中的数据记录进行合并处理的单路合并器。
3.根据权利要求2所述的合并装置,其特征在于,所述多路合并器中的存储模块具体用于:存储来自所述磁盘上的多个待合并数据文件;
所述多路合并器中的合并模块具体用于:根据所述任务参数对所述多个待合并数据文件中的数据记录进行合并处理以得到新的数据文件,并将所述新的数据文件写入所述多路合并器中的存储模块,以供所述数据库系统用来替换所述磁盘上的多个待合并数据文件。
4.根据权利要求3所述的合并装置,其特征在于,所述多路合并器中的合并模块包括:恢复子模块和合并子模块;
所述恢复子模块,用于从所述多路合并器中的存储模块中读取所述多个待合并数据文件,从所述多个待合并数据文件中恢复出多条数据记录,并将所述多条数据记录缓存至所述多路合并器中的存储模块;
所述合并子模块,用于从所述多路合并器中的存储模块中读取所述多条数据记录,对所述多条数据记录进行合并处理以生成所述新的数据文件,并将所述新的数据文件写入所述多路合并器中的存储模块,以供所述数据库系统用来替换所述磁盘上的多个待合并数据文件。
5.根据权利要求4所述的合并装置,其特征在于,所述多路合并器中的存储模块包括:第一DDR内存、第二DDR内存和第三DDR内存;
所述第一DDR内存用于存储所述多个待合并数据文件和任务描述符;所述第二DDR内存作为中间缓存,用于缓存所述恢复子模块从所述多个待合并数据文件中恢复出的多条数据记录;所述第三DDR内存用于存储所述合并子模块写入的所述新的数据文件。
6.根据权利要求5所述的合并装置,其特征在于,所述恢复子模块包括:解封装单元、解压缩单元和解码单元;
所述解封装单元,用于从所述第一DDR内存中读取所述多个待合并数据文件,从所述多个待合并数据文件中解封装出数据块,并将所述数据块发送给所述解压缩单元;
所述解压缩单元,用于对所述数据块进行解压缩得到解压缩后的数据块,并将解压缩后的数据块发送给所述解码单元;
所述解码单元,用于对所述解压缩后的数据块进行关键字的解去重和格式解析,得到所述多条数据记录,并将所述多条数据记录存储至所述第二DDR内存空间。
7.根据权利要求5所述的合并装置,其特征在于,所述合并子模块包括:排序单元、第一切分单元、第一去重单元、第一压缩单元、第一过滤单元和第一封装单元;
所述排序单元,用于根据所述多路合并器中任务管理模块提供的每路数据记录在所述第二DDR内存中的存储地址,从所述第二DDR内存中读取2n路数据记录,对所述2n路数据记录进行n级流水归并排序,将排序后的数据记录发送给所述第一切分单元;其中,n是自然数;
所述第一切分单元,用于根据所述任务参数中的数据块大小、文件大小以及后续待合并数据文件的大小,对所述排序后的数据记录进行切分以得到数据块切分标记和文件切分标记,并将所述排序后的数据记录、数据块切分标记以及文件切分标记发送给所述第一去重单元,以及将排序后的数据记录中的关键字、数据块切分标记以及文件切分标记发送给所述第一过滤单元;
所述第一去重单元,用于根据所述任务参数中的去重间隔参数,对接收到的被切分到同一数据块内的数据记录进行关键字的去重,并将去重后的数据记录、数据块切分标记以及文件切分标记发送给所述第一压缩单元;
所述第一压缩单元,用于在所述任务参数包含压缩标识的情况下,根据所述压缩标识对应的压缩算法对被切分到同一数据块内的且经过去重后的数据记录进行压缩形成压缩后的数据块,并将压缩后的数据块以及文件切分标记发送给所述第一封装单元;
所述第一过滤单元,用于根据所述任务参数中的元数据计算维度以及数据块切分标记和文件切分标记,以排序后的数据记录中的关键字为数据基础进行元数据的计算,将计算出的元数据发送给所述第一封装单元;
所述第一封装单元,用于按照文件切分标记,对接收到的元数据、所述压缩后的数据块进行文件封装以生成新的数据文件,并将所述新的数据文件输出至所述第三DDR内存。
8.根据权利要求7所述的合并装置,其特征在于,所述排序单元还用于:
根据所述任务参数中的数据记录删除参数,删除所述2n路数据记录中的相关数据记录。
9.根据权利要求7所述的合并装置,其特征在于,所述第一过滤单元具体用于:
在所述元数据计算维度是数据块维度的情况下,根据数据块切分标记,对被切分到同一数据块内的数据记录中的关键字进行布隆过滤器BloomFilter计算,得到被切分出的每个数据块的元数据;或者
在所述元数据计算维度是文件维度的情况下,根据文件切分标记,对被切分到同一数据文件内的数据记录中的关键字进行BloomFilter计算,得到被切分出的每个数据文件的元数据。
10.根据权利要求7所述的合并装置,其特征在于,所述排序单元包括n级子排序单元;其中,对于第k级子排序单元包括:k个比较器和2k个缓存器;
其中,每两个缓存器的输出与一个比较器的输入连接,每个比较器的输出连接下一级子排序单元中的缓存器;每个缓存器包括两个缓存队列,一个缓存队列用于缓存进入其所属缓存器中的数据记录中的关键字,另一个缓存队列用于缓存进入其所属缓存器中的数据记录;k是自然数,且k的取值为1到n。
11.根据权利要求5所述的合并装置,其特征在于,所述第二DDR内存按大页面分配,每个页面为固定大小,每个页面用于存储从一个待合并数据文件中恢复出的数据记录。
12.根据权利要求2-11任一项所述的合并装置,其特征在于,所述单路合并器中的存储模块包括:第四DDR内存,所述第四DDR内存用于存储来自所述内存中的内存表和任务描述符;
所述单路合并器中的合并模块具体用于:根据所述任务参数对所述内存表中的数据记录进行合并处理得到新的数据文件,将所述新的数据文件写入所述第四DDR内存,以供所述数据库系统将新的数据文件写入所述磁盘上。
13.根据权利要求12所述的合并装置,其特征在于,所述单路合并器中的合并模块包括:解析单元、第二切分单元、第二去重单元、第二压缩单元、第二滤波单元和第二封装单元;
所述解析单元,用于从所述第四DDR内存中读取内存表,对所述内存表中的数据记录进行数据结构转换以得到数据结构符合数据文件要求的数据记录,将数据结构符合数据文件要求的数据记录发送给所述第二切分单元;
第二切分单元,用于根据所述任务参数中指定的数据块大小、文件大小以及后续待合并数据文件的大小,对所述数据结构符合数据文件要求的数据记录进行切分,并将所述数据结构符合数据文件要求的数据记录、数据块切分标记以及文件切分标记发送给所述第二去重单元,以及将数据结构符合数据文件要求的数据记录中的关键字、数据块切分标记以及文件切分标记发送给第二过滤单元;
第二去重单元,用于根据所述任务参数中的去重间隔参数,对接收到的被切分到同一数据块内的数据记录进行关键字的去重,并将去重后的数据记录、数据块切分标记以及文件切分标记发送给所述第二压缩单元;
第二压缩单元,用于在所述任务参数包含压缩标识的情况下,根据所述压缩标识对应的压缩算法对被切分到同一数据块内的且经过去重后的数据记录进行压缩形成压缩后的数据块,并将压缩后的数据块以及文件切分标记发送给所述第二封装单元;
第二过滤单元,用于根据所述任务参数中的元数据计算维度以及数据块切分标记和文件切分标记,以排序后的数据记录中的关键字为数据基础进行元数据的计算,将计算出的元数据发送给所述第二封装单元;
第二封装单元,用于按照文件切分标记,对接收到的元数据、所述压缩后的数据块进行文件封装以生成新的数据文件,并将所述新的数据文件输出至所述第四DDR内存。
14.根据权利要求1-13任一项所述的合并装置,其特征在于,所述任务描述符的内容长度可变。
15.根据权利要求1-13任一项所述的合并装置,其特征在于,还包括:与每个合并器中的任务管理模块对应的寄存器;
所述寄存器,用于存储所述数据库系统提供的描述符存储信息;
每个合并器中的任务管理模块还用于:从对应的寄存器中读取所述描述符存储信息。
16.一种数据合并方法,适于基于可编程装置的合并装置中的任一合并器,其特征在于,所述方法包括:
接收数据库系统写入的需要由所述合并器进行合并处理的多条数据记录以及任务描述符;
根据数据库系统提供的描述符存储信息读取所述任务描述符,并从所述任务描述符中解析出任务参数;
根据所述任务参数对所述多条数据记录进行合并处理以得到合并结果,存储所述合并结果以供所述数据库系统读取。
17.根据权利要求16所述的方法,其特征在于,所述合并器为所述合并装置中用于对所述数据库系统中存储于磁盘上的数据记录进行合并处理的多路合并器;所述多条数据记录包括来自所述磁盘上的多个待合并数据文件中的数据记录;
其中,所述根据所述任务参数对所述多条数据记录进行合并处理以得到合并结果,包括:
根据所述任务参数对所述多个待合并数据文件中的数据记录进行合并处理以得到新的数据文件。
18.根据权利要求16所述的方法,其特征在于,所述合并器为所述合并装置中用于对所述数据库系统中存储于内存中的数据记录进行合并处理的单路合并器;所述多条数据记录包括来来自所述内存中的内存表中的数据记录;
其中,所述根据所述任务参数对所述多条数据记录进行合并处理以得到合并结果,包括:
对所述内存表中的数据记录进行合并处理得到新的数据文件。
19.一种数据库系统,其特征在于,包括:存储器、处理器以及基于可编程装置的合并装置;所述基于可编程装置的合并装置包括至少两个合并器,所述至少两个合并器相互独立且执行不同合并逻辑;
所述存储器,用于存储计算机程序以及所述数据库系统中的数据记录;
所述处理器与所述存储器和所述合并装置耦合,用于执行所述计算机程序,以用于:根据应用的合并需求,确定需要进行合并处理的多条数据记录,并从所述至少两个合并器中选择对所述多条数据记录进行合并处理所需的目标合并器;将所述多条数据记录以及任务描述符写入所述目标合并器,并向所述目标合并器发送描述符存储信息,以供所述目标合并器根据所述任务描述符对所述多条数据记录进行合并处理,以及从所述目标合并器获取所述多条数据记录的合并结果;
所述至少两个合并器,用于在作为所述目标合并器时,存储所述处理器写入的所述多条数据记录以及任务描述符;根据所述处理器发送的描述符存储信息读取所述任务描述符并从中解析出任务参数;根据所述任务参数对所述多条数据记录进行合并处理以得到所述合并结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910148859.XA CN111625531B (zh) | 2019-02-28 | 2019-02-28 | 基于可编程装置的合并装置、数据合并方法及数据库系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910148859.XA CN111625531B (zh) | 2019-02-28 | 2019-02-28 | 基于可编程装置的合并装置、数据合并方法及数据库系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111625531A true CN111625531A (zh) | 2020-09-04 |
CN111625531B CN111625531B (zh) | 2023-06-20 |
Family
ID=72271625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910148859.XA Active CN111625531B (zh) | 2019-02-28 | 2019-02-28 | 基于可编程装置的合并装置、数据合并方法及数据库系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111625531B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112487095A (zh) * | 2020-12-09 | 2021-03-12 | 浪潮云信息技术股份公司 | 一种分布式数据库事务数据存储优化的方法 |
CN113067581A (zh) * | 2021-03-11 | 2021-07-02 | 深圳华云信息系统有限公司 | 解码系统、解码方法、电子设备及存储介质 |
CN113342274A (zh) * | 2021-06-10 | 2021-09-03 | 北京字节跳动网络技术有限公司 | 一种数据处理方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120054158A1 (en) * | 2010-08-30 | 2012-03-01 | Oracle International Corporation | Reduced Disk Space Standby |
CN104360824A (zh) * | 2014-11-10 | 2015-02-18 | 北京奇虎科技有限公司 | 一种数据合并的方法和装置 |
CN104407811A (zh) * | 2014-11-12 | 2015-03-11 | 珠海世纪鼎利通信科技股份有限公司 | 一种基于云计算的合并io装置 |
CN104615594A (zh) * | 2013-11-01 | 2015-05-13 | 阿里巴巴集团控股有限公司 | 一种数据更新方法及装置 |
EP3422215A1 (en) * | 2017-06-29 | 2019-01-02 | INTEL Corporation | Key-value compaction |
CN109271343A (zh) * | 2018-07-24 | 2019-01-25 | 华为技术有限公司 | 一种应用于键值存储系统中的数据合并方法和装置 |
-
2019
- 2019-02-28 CN CN201910148859.XA patent/CN111625531B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120054158A1 (en) * | 2010-08-30 | 2012-03-01 | Oracle International Corporation | Reduced Disk Space Standby |
CN104615594A (zh) * | 2013-11-01 | 2015-05-13 | 阿里巴巴集团控股有限公司 | 一种数据更新方法及装置 |
CN104360824A (zh) * | 2014-11-10 | 2015-02-18 | 北京奇虎科技有限公司 | 一种数据合并的方法和装置 |
CN104407811A (zh) * | 2014-11-12 | 2015-03-11 | 珠海世纪鼎利通信科技股份有限公司 | 一种基于云计算的合并io装置 |
EP3422215A1 (en) * | 2017-06-29 | 2019-01-02 | INTEL Corporation | Key-value compaction |
CN109271343A (zh) * | 2018-07-24 | 2019-01-25 | 华为技术有限公司 | 一种应用于键值存储系统中的数据合并方法和装置 |
Non-Patent Citations (1)
Title |
---|
张铁赢;黄贵;章颖强;王剑英;胡炜;赵殿奎;何登成;: "X-DB:软硬一体的新型数据库系统" * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112487095A (zh) * | 2020-12-09 | 2021-03-12 | 浪潮云信息技术股份公司 | 一种分布式数据库事务数据存储优化的方法 |
CN113067581A (zh) * | 2021-03-11 | 2021-07-02 | 深圳华云信息系统有限公司 | 解码系统、解码方法、电子设备及存储介质 |
CN113067581B (zh) * | 2021-03-11 | 2023-02-10 | 深圳华云信息系统有限公司 | 解码系统、解码方法、电子设备及存储介质 |
CN113342274A (zh) * | 2021-06-10 | 2021-09-03 | 北京字节跳动网络技术有限公司 | 一种数据处理方法及装置 |
CN113342274B (zh) * | 2021-06-10 | 2024-01-30 | 北京火山引擎科技有限公司 | 一种数据处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111625531B (zh) | 2023-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9880746B1 (en) | Method to increase random I/O performance with low memory overheads | |
KR102007070B1 (ko) | 메모리 관리 시의 중복 제거를 위해서 기준 세트로 기준 블록을 취합하는 기법 | |
CN103098035B (zh) | 存储系统 | |
US10303797B1 (en) | Clustering files in deduplication systems | |
JP6033241B2 (ja) | データー重複排除のためのバックアップおよび復元方策 | |
CN107038206B (zh) | Lsm树的建立方法、lsm树的数据读取方法和服务器 | |
US9514179B2 (en) | Table boundary detection in data blocks for compression | |
US9507821B2 (en) | Mail indexing and searching using hierarchical caches | |
JP5719037B2 (ja) | ストレージ装置及び重複データ検出方法 | |
CN111625531B (zh) | 基于可编程装置的合并装置、数据合并方法及数据库系统 | |
CN109445702B (zh) | 一种块级数据去重存储系统 | |
CN111125033B (zh) | 一种基于全闪存阵列的空间回收方法及系统 | |
KR20150125012A (ko) | 저장된 데이터 유닛들의 동작 관리 | |
JP2020518207A (ja) | 基本データシーブの使用によるデータの無損失削減、ならびに基本データシーブを使用して無損失削減されたデータに対する多次元検索およびコンテンツ連想的な取出しの実行 | |
US20170123689A1 (en) | Pipelined Reference Set Construction and Use in Memory Management | |
JP6846426B2 (ja) | 音声データおよびブロック処理ストレージシステム上に記憶されたデータの削減 | |
CN111124940B (zh) | 一种基于全闪存阵列的空间回收方法及系统 | |
US20170351608A1 (en) | Host device | |
KR20150126667A (ko) | 저장된 데이터 유닛들의 동작 관리 | |
US11960450B2 (en) | Enhancing efficiency of segment cleaning for a log-structured file system | |
CN111124259A (zh) | 一种基于全闪存阵列的数据压缩方法及系统 | |
CN112765112A (zh) | 一种安装包打包和解包方法 | |
CN113778345B (zh) | 索引的创建方法、计算设备及存储介质 | |
CN111198857A (zh) | 一种基于全闪存阵列的数据压缩方法及系统 | |
CN110309138B (zh) | 数据合并方法、基于fpga的合并器及数据库系统 |
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 |