CN110309138B - 数据合并方法、基于fpga的合并器及数据库系统 - Google Patents
数据合并方法、基于fpga的合并器及数据库系统 Download PDFInfo
- Publication number
- CN110309138B CN110309138B CN201810172456.4A CN201810172456A CN110309138B CN 110309138 B CN110309138 B CN 110309138B CN 201810172456 A CN201810172456 A CN 201810172456A CN 110309138 B CN110309138 B CN 110309138B
- Authority
- CN
- China
- Prior art keywords
- unit
- data
- layer
- data record
- merging
- 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
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/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供一种数据合并方法、基于FPGA的合并器以及数据库系统。在本申请实施例中,基于FPGA实现一种合并器,并将基于FPGA的合并器应用于数据库系统中,负责对数据库系统中的数据记录进行合并处理,降低数据合并操作对数据库系统中CPU资源的占用率,降低对数据库系统的写入和查询性能的影响,提高数据库系统的整体能力,改善性能抖动问题。
Description
技术领域
本申请涉及数据库技术领域,尤其涉及一种数据合并方法、基于FPGA的合并器及数据库系统。
背景技术
随着互联网和大数据应用的兴起,非关系型数据库(Not Only SQL,NoSQL)得到迅速发展。在非关系型数据库中,有一些基于日志增量存储的键值对(Key-Value,KV)型的数据库,例如LevelDB和基于LevelDB演变的RocksDB。
在LevelDB或RocksDB中,采用分层存储方式将大部分KV记录存储到磁盘中,这可以减少内存资源消耗,实现持久化存储。但是,读取KV记录需要在内存和磁盘上各层级数据文件中依照KV记录的新鲜程度依次查找,比较复杂,查找速度较慢。
为了加快读取KV记录的速度,现有技术采取合并(compaction)方式对已有KV记录进行整理压缩,去除一些无效KV记录,通过减少文件数量来降低查询复杂度,提高查询效率。但是,现有数据合并过程会降低数据库系统的写入和查询性能。
发明内容
本申请的多个方面提供一种数据合并方法、基于FPAG的合并器及数据库系统,用以降低数据合并过程对数据库系统的写入和查询性能的影响。
本申请实施例提供一种基于FPGA的合并器,包括:控制单元、存储单元以及合并单元;
所述控制单元,用于根据数据库系统的数据合并指令,将所述数据库系统中需要合并的第N层至第N+j层的数据记录加载至所述存储单元,以及控制所述合并单元对所述需要合并的第N层至第N+j层的数据记录进行合并处理;其中,N是非负整数,j是非负整数;
所述合并单元,用于对所述需要合并的第N层至第N+j层的数据记录进行合并处理,以获得新的第N+j层的数据记录并存储至所述存储单元中,以供所述数据库系统利用所述新的第N+j层的数据记录替换所述数据库系统中所述需要合并的第N层至第N+j层的数据记录。
本申请实施例还提供一种数据合并方法,适用于基于FPGA的合并器,该方法包括:
根据数据库系统的数据合并指令,将所述数据库系统中需要合并的第N层至第N+j层的数据记录加载至所述基于FPGA的合并器的存储单元中;其中,N是非负整数,j是非负整数;
对所述需要合并的第N层至第N+j层的数据记录进行合并处理,以获得新的第N+j层的数据记录并存储至所述存储单元中,以供所述数据库系统利用所述新的第N+j层的数据记录替换所述数据库系统中所述需要合并的第N层至第N+j层的数据记录。
本申请实施例还提供一种数据库系统,包括:存储器、处理器以及基于FPGA的合并器;
所述存储器,用于存储计算机程序以及所述数据库系统中的至少两层数据记录;
所述处理器与所述存储器和所述合并器耦合,用于执行所述计算机程序,以用于:
从所述至少两层数据记录中识别出需要合并的第N层至第N+j层数据记录;向所述基于FPGA的合并器发送数据合并指令,以指示所述基于FPGA的合并器对所述需要合并的第N层至第N+j层的数据记录进行合并处理;以及利用所述基于FPGA的合并器输出的新的第N+j层的数据记录替换所述存储器中需要合并的第N层至第N+j层的数据记录;其中,N是非负整数,j是非负整数;
所述基于FPGA的合并器,用于接收所述数据合并指令,根据所述数据合并指令,对所述需要合并的第N层至第N+j层数据记录进行合并处理,以获得所述新的第N+j层的数据记录并输出给所述处理器。
在本申请实施例中,基于FPGA实现一种合并器,并将基于FPGA的合并器应用于数据库系统中,负责对数据库系统中需要合并的第N层至第N+j层的数据记录进行合并处理,降低数据合并操作对数据库系统中CPU资源的占用率,降低对数据库系统的写入和查询性能的影响,提高数据库系统的整体能力,改善性能抖动问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1a为本申请一示例性实施例提供的一种数据库系统的结构示意图;
图1b为本申请一示例性实施例提供的磁盘上的数据文件形成的层级结构的示意图;
图1c为本申请一示例性实施例提供的内存和磁盘上的数据文件形成的层级结构的示意图;
图1d为本申请一示例性实施例提供的从基于FPGA的合并器的角度描述的数据合并方法的流程示意图;
图2a为本申请另一示例性实施例提供的一种基于FPGA的合并器的结构示意图;
图2b为本申请另一示例性实施例提供的基于图2a所示合并器的数据合并方法的流程示意图;
图3a为本申请又一示例性实施例提供的另一种基于FPGA的合并器的结构示意图;
图3b为本申请又一示例性实施例提供的基于图3a所示合并器的数据合并方法的流程示意图;
图4a为本申请又一示例性实施例提供的带有片内缓存功能的基于FPGA的合并器的结构示意图;
图4b为本申请又一示例性实施例提供的基于图4a所示合并器的数据合并方法的流程示意图;
图5a为本申请又一示例性实施例提供的带有编解码功能的基于FPGA的合并器的结构示意图;
图5b为本申请又一示例性实施例提供的一种数据记录层次结构的示意图;
图6a为本申请又一示例性实施例提供的带有压缩功能的基于FPGA的合并器的结构示意图;
图6b为本申请又一示例性实施例提供的数据库系统LevelDB或RocksDB的实现结构。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在采用分层存储方式的数据库系统中,可以采取数据合并方式去除一些无效数据记录,这有利于提高查询效率,但是会降低数据库系统的写入和查询性能。针对该技术问题,本申请实施例提供一种解决方案,主要思路是:基于FPGA实现一种合并器,将该基于FPGA实现的合并器应用于数据库系统,由该合并器对数据库系统中需要合并的相邻几层的数据记录进行合并处理,减少数据合并操作对数据库系统的CPU资源的占用率,降低对数据库系统的写入和查询性能的影响,提高数据库系统的整体能力,改善性能抖动问题。
值得说明的一点是,为简化描述,在本申请下述实施例的有些描述中会将基于FPGA的合并器简称为合并器,本领域技术人员可以理解,本申请各实施例中的“合并器”与“基于FPGA的合并器”是同一概念。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1a为本申请一示例性实施例提供的一种数据库系统的结构示意图。如图1a所示,该数据库系统100包括:存储器10、基于FPGA的合并器20以及处理器30。存储器10分别与处理器30和基于FPGA的合并器20连接。
存储器10主要用作数据库系统100的存储空间,可以包括至少一块存储介质,至少一块存储介质可以是相同类型的存储介质,也可以是不同类型的存储介质。例如,存储器10可以包括易失性的存储介质,例如RAM,也可以包括非易失性的存储介质,例如只读存储器(Read-Only Memory,ROM)、闪存等。如图1a所示,存储器10主要包括内存和磁盘,内存一般采用易失性的存储介质实现,而磁盘一般采用非易失性的存储介质实现。
存储器10可以存储与数据库系统100相关的各种数据,例如需要数据库系统100存储的数据记录、数据库系统100的操作系统(OS)、数据库系统100上运行的各种计算机程序以及程序数据等等。
在数据库系统100中,采用分层存储方式将数据记录存储到存储器10中。在存储器10中存在至少两层数据记录。可选地,存储器10中可以包括至少两个层级的数据文件,每个层级可以包括至少一个数据文件,每个数据文件中存储该文件所属层级的部分或全部数据记录。
在数据库系统100中,当写入数据记录时,先将该数据记录写入磁盘上的日志(log)文件中;当日志文件写入成功后,再将该数据记录写入内存中;当内存空间占用率达到一定界限后,再将内存中的数据记录导出到磁盘上一个新的数据文件中。其中,磁盘上的数据文件是一种层级结构,例如第一层(最靠近内存的一层)为Level_0,第二层为Level_1,依次类推,层级逐渐增高。
在采用分层存储方式的应用场景中,读取数据记录时需要在内存以及磁盘上各层级数据文件中依照数据记录的新鲜程度依次查找,比较复杂,查找速度较慢。为了加速读取数据记录的速度,可以采用合并(compaction)方式对已有数据记录进行整理压缩,去除一些无效数据记录,通过减少数据记录的数量,达到减少各层级数据文件的数量的目的,从而降低查询复杂度,提高查询效率。
在本实施例中,存储器10中还存储有与数据合并流程相关的计算机程序,处理器30执行该计算机程序后可配合基于FPGA的合并器20实现一种新的数据合并方案。
在本实施例中,处理器30执行存储器10中存储的与数据合并流程相关的计算机程序,可从至少两层数据记录中识别出需要合并的第N层至第N+j层数据记录,向基于FPGA的合并器20发送数据合并指令,以指示基于FPGA的合并器20对需要合并的第N层至第N+j层的数据记录进行合并处理;以及在基于FPGA的合并器20对需要合并的第N层至第N+j层的数据记录进行合并处理并输出新的第N+j层的数据记录之后,还可以利用基于FPGA的合并器20输出的新的第N+j层的数据记录替换存储器10中需要合并的第N层至第N+j层的数据记录。其中,N是非负整数,例如,可以是0,1,2,3等;j是非负整数,例如可以是0,1,2,3等。
在一些应用场景中,可能仅需针对存储器10所包含的磁盘上的数据记录进行合并处理,则本申请实施例中所述的至少两层数据记录主要包括存储于磁盘上的各层数据记录。如图1b所示,内存中包括数据文件a,磁盘上按照层级结构存储有数据文件level_0、数据文件level_1、数据文件level_2、……、数据文件level_n,则在仅需针对磁盘上的数据记录进行合并处理的场景中,可将数据文件level_0视为第0层,数据文件level_1视为第1层,数据文件level_2层视为第2层,以此类推,数据文件level_n视为第n层,即本申请实施例中所述的至少两层数据记录主要包括数据文件level_0、数据文件level_1、数据文件level_2、……、以及数据文件level_n中存储的数据记录;换句话说,处理器30只需从数据文件level_0、数据文件level_1、数据文件level_2、……以及数据文件level_n中识别需要合并的第N层至第N+j层的数据记录即可。其中,N+j≤n,n是非负整数。
在另一些应用场景中,考虑到内存中的数据记录需要累积到一定数量之后,才会被导出至磁盘上的数据文件中,在该数据记录累积过程中可能出现重叠的数据记录,因此可以对内存中的数据记录进行合并处理。在这种情况下,不仅需要针对存储器10所包含的磁盘上的数据记录进行合并处理,甚至需要针对存储器10所包含的内存上的数据记录进行合并处理,则本申请实施例中所述的至少两层数据记录主要包括存储于内存以及磁盘上的各层数据记录。其中,内存中存储的数据记录与磁盘上存储的各层数据记录之间形成一种层级结构。如图1c所示,内存中包括数据文件a,磁盘上按照层级结构存储有数据文件level_0、数据文件level_1、数据文件level_2、……、数据文件level_n,且数据文件a视为第0层,数据文件level_0视为第1层,数据文件level_1视为第2层,数据文件level_2层视为第3层,以此类推,数据文件level_n视为第n+1层,使得内存中存储的数据记录与磁盘上存储的各层数据记录之间形成由低到高的层级结构。则在需要针对内存和磁盘上的数据记录进行合并处理的场景中,本申请实施例中所述的至少两层数据记录主要包括数据文件a、数据文件level_0、数据文件level_1、数据文件level_2、……、以及数据文件level_n中存储的数据记录;换句话说,处理器30需要从数据文件a、数据文件level_0、数据文件level_1、数据文件level_2、……以及数据文件level_n中识别需要合并的第N层至第N+j层的数据记录。
一般来说,j的取值是1,2,3等正整数。但是,在一些应用场景中,j的取值也可以是0。例如,对于在同一层级上可能存在重叠的数据记录的情况,j的取值为0,这意味着可以对同一层的数据记录进行合并处理。例如,在需要对内存中的数据记录进行合并处理时,j=0。又例如,磁盘上处于层级level_0的数据记录直接来自于内存,有可能存在重叠,因此需要对处于层级level_0的数据记录进行合并处理,此时j=0。另外,本申请实施例并不限定N的取值与层级之间的对应关系,例如,可以通过N=0表示第0层,并依次类推,或者也可以通过N=1表示第0层,并依次类推,或者也可以通过N=10表示第0层,并依次类推等。
在本实施例中,可由不同的事件或条件,触发处理器30从所述的至少两层数据记录中识别出需要合并的第N层至第N+j层数据记录。
示例1:可以设定数据合并周期,每当数据合并周期到达时,可以触发处理器30从至少两层数据记录中识别出需要合并的第N层至第N+j层数据记录。
可选地,在示例1中,需要合并的第N层至第N+j层数据记录可以是所有各层的数据记录。或者,在示例1中,可由其它条件进一步来确定哪些层的数据记录是需要合并的。例如,当数据合并周期到达时,可以根据各层数据记录的数量是否达到预设的上限值识别出数据记录的数量达到上限值的相邻若干层的数据记录作为需要合并的第N层至第N+j层数据记录。
示例2:当某一层级的数据记录的数量达到设定的上限时,可以触发处理器30从至少两层数据记录中识别出该层级数据记录以及与该层级相邻的若干个上层层级的数据记录作为需要合并的第N层至第N+j层数据记录。
示例3:在存储器10包括内存和磁盘的场景中,数据记录不断被写入内存,则当内存空间占用率达到一定界限后,可以触发处理器30将内存中的数据记录以及磁盘上的第一层级的数据记录作为需要合并的第N层至第N+j层数据记录。
可选地,处理器30可以在数据合并指令中携带与第N层至第N+j层数据记录相关的标识信息,例如可以是层级标识和/或数据记录所在数据文件的标识等,以便于基于FPGA的合并器20可以根据该数据合并指令获知需要对第N层至第N+j层数据记录进行合并处理。
基于FPGA的合并器20还与处理器30连接,用于接收处理器30发送的数据合并指令,根据该数据合并指令,对需要合并的第N层至第N+j层数据记录进行合并处理,以获得新的第N+j层的数据记录并输出给处理器30,以供处理器30利用新的第N+j层的数据记录替换存储器10中需要合并的第N层至第N+j层的数据记录。其中,第N层至第N+j层的数据记录被替换为新的第N+j层的数据记录,实现了数据记录的合并。
可选地,处理器30在识别出需要合并的第N层至第N+j层数据记录之后,可以将需要合并的第N层至第N+j层数据记录加载至存储器10所包含的内存中,以便于基于FPGA的合并器20直接从数据库系统100的内存中读取需要合并的第N层至第N+j层数据记录,提高基于FPGA的合并器20读取数据记录的效率,进而提高数据合并过程的整体效率。可选地,基于FPGA的合并器20可以采用PCIE板卡的形式挂载在数据库系统100中,则基于FPGA的合并器20可以通过PCIE通道从数据库系统100的内存中读取需要合并的第N层至第N+j层数据记录。
在本实施例中,数据库系统100中增加基于FPGA的合并器20,且数据合并过程主要由基于FPGA的合并器20完成,可节约处理器30的计算资源,降低处理器30的处理负担,使得处理器30可以更加专注数据记录的写入和查询,实现数据存储(写入和查询)与数据合并的分离,进而降低了数据合并操作对数据写入和查询性能的影响,提高数据库系统100的整体能力,改善性能抖动问题。另外,本实施例可以充分利用FPGA的资源优势,在几乎不影响数据写入和查询性能的情况下,可以做到对相邻两层甚至两层以上(j≥2时)的数据记录进行合并,使得数据合并过程更加灵活,合并效率更高,不受应用场景的限制。
基于图1a所示数据库系统100,本申请一示例性实施例还提供一种数据合并方法。该方法主要是从基于FPGA的合并器20的角度进行的描述,如图1d所示,该方法包括:
101、根据数据库系统的数据合并指令,将数据库系统中需要合并的第N层至第N+j层的数据记录加载至基于FPGA的合并器的存储单元中;其中,N是非负整数,j是非负整数。
102、对上述需要合并的第N层至第N+j层的数据记录进行合并处理,以获得新的第N+j层的数据记录并存储至存储单元中,以供数据库系统利用新的第N+j层的数据记录替换数据库系统中需要合并的第N层至第N+j层的数据记录。
在本实施例中,数据合并指令可由数据库系统中的处理器生成并发送。在本实施例中,基于FPGA的合并器包括存储单元,用于存储从数据库系统中加载过来的需要合并的第N层至第N+j层的数据记录。
可选地,若数据库系统中的处理器在识别出需要合并的第N层至第N+j层数据记录之后,将需要合并的第N层至第N+j层数据记录加载至数据库系统的内存中,则基于FPGA的合并器可以直接从数据库系统的内存中读取需要合并的第N层至第N+j层数据记录,并存储至基于FPGA的合并器的存储单元中。
可选地,基于FPGA的合并器的存储单元可以是双倍速率同步动态随机存储器(DoubleDataRateSDRAM,DDR RAM),但不限于此。
在本实施例中,基于FPGA的合并器根据数据库系统的数据合并指令,将需要合并的第N层至第N+j层的数据记录加载至自身的存储单元中,然后针对存储单元中的第N层至第N+j层的数据记录进行数据合并处理,将处理器从数据合并操作中解放出来,可节约处理器的计算资源,降低处理器的处理负担,使得处理器可以更加专注数据记录的写入和查询,实现数据存储(写入和查询)与数据合并的分离,进而降低了数据合并操作对数据写入和查询性能的影响,提高数据库系统的整体能力,改善性能抖动问题。另外,本实施例可以充分利用FPGA的资源优势,在几乎不影响数据写入和查询性能的情况下,可以做到对相邻两层甚至两层以上(j≥2时)的数据记录进行合并,使得数据合并过程更加灵活,合并效率更高,不受应用场景的限制。
在本申请实施例中,基于FPGA的合并器可以有多种实现结构,相应地,具有不同实现结构的合并器对第N层至第N+j层数据记录进行合并处理的流程也会有所不同。本申请实施例并不限定基于FPGA的合并器的内部实现结构,凡是能够由FPGA实现并且可以执行图1d所示数据合并方法的合并器结构均适用于本申请实施例。本申请以下实施例给出几种基于FPGA的合并器的内部实现结构,并对具有不同内部实现结构的合并器的数据合并过程进行详细说明。
图2a为本申请另一示例性实施例提供的一种基于FPGA的合并器的结构示意图。本实施例提供的基于FPGA的合并器可应用于数据库系统中,并与数据库系统中的处理器相配合实现一种新的数据合并逻辑。如图2a所示,该基于FPGA的合并器主要包括:存储单元21、控制单元22和合并单元23。
其中,存储单元21主要用作基于FPGA的合并器的存储空间,负责存储与该合并器相关的数据,例如该合并器的配置文件、需要该合并器合并处理的数据记录等。如图2a所示,控制单元22和合并单元23均可访问存储单元21。可选地,存储单元21可以包括位于合并器内部实现的片内存储器,和/或,位于合并器外部实现的片外存储器。在本申请各实施例的图示中,以存储单元21位于合并器外部为例,但并不限于此。
控制单元22是基于FPGA的合并器的控制模块,主要实现该合并器的控制逻辑。控制单元22可接收来自基于FPGA的合并器所在的数据库系统的数据合并指令,并可根据该数据合并指令,将该数据库系统中需要合并的第N层至第N+j层的数据记录加载至存储单元21。除此之外,控制单元22还可以控制合并单元23对需要合并的第N层至第N+j层的数据记录进行合并处理。其中,N是非负整数,例如可以是0,1,2,3等;j是非负整数,例如可以是1,2,3等。一般来说,j的取值是1,2,3等正整数。但是,在一些应用场景中,j的取值也可以是0。例如,对于在同一层级上可能存在重叠的数据记录的情况,j的取值为0,这意味着可以对同一层的数据记录进行合并处理。
合并单元23是基于FPGA的合并器中的功能模块,可在控制单元22的控制下,访问存储单元21中存储的第N层至第N+j层的数据记录,并对第N层至第N+j层的数据记录进行合并处理,以获得新的第N+j层的数据记录并存储至存储单元21中,以供数据库系统利用新的第N+j层数据记录替换数据库系统中需要合并的第N层至第N+j层数据记录,从而达到数据合并的目的。
其中,合并单元23对第N层至第N+j层的数据记录进行合并处理主要是将第N层至第N+j层数据记录进行比较,去除重复的或者无效的数据记录,进而获得应该被保留下来的数据记录的过程。根据应用场景或业务需求的不同,合并单元23将第N层至第N+j层数据记录进行比较,去除重复的或者无效的数据记录的过程可能不同。
基于图2a所示的基于FPGA的合并器的内部实现结构,本申请另一示例性实施例还提供一种数据合并方法,该方法描述了图2a所示的基于FPGA的合并器的工作原理。如图2b所示,该方法包括:
20a、控制单元接收来自于数据库系统的数据合并指令,该数据库系统是基于FPGA的合并器所在的数据库系统。
21a、控制单元根据该数据合并指令,将数据库系统中需要合并的第N层至第N+j层的数据记录加载至该基于FPGA的合并器的存储单元。
22a、控制单元控制合并单元对存储单元中存储的第N层至第N+j层的数据记录进行合并处理,以获得新的第N+j层的数据记录并存储至存储单元中,以供数据库系统利用新的第N+j层数据记录替换数据库系统中需要合并的第N层至第N+j层数据记录。
在本实施例中,控制单元接收来自于数据库系统的数据合并指令,根据该数据合并指令将数据库系统中需要合并的第N层至第N+j层的数据记录加载至该基于FPGA的合并器的存储单元,然后控制合并单元对存储单元中存储的第N层至第N+j层的数据记录进行合并处理。
本实施例并不限定控制单元控制合并单元对存储单元中存储的第N层至第N+j层数据记录进行合并处理的控制逻辑。
例如,可以根据合并单元的能力,例如合并单元每次合并处理最多能够处理的数据记录数以及完成一次合并处理大概需要的时间等信息,设定一处理周期。控制单元可以根据该处理周期,周期性地控制合并单元到存储单元中读取部分数据记录(小于或等于合并单元每次合并处理最多能够处理的数据记录数)或者周期性地从存储单元中读取部分数据记录(小于或等于合并单元每次合并处理最多能够处理的数据记录数)并送入合并单元。对合并单元来说,可在控制单元的控制下,周期性地到存储单元中读取部分数据记录或者接收控制单元周期性地发送的部分数据记录,并基于数据记录的一些属性信息,针对每次读取到的或控制单元发送的部分数据记录进行合并处理,直到针对存储单元中存储的所有数据记录都进行合并处理为止。
又例如,合并单元每次完成当前数据记录的合并处理后,向控制单元发送合并合并完成通知消息;控制单元可以在接收到合并单元发出的合并完成通知消息时,可以到存储单元中读取数据记录(小于或等于合并单元每次合并处理最多能够处理的数据记录数)并提供给合并单元或者控制合并单元再次到存储单元中读取数据记录(小于或等于合并单元每次合并处理最多能够处理的数据记录数)。对合并单元来说,可在控制单元的控制下,每次从存储单元中读取部分数据记录或者接收控制单元发送的部分数据记录,并基于数据记录的一些属性信息,针对每次读取到的或控制单元发送的部分数据记录进行合并处理,直到针对存储单元中存储的所有数据记录都进行合并处理为止。
在本实施例中,由合并器中的控制单元将数据库系统中需要合并的第N层至第N+j层的数据记录加载至该合并器的存储单元中,并控制该合并器中的合并单元访问存储单元的逻辑,从而控制合并单元针对存储单元中存储的第N层至第N+j层的数据记录进行合并处理,并输出合并处理后作为新的N+j层的数据记录。
图3a为本申请又一示例性实施例提供的另一种基于FPGA的合并器的结构示意图。本实施例提供的基于FPGA的合并器可应用于数据库系统中,并可与数据库系统中的处理器相配合实现一种新的数据合并逻辑。如图3a所示,该基于FPGA的合并器包括:存储单元21、控制单元22、合并单元23以及传输单元24。
其中,存储单元21主要用作基于FPGA的合并器的存储空间,负责存储与该合并器相关的数据,例如该合并器的配置文件、需要该合并器合并处理的数据记录等。如图3a可知,控制单元22和传输单元24可直接访问存储单元21,而合并单元23不再直接访问存储单元21,而是通过传输单元24来访问存储单元21。
控制单元22是基于FPGA的合并器的控制模块,主要实现该合并器的控制逻辑。控制单元22可接收来自基于FPGA的合并器所在的数据库系统的数据合并指令,并可根据该数据合并指令,将该数据库系统中需要合并的第N层至第N+j层的数据记录加载至存储单元21。除此之外,控制单元22还可以控制传输单元24向合并单元23传输存储单元21中存储的需要合并的第N层至第N+j层的数据记录,从而达到控制合并单元23对需要合并的第N层至第N+j层的数据记录进行合并处理的目的。其中,N、j是非负整数。关于N、j的取值可参见前述实施例的描述,在此不再赘述。
传输单元24是基于FPGA的合并器中的数据通道,主要负责该合并器内部的数据传输逻辑。例如,传输单元24可在控制单元22的控制下,从存储单元21中读取需要合并的第N层至第N+j层的数据记录,并向合并单元23传输存储单元21中存储的需要合并的第N层至第N+j层的数据记录。
合并单元23是基于FPGA的合并器中的功能模块,可接收传输单元24传输过来的第N层至第N+j层的数据记录,并对第N层至第N+j层的数据记录进行合并处理,以获得新的第N+j层的数据记录并存储至存储单元21中,以供数据库系统利用新的第N+j层数据记录替换数据库系统中需要合并的第N层至第N+j层数据记录,从而达到数据合并的目的。
基于图3a所示的基于FPGA的合并器的内部实现结构,本申请又一示例性实施例还提供一种数据合并方法,该方法描述了图3a所示的基于FPGA的合并器的工作原理。如图3b所示,该方法包括:
30a、控制单元接收来自于数据库系统的数据合并指令,该数据库系统是基于FPGA的合并器所在的数据库系统。
31a、控制单元根据该数据合并指令,将数据库系统中需要合并的第N层至第N+j层的数据记录加载至该基于FPGA的合并器的存储单元。
32a、控制单元控制传输单元从存储单元中读取需要合并的第N层至第N+j层的数据记录并传输给合并单元。
33a、合并单元接收传输单元传输过来的第N层至第N+j层的数据记录,并对第N层至第N+j层的数据记录进行合并处理,以获得新的第N+j层的数据记录并存储至存储单元中,以供数据库系统利用新的第N+j层数据记录替换数据库系统中需要合并的第N层至第N+j层数据记录。
在本实施例中,控制单元接收来自于数据库系统的数据合并指令,根据该数据合并指令将数据库系统中需要合并的第N层至第N+j层的数据记录加载至该基于FPGA的合并器的存储单元,然后控制传输单元向合并单元传输存储单元中存储的第N层至第N+j层的数据记录,使得合并单元可以对第N层至第N+j层的数据记录进行合并处理。
本实施例并不限定控制单元控制传输单元向合并单元传输第N层至第N+j层数据记录的控制逻辑。
例如,可以根据合并单元的能力,例如合并单元每次合并处理最多能够处理的数据记录数以及完成一次合并处理大概需要的时间等信息,设定一处理周期。控制单元可以根据该处理周期,周期性地控制传输单元到存储单元中读取部分数据记录(小于或等于合并单元每次合并处理最多能够处理的数据记录数)并将读取到的部分数据记录传输给合并单元,以供合并单元针对这部分数据记录进行合并处理。
又例如,合并处理单元每次完成当前数据记录的合并处理后,向控制单元发送合并合并完成通知消息;控制单元可以在接收到合并单元发出的合并完成通知消息时,控制传输单元再次到存储单元中读取部分数据记录(小于或等于合并单元每次合并处理最多能够处理的数据记录数)并将读取到的部分数据记录传输给合并单元,以供合并单元针对这部分数据记录进行合并处理。
在本实施例中,增加专门用于数据传输的传输单元,并由该传输单元负责从存储单元中读取数据记录并提供给合并单元,可以简化合并单元的功能,使得合并单元可以更加专注于数据合并,同时可简化控制单元的控制逻辑,在完成数据合并的同时,可简化基于FPGA的合并器的实现逻辑,提高基于FPGA的合并器进行数据合并的效率。
图4a为本申请又一示例性实施例提供的带有片内缓存功能的基于FPGA的合并器的结构示意图。本实施例提供的基于FPGA的合并器可应用于数据库系统中,可与数据库系统中的处理器相配合实现一种新的数据合并逻辑。如图4a所示,该基于FPGA的合并器包括:存储单元21、控制单元22、合并单元23、传输单元24以及至少一个输入缓冲区25。
其中,存储单元21主要用作基于FPGA的合并器的存储空间,负责存储与该合并器相关的数据,例如该合并器的配置文件、需要该合并器合并处理的数据记录等。
输入缓冲区25是基于FPGA的合并器的输入缓冲区,可以在控制单元22的控制下缓存存储单元21中存储的第N层至第N+j层的数据记录。如图4a所示,输入缓冲区25可以是一个或多个,且控制单元22和传输单元24可直接访问输入缓冲区25,而合并单元23可通过传输单元24来访问输入缓冲区25。
控制单元22是基于FPGA的合并器的控制模块,主要实现该合并器的控制逻辑。控制单元22可接收来自基于FPGA的合并器所在的数据库系统的数据合并指令,并可根据该数据合并指令,将该数据库系统中需要合并的第N层至第N+j层的数据记录加载至存储单元21。除此之外,控制单元22还可以将存储单元21中存储的第N层至第N+j层的数据记录缓存到至少一个输入缓冲区25内,并控制传输单元24将至少一个输入缓冲区25中的数据记录传输给合并单元23,从而达到控制合并单元23对第N层至第N+j层的数据记录进行合并处理的目的。其中,N,j是非负整数,关于N,j的取值可参见前述实施例的描述,在此不再赘述。
对任一输入缓冲区25,控制单元22可以根据该输入缓冲区25内是否存在可用空间决定是否往输入缓冲区25中缓存新的数据记录。例如,当传输单元24将该输入缓冲区25内的数据记录传输给合并单元23后,控制单元22可以从片段存储单元21中读取新的数据记录并缓存至该输入缓冲区25内。
可选地,数据库系统(主要是指数据库系统中的处理器)可以通过合并器的API接口,获知该合并器所包含的输入缓冲区25的数量。为了简化该合并器的控制逻辑,数据库系统可根据该合并器所包含的输入缓冲区25的数量,预先将需要合并的第N层至第N+j层的数据记录划分为与至少一个输入缓冲区25对应的至少一个数据记录组,并将每一个输入缓冲区25应该缓存的数据记录组的相关信息携带在数据合并指令中提供给控制单元22。其中,根据合并需求的不同,数据记录组的相关信息也会有所不同,例如可以是数据记录组中数据记录的标识、偏移地址、快照版本号等。每个数据记录组包括至少一个数据记录。
基于上述,控制单元22可将存储单元21中的至少一个数据记录组中的数据记录分别缓存至对应的输入缓冲区25内,并控制传输单元24将至少一个输入缓冲区25中的数据记录传输给合并单元23,从而达到控制合并单元23对第N层至第N+j层的数据记录进行合并处理的目的。
传输单元24是基于FPGA的合并器中的数据通道,主要负责该合并器内部的数据传输逻辑。例如,传输单元24可在控制单元22的控制下,将至少一个输入缓冲区25中的数据记录传输给合并单元23。例如,传输单元24可在控制单元22的控制下,每次从至少一个输入缓冲区25中分别读取一个数据记录并传输给合并单元23。
合并单元23是基于FPGA的合并器中的功能模块,可接收传输单元24传输过来的数据记录,并对这些数据记录进行合并处理,以获得新的第N+j层的数据记录并存储至存储单元21中,以供数据库系统利用新的第N+j层数据记录替换数据库系统中需要合并的第N层至第N+j层数据记录,从而达到数据合并的目的。
基于图4a所示的基于FPGA的合并器的内部实现结构,本申请又一示例性实施例还提供一种数据合并方法,该方法描述了图4a所示的基于FPGA的合并器的工作原理。如图4b所示,该方法包括:
40a、控制单元接收来自于数据库系统的数据合并指令,该数据库系统是基于FPGA的合并器所在的数据库系统。
41a、控制单元根据该数据合并指令,将数据库系统中需要合并的第N层至第N+j层的数据记录加载至该基于FPGA的合并器的存储单元,该第N层至第N+j层的数据记录包括与至少一个输入缓冲区对应的至少一个数据记录组。
42a、控制单元按照数据记录组与输入缓冲区的对应关系,从存储单元中读取至少一个数据记录组中的数据记录并缓存至对应的输入缓冲区内。
43a、控制单元控制传输单元从至少一个输入缓冲区中读取数据记录并传输给合并单元。
44a、合并单元接收传输单元传输过来的数据记录,并对传输单元每次传输过来的数据记录进行合并处理,以获得新的第N+j层的数据记录并存储至存储单元中,以供数据库系统利用新的第N+j层数据记录替换数据库系统中需要合并的第N层至第N+j层数据记录。
在本实施例中,控制单元接收来自于数据库系统的数据合并指令,根据该数据合并指令将数据库系统中需要合并的第N层至第N+j层的数据记录加载至该基于FPGA的合并器的存储单元,然后一方面从存储单元中读取各数据记录组中的数据记录并缓存至对应的输入缓冲区内,另一方面控制传输单元从各输入缓冲区中读取数据记录并传输给合并单元,使得合并单元可以对第N层至第N+j层的数据记录进行合并处理。
其中,考虑到输入缓冲区的大小有一定限制,控制单元可以根据输入缓冲区内是否有可用空间,分批次从存储单元中的相应数据记录组内读取新的数据记录缓存至对应的输入缓冲区内。
其中,考虑到合并单元每次能够处理的数据记录也有一定数量限制,传输单元可以分批次从输入缓冲区中读取数据记录并传输给合并单元。例如,传输单元每次从各输入缓冲区中分别读取一个数据记录并传输给合并单元。又例如,传输单元每次从一个输入缓冲区中读取若干个数据记录并传输给合并单元。又例如,传输单元每次从部分输入缓冲区中读取若干个数据记录并传输给合并单元。不论是哪种传输方式,传输单元每次传输给合并单元的数据记录数小于或等于合并单元每次最多能够处理的数据记录数。
在本实施例中,并不限定控制单元向输入缓冲区内缓存数据记录的逻辑以及传输单元从输入缓冲区中读取数据记录的逻辑。这两个逻辑可以相互独立,也可以相互配合。
在一示例性实施例中,控制单元可以监测输入缓冲区中的数据记录是否已经被传输单元全部传输给合并单元;当输入缓冲区内的数据记录全部被传输单元传输给合并单元后,控制单元继续从存储单元中的相应数据记录组内读取新的数据记录并缓存至该输入缓冲区内。
在本实施例中,在合并器内部增加输入缓冲区,用于缓存存储单元内的数据记录,使得传输单元可以直接从输入缓冲区内读取数据记录,有利于提高传输单元读取数据记录的效率,进而提高数据传输效率,有利于进一步提高数据合并过程的整体效率。
图5a为本申请又一示例性实施例提供的带有编解码功能的基于FPGA的合并器的结构示意图。本实施例提供的基于FPGA的合并器可应用于数据库系统中,并可与数据库系统中的处理器相配合实现一种新的数据合并逻辑。如图5a所示,该基于FPGA的合并器包括:存储单元21、控制单元22、合并单元23、传输单元24、至少一个输入缓冲区25、至少一个解码单元26、至少一个解码缓冲区27、编码单元28和编码缓冲区29。其中,解码单元26、输入缓冲区25以及解码缓冲区27之间一一对应,即每个解码单元26负责对一个输入缓冲区25缓存的数据记录进行解码并将解码结果输出至对应的解码缓冲区27中。
其中,存储单元21主要用作基于FPGA的合并器的存储空间,负责存储与该合并器相关的数据,例如该合并器的配置文件、需要该合并器合并处理的数据记录等。
输入缓冲区25是基于FPGA的合并器的片内缓冲区,可以在控制单元22的控制下缓存存储单元21中存储的数据记录。如图5a所示,输入缓冲区25可以是一个或多个,且控制单元22和解码单元26可直接访问输入缓冲区25,传输单元24可直接访问解码缓冲区27。
控制单元22是基于FPGA的合并器的控制模块,主要实现该合并器的控制逻辑。控制单元22可接收来自基于FPGA的合并器所在的数据库系统的数据合并指令,并可根据该数据合并指令,将该数据库系统中需要合并的第N层至第N+j层的数据记录加载至存储单元21。除此之外,控制单元22还可以将存储单元21中的数据记录缓存到至少一个输入缓冲区25内,并控制解码单元26对相应输入缓冲区25中缓存的数据记录进行解码并输出解码结果至相应解码缓冲区27中。另外,控制单元22还可以控制传输单元24将至少一个解码缓冲区27中的解码结果传输给合并单元23,从而达到控制合并单元23对第N层至第N+j层的数据记录进行合并处理的目的。其中,N,j是非负整数,关于N,j的取值可参见前述实施例的描述,在此不再赘述。
解码单元26是基于FPGA的合并器中的功能模块,主要在控制单元22的控制下,对对应的输入缓冲区25内的数据记录进行解码处理,并将解码结果输出至对应的解码缓冲区27内。
传输单元24是基于FPGA的合并器中的数据通道,主要负责该合并器内部的数据传输逻辑。例如,传输单元24可在控制单元22的控制下,每当合并单元23完成当前合并处理后,从至少一个解码缓冲区内读取新的解码结果并传输给合并单元23以供合并单元23对新的解码结果进行合并处理,以及在当前合并处理的结果需要保留解码结果时,将需要保留的解码结果作为待编码数据存储至编码缓冲区29。
合并单元23是基于FPGA的合并器中的功能模块,可接收传输单元24传输过来的解码结果,对这些解码结果进行合并处理。另外,合并单元23还向控制单元22反馈合并处理结果,例如当前合并处理是否完成以及是否存在需要保留的解码结果等,以便于控制单元22可以根据合并单元23反馈的合并处理结果对传输单元进行相应控制。
编码单元28是基于FPGA的合并器中的功能模块,与解码单元26相对应,主要用于在控制单元22的控制下,对编码缓冲区29内的待编码数据进行编码处理,以获得新的第N+j层的数据记录并存储至存储单元21中,以供数据库系统利用新的第N+j层数据记录替换数据库系统中需要合并的第N层至第N+j层数据记录,从而达到数据合并的目的。
在一示例性实施例中,数据库系统可以通过合并器的API接口,获知该合并器所包含的输入缓冲区25的数量。为了简化该合并器的控制逻辑,数据库系统可根据该合并器所包含的输入缓冲区25的数量,预先将需要合并的第N层至第N+j层的数据记录划分为与至少一个输入缓冲区25对应的至少一个数据记录组,并将每一个输入缓冲区25应该缓存的数据记录组的相关信息携带在数据合并指令中提供给控制单元22。其中,根据合并需求的不同,数据记录组的相关信息也会有所不同,例如可以是数据记录组中数据记录的标识、偏移地址、快照版本号等。每个数据记录组包括至少一个数据记录。
基于上述,图5a所示的基于FPGA的合并器的一种工作原理如下:
控制单元接收来自于数据库系统的数据合并指令,该数据库系统是基于FPGA的合并器所在的数据库系统。控制单元根据该数据合并指令,将数据库系统中需要合并的第N层至第N+j层的数据记录加载至该基于FPGA的合并器的存储单元。在该实施例中,第N层至第N+j层的数据记录包括与至少一个输入缓冲区对应的至少一个数据记录组。基于此,控制单元一方面按照数据记录组与输入缓冲区的对应关系,从存储单元中读取至少一个数据记录组中的数据记录并缓存至对应的输入缓冲区内。另一方面,控制单元按照解码单元与输入缓冲区的对应关系,控制解码单元对相应输入缓冲区内的数据记录进行解码操作并将解码结果输出至对应的解码缓冲区。
另外,控制单元还会控制传输单元从至少一个输入缓冲区中读取解码结果并传输给合并单元,以供合并单元执行合并处理。其中,合并单元在完成合并处理时,可以向控制单元返回合并处理结果。基于此,控制单元可以获知合并单元是否完成当前合并处理,并在确定合并单元完成当前合并处理时,控制传输单元从至少一个输入缓冲区中读取解码结果并传输给合并单元,以供合并单元继续执行合并处理,以及在当前合并处理结果需要保留解码结果时,控制传输单元将需要保留的解码结果作为待编码数据存储至编码缓冲区。可选地,传输单元可以在控制单元的控制下,每当合并单元完成当前合并处理后,从至少一个解码缓冲区内分别读取新的解码结果并传输给合并单元。
此外,控制单元还会控制编码单元对编码缓冲区内的待编码数据进行编码处理,以获得新的第N+j层的数据记录并存储至存储单元中,以供数据库系统利用新的第N+j层数据记录替换数据库系统中需要合并的第N层至第N+j层数据记录。
在本实施例中,控制单元需要控制解码单元、传输单元、合并单元以及编码单元执行相应操作,从而完成对第N层至第N+j层的数据记录进行合并处理。本实施例并不限定控制单元控制解码单元、传输单元、合并单元以及编码单元执行相应操作的控制逻辑。这些控制逻辑之间可以相互独立,也可以相互配合。
在一示例性实施例中,将需要处理的数据记录划分为多个层次,如图5b所示。每个数据记录组包括至少一个数据记录块(block),每个数据记录块包括至少一个数据记录区间,每个数据记录区间包括至少一个数据记录。在该示例性实施例中,控制单元以数据记录块为单位,每次可向输入缓冲区缓存一个数据记录块;对解码单元来说,可以以数据记录区间为单位,每次从对应的输入缓冲区内读取一个数据记录区间进行解码处理。
以第一数据记录组对应的输入缓冲区为例,则当监测到第一数据记录组对应的输入缓冲区内的最后一个数据记录区间被送入对应的解码单元后,控制单元可以从第一数据记录组中读取一个新的数据记录块并缓存至对应的输入缓冲区内。相应地,控制单元可以在解码单元每次完成解码处理后,可以根据数据块区间的偏移量(图5b所示区间偏移量),从第一数据记录组对应的输入缓冲区内读取一个新的数据记录区间并送入对应的解码单元。其中,第一数据记录组是至少一个数据记录组中的任一个数据记录组。
进一步,如图5b所示,编码后的数据记录可以包括关键字前缀长度、关键字后缀长度、关键字后缀、数据值长度以及数据值等字段。基于此,对任一数据记录来说,解码单元可以从该数据记录中解码出关键字前缀长度、关键字后缀长度、关键字后缀、数据值长度以及该数据记录的数据值;然后将解码出的关键字前缀长度、关键字后缀长度、关键字后缀以及上一个关键字拼接出该数据记录的关键字,以获得解码结果,所述解码结果包括:该数据记录的关键字的长度、数据值长度、该数据记录的关键字和数据值。其中,若该解码结果需要被保留下来,则将作为待编码数据被存储至编码缓冲区内。基于此,编码单元可以利用字符流编码待编码数据(即需要保留的解码结果)中的关键字长度、数据值长度、关键字和数据值,以获得新的第N+j层的数据记录。
在本实施例中,增加了解码单元和编码单元,可支持对经过编码的数据记录进行合并处理,编码操作可以降低数据记录的数据量,有利于节约内存和磁盘等存储资源。
图6a为本申请又一示例性实施例提供的带有压缩功能的基于FPGA的合并器的结构示意图。本实施例提供的基于FPGA的合并器可应用于数据库系统中,可与数据库系统中的处理器相配合实现一种新的数据合并逻辑。如图6a所示,该基于FPGA的合并器包括:存储单元21、控制单元22、合并单元23、传输单元24、至少一个输入缓冲区25、至少一个解码单元26、至少一个解码缓冲区27、编码单元28、编码缓冲区29、输出缓冲区201和压缩单元202。其中,解码单元26、输入缓冲区25以及解码缓冲区27之间一一对应,即每个解码单元26负责对一个输入缓冲区25缓存的数据记录进行解码并将解码结果输出至对应的解码缓冲区27中。
图6a所示实施例与图5a所示实施例的区别在于:增加了输出缓冲区201和压缩单元202。输出缓冲区201主要用于缓存编码单元28输出的经过编码后的数据记录,即新的第N+j层的数据记录。当编码单元28输出的经过编码后的数据记录累积到一定数量后,控制单元22可以控制压缩单元202对这些经过编码后的数据记录进行压缩并将压缩结果输出至存储单元21中。对压缩单元202来说,可在控制单元22的控制下对输出缓冲区201内的新的第N+j层的数据记录进行压缩处理,并将压缩结果输出至存储单元21。其中,通过压缩单元202对经过编码后的数据记录进行压缩,可以减少对存储单元21的存储资源的占用,减少处理器与合并器之间进行数据传输所消耗的带宽资源。
可选地,在上述各实施例中,输入缓冲区、解码缓冲区、编码缓冲区和输出缓冲区可以采用双端口RAM实现,一端顺序写,另外一端顺序读,提高数据读写效率。进一步,解码缓冲区和编码缓冲区可采用环形缓冲区(Ring Buffer)。在一种实现中,输入缓冲区和输出缓冲区的大小被设计为可缓存两个数据记录块,位宽是64bit,在300MHz频率下,理论读取带宽为2.4GB/s。
在上述各实施例中,基于FPGA的合并器由功能模块、控制模块和存储模块三部分组成。其中,功能模块可由FPGA芯片上的DSP和LUT资源实现,存储模块可由FPGA芯片上的BRAM资源等实现。各功能模块的执行状态由相应的控制模块管理,可按照流水方式执行,有利于提高FPGA芯片的计算资源利用效率。
本申请各实施例提供的基于FPGA的合并器可应用在各种数据库系统中,例如可以应用在LevelDB或RocksDB。以LevelDB或RocksDB为例,详细说明本申请实施例提供的合并器的工作过程。
参见图6b,是包含基于FPGA的合并器的LevelDB或RocksDB的实现结构。LevelDB或RocksDB是基于日志增量存储的KV型的数据库,实际存储的是一系列KV记录。在LevelDB或RocksDB中,当需要写入KV记录时,先将该KV记录写入日志(log)文件中;当日志文件写入成功后,再将该KV记录写入内存的memtable文件中;当memtable文件的大小到了一定值时,将该memtable文件转换为immutable memtable文件,然后按照immutable memtable文件中KV记录的关键字(Key)由小到大遍历,并依次写入磁盘上一个level_0层的新建SST文件中。immutable memtable文件是一个多层级队列SkipList,其中的KV记录是根据Key有序排列的。采用分层存储方式将大部分KV记录存储至磁盘中,可以减少对内存资源的消耗,实现持久化存储。
在每个SST文件内的KV记录是按照Key由小到大的顺序存储的,且除level_0下的SST文件之外,不同SST文件之间的Key范围(SST文件内最小key和最大key之间)不会有任何重叠。因为level_0的文件直接来自于内存,所以level_0下的任意两个SST文件的key范围可能重叠。
在LevelDB或RocksDB中,当读取KV记录时需要在memtable文件、immutablememtable文件以及磁盘上各层级的SST文件中依照KV记录的新鲜程度依次查找,比较复杂,查找速度较慢。为了加快读取KV记录的速度,现有技术采取合并(compaction)方式对已有KV记录进行整理压缩,去除一些无效KV记录,通过减少文件数量来降低查询复杂度,提高查询效率。
当按照immutable memtable文件中KV记录的关键字(Key)由小到大遍历,并依次写入磁盘上一个level_0层的新建SST文件中的过程中,可以对immutablememtable文件中KV记录进行合并处理。或者,当磁盘上某个level(例如level_L)下的SST文件数目超过预设值时,可以将这个level_L下的SST文件和高一层级的level_L+1下的SST文件进行合并。
在选定某个level进行合并后,可以轮流选择该level_L下需要参与合并的文件。例如,第一次选择文件A进行合并,第二次可以选择Key范围紧挨着文件A的文件B进行合并,这样每个文件都会有机会轮流和高一层级的文件进行合并。
当确定level_L的文件A和level_L+1层的文件进行合并时,可以从level_L+1层中的文件中选择Key范围与文件A在Key范围有重叠的所有文件,例如文件B、C、D,并将所有文件与文件A进行合并。
可选地,处理器可以按照Key由小到大的顺序将文件A、B、C、D中的KV记录进行排序,并根据基于FPGA的合并器所包含的输入缓冲区的数量划分为相应的KV记录组,然后通知基于FPGA的合并器。该合并器从内存中读取各KV记录组并存储至合并器的存储单元(DDR)中。如图6b所示,假设基于FPGA的合并器包含4个输入缓冲区,则文件A、B、C、D中的KV记录被划分为4组,分别对应Way0~Way3。在每一路内,KV记录按照Key和版本号升序排列,而任意两路之间Key取值范围可能重叠。
一方面,控制单元在输入缓冲区中KV记录处理完成后,根据下一个KVBlock的偏移地址控制输入缓冲区从DDR中读取下一个待处理KV Block。这里的控制单元可以实现为加载控制器(Load Controller)。
一方面,控制单元在解码单元完成一个KV区间的解码后,根据KV区间在输入缓冲区的偏移地址,从输入缓冲区中读取下一个KV区间,并发送给解码单元。这里的控制单元可实现为解码控制器(Decoder Controller)。解码单元对KV区间内的KV记录进行解码处理,并将解码结果输出至解码缓冲区。
一方面,控制单元根据合并单元反馈最小的Key,控制传输单元将最小Key对应的解码结果从相应解码缓冲区中传输到编码缓冲区中,并控制传输单元继续从四个解码缓冲区中分别读取一个解码结果(如图6b所示KV0、KV1、KV2、KV3)并提供给合并单元,以供合并单元继续执行合并处理。对合并单元来说,接收传输单元传输过来的4路解码结果KV0、KV1、KV2、KV3,并将上一次合并处理中的最小Key与这4路解码结果中的Key进行比较,并向控制单元反馈最小Key。这里的控制单元可实现为合并控制器(Compaction Controller)。
一方面,控制单元可在编码单元完成一个解码结果的编码后,从编码缓冲区中读取下一个待编码的解码结果,并发送给编码单元。这里的控制单元可实现为编码控制器(Encoder Controller)。
在本实施例中,整个数据合并过程被分成解码(Decoder)、比较合并(Compaction)和编码(Encoder)三个阶段,并在FPGA上为每个功能模块固化一定的计算资源和数据缓冲资源,通过控制单元使各个阶段以流水方式执行,充分提高数据合并过程的效率。同时,释放数据合并操作占用的CPU资源,提高数据库整体性能,改善性能抖动问题。另外,与数据库系统中的处理器相配合,无需修改合并操作的触发条件,因此对应用场景无特殊要求,可适用于不同的负载场景。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤20a至步骤22a的执行主体可以为设备A;又比如,步骤20a和21a的执行主体可以为设备A,步骤22a的执行主体可以为设备B;等等。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如20a、22a等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,计算机程序被执行时能够实现上述方法实施例中由控制单元执行的各步骤。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (13)
1.一种基于FPGA的合并器,其特征在于,包括:控制单元、存储单元、合并单元、至少一个输入缓冲区及与所述至少一个输入缓冲区对应的至少一个解码单元;
所述控制单元,用于根据数据库系统的数据合并指令,将所述数据库系统中需要合并的第N层至第N+j层的数据记录加载至所述存储单元,以及控制所述合并单元对所述需要合并的第N层至第N+j层的数据记录进行合并处理;其中,N是非负整数,j是非负整数;
所述合并单元,用于对所述需要合并的第N层至第N+j层的数据记录进行合并处理,以获得新的第N+j层的数据记录并存储至所述存储单元中,以供所述数据库系统利用所述新的第N+j层的数据记录替换所述数据库系统中所述需要合并的第N层至第N+j层的数据记录;
所述需要合并的第N层至第N+j层的数据记录包括与所述至少一个输入缓冲区对应的至少一个数据记录组,每个数据记录组包括至少一个数据记录块,每个数据记录块包括至少一个数据记录区间,每个数据记录区间包括至少一个数据记录;
所述控制单元具体用于:对第一数据记录组,当所述第一数据记录组对应的解码单元完成当前解码处理后,从所述第一数据记录组对应的输入缓冲区内读取一个新的数据记录区间并送入所述对应的解码单元,并当所述对应的输入缓冲区内的最后一个数据记录区间被送入所述对应的解码单元后,从所述第一数据记录组中读取一个新的数据记录块并缓存至所述对应的输入缓冲区内;其中,所述第一数据记录组是所述至少一个数据记录组中的任一个数据记录组。
2.根据权利要求1所述的基于FPGA的合并器,其特征在于,还包括:传输单元,所述传输单元与所述控制单元和所述合并单元连接;
所述传输单元,用于在所述控制单元的控制下,向所述合并单元传输所述需要合并的第N层至第N+j层的数据记录;
所述控制单元具体用于:控制所述传输单元向所述合并单元传输所述需要合并的第N层至第N+j层的数据记录,以控制所述合并单元对所述需要合并的第N层至第N+j层的数据记录进行合并处理。
3.根据权利要求2所述的基于FPGA的合并器,其特征在于,所述控制单元还用于:将所述存储单元中的所述至少一个数据记录组中的数据记录分别缓存至对应的输入缓冲区内;
所述传输单元具体用于:在所述控制单元的控制下,将所述至少一个输入缓冲区中的数据记录传输给所述合并单元。
4.根据权利要求3所述的基于FPGA的合并器,其特征在于,还包括:所述至少一个解码单元对应的至少一个解码缓冲区、编码单元以及所述编码单元对应的编码缓冲区;
所述解码单元,用于在所述控制单元的控制下,对对应的输入缓冲区内的数据记录进行解码处理,并将解码结果输出至对应的解码缓冲区内;
所述编码单元,用于在所述控制单元的控制下,对所述编码缓冲区内的待编码数据进行编码处理,以获得所述新的第N+j层的数据记录并存储至所述存储单元;
所述传输单元具体用于:在所述控制单元的控制下,每当所述合并单元完成当前合并处理后,从所述至少一个解码缓冲区内读取新的解码结果并传输给所述合并单元以供所述合并单元对所述新的解码结果进行合并处理,以及在当前合并处理的结果需要保留解码结果时,将所述需要保留的解码结果作为所述待编码数据存储至所述编码缓冲区。
5.根据权利要求4所述的基于FPGA的合并器,其特征在于,所述传输单元具体用于:在所述控制单元的控制下,每当所述合并单元完成当前合并处理后,从所述至少一个解码缓冲区内分别读取新的解码结果并传输给所述合并单元。
6.根据权利要求4所述的基于FPGA的合并器,其特征在于,还包括:输出缓冲区和压缩单元;
所述输出缓冲区,用于缓存所述编码单元输出的所述新的第N+j层的数据记录;
所述压缩单元,用于在所述控制单元的控制下,对所述输出缓冲区内的所述新的第N+j层的数据记录进行压缩处理,并将压缩结果输出至所述存储单元。
7.根据权利要求4所述的基于FPGA的合并器,其特征在于,所述解码单元具体用于:
对每个数据记录,从所述数据记录中解码出关键字前缀长度、关键字后缀长度、关键字后缀、数据值长度以及所述数据记录的数据值;
将所述关键字前缀长度、关键字后缀长度、关键字后缀以及上一个关键字拼接出所述数据记录的关键字,以获得解码结果,所述解码结果包括:所述数据记录的关键字的长度、所述数据值长度、所述数据记录的关键字和数据值;
所述编码单元具体用于:利用字符流编码所述待编码数据中的关键字长度、数据值长度、关键字和数据值,以获得所述新的第N+j层的数据记录。
8.一种数据合并方法,适用于基于FPGA的合并器,其特征在于,所述方法包括:
根据数据库系统的数据合并指令,将所述数据库系统中需要合并的第N层至第N+j层的数据记录加载至所述基于FPGA的合并器的存储单元中;其中,N是非负整数,j是非负整数;
对所述需要合并的第N层至第N+j层的数据记录进行合并处理,以获得新的第N+j层的数据记录并存储至所述存储单元中,以供所述数据库系统利用所述新的第N+j层的数据记录替换所述数据库系统中所述需要合并的第N层至第N+j层的数据记录;
对第一数据记录组,当所述第一数据记录组对应的解码单元完成当前解码处理后,从所述第一数据记录组对应的输入缓冲区内读取一个新的数据记录区间并送入所述对应的解码单元,并当所述对应的输入缓冲区内的最后一个数据记录区间被送入所述对应的解码单元后,从所述第一数据记录组中读取一个新的数据记录块并缓存至所述对应的输入缓冲区内;其中,所述第一数据记录组是至少一个数据记录组中的任一个数据记录组,所述至少一个数据记录组与至少一个输入缓冲区对应。
9.一种数据库系统,其特征在于,包括:存储器、处理器以及基于FPGA的合并器;
所述存储器,用于存储计算机程序以及所述数据库系统中的至少两层数据记录;
所述处理器与所述存储器和所述合并器耦合,用于执行所述计算机程序,以用于:
从所述至少两层数据记录中识别出需要合并的第N层至第N+j层数据记录;向所述基于FPGA的合并器发送数据合并指令,以指示所述基于FPGA的合并器对所述需要合并的第N层至第N+j层的数据记录进行合并处理;以及利用所述基于FPGA的合并器输出的新的第N+j层的数据记录替换所述存储器中需要合并的第N层至第N+j层的数据记录;其中,N是非负整数,j是非负整数;
所述基于FPGA的合并器,用于接收所述数据合并指令,根据所述数据合并指令,对所述需要合并的第N层至第N+j层数据记录进行合并处理,以获得所述新的第N+j层的数据记录并输出给所述处理器;
所述基于FPGA的合并器还包括:至少一个输入缓冲区及与所述至少一个输入缓冲区对应的至少一个解码单元;所述需要合并的第N层至第N+j层的数据记录包括与所述至少一个输入缓冲区对应的至少一个数据记录组,每个数据记录组包括至少一个数据记录块,每个数据记录块包括至少一个数据记录区间,每个数据记录区间包括至少一个数据记录;
所述基于FPGA的合并器,具体用于对第一数据记录组,当所述第一数据记录组对应的解码单元完成当前解码处理后,从所述第一数据记录组对应的输入缓冲区内读取一个新的数据记录区间并送入所述对应的解码单元,并当所述对应的输入缓冲区内的最后一个数据记录区间被送入所述对应的解码单元后,从所述第一数据记录组中读取一个新的数据记录块并缓存至所述对应的输入缓冲区内;其中,所述第一数据记录组是所述至少一个数据记录组中的任一个数据记录组。
10.根据权利要求9所述的系统,其特征在于,所述基于FPGA的合并器包括:存储单元、控制单元和合并单元;
所述控制单元,用于接收所述数据合并指令,将所述需要合并的第N层至第N+j层的数据记录从所述存储器中加载至所述存储单元中,以及控制所述合并单元对所述需要合并的第N层至第N+j层的数据记录进行合并处理;
所述合并单元,用于对所述需要合并的第N层至第N+j层的数据记录进行合并处理,以获得所述新的第N+j层的数据记录并存储至所述存储单元中,以供所述处理器利用所述新的第N+j层的数据记录替换所述存储器中所述需要合并的第N层至第N+j层的数据记录。
11.根据权利要求10所述的系统,其特征在于,所述的基于FPGA的合并器,还包括:传输单元,所述传输单元与所述控制单元和所述合并单元连接;
所述传输单元,用于在所述控制单元的控制下,向所述合并单元传输所述需要合并的第N层至第N+j层的数据记录;
所述控制单元具体用于:控制所述传输单元向所述合并单元传输所述需要合并的第N层至第N+j层的数据记录,以控制所述合并单元对所述需要合并的第N层至第N+j层的数据记录进行合并处理。
12.根据权利要求11所述的系统,其特征在于,所述控制单元还用于:将所述存储单元中的所述至少一个数据记录组中的数据记录分别缓存至对应的输入缓冲区内;
所述传输单元具体用于:在所述控制单元的控制下,将所述至少一个输入缓冲区中的数据记录传输给所述合并单元。
13.根据权利要求12所述的系统,其特征在于,所述基于FPGA的合并器还包括:所述至少一个解码单元对应的至少一个解码缓冲区、编码单元以及所述编码单元对应的编码缓冲区;
所述解码单元,用于在所述控制单元的控制下,对对应的输入缓冲区内的数据记录进行解码处理,并将解码结果输出至对应的解码缓冲区内;
所述编码单元,用于在所述控制单元的控制下,对所述编码缓冲区内的待编码数据进行编码处理,以获得所述新的第N+j层的数据记录并存储至所述存储单元;
所述传输单元具体用于:在所述控制单元的控制下,每当所述合并单元完成当前合并处理后,从所述至少一个解码缓冲区内读取新的解码结果并传输给所述合并单元以供所述合并单元对所述新的解码结果进行合并处理,以及在当前合并处理的结果需要保留解码结果时,将所述需要保留的解码结果作为所述待编码数据存储至所述编码缓冲区。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810172456.4A CN110309138B (zh) | 2018-03-01 | 2018-03-01 | 数据合并方法、基于fpga的合并器及数据库系统 |
PCT/CN2019/075322 WO2019165901A1 (zh) | 2018-03-01 | 2019-02-18 | 数据合并方法、基于fpga的合并器及数据库系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810172456.4A CN110309138B (zh) | 2018-03-01 | 2018-03-01 | 数据合并方法、基于fpga的合并器及数据库系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110309138A CN110309138A (zh) | 2019-10-08 |
CN110309138B true CN110309138B (zh) | 2023-04-07 |
Family
ID=67805950
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810172456.4A Active CN110309138B (zh) | 2018-03-01 | 2018-03-01 | 数据合并方法、基于fpga的合并器及数据库系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110309138B (zh) |
WO (1) | WO2019165901A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032340B (zh) * | 2019-12-24 | 2024-05-14 | 阿里巴巴集团控股有限公司 | 数据文件的合并方法、装置、存储介质及处理器 |
CN117033396B (zh) * | 2023-10-08 | 2024-01-19 | 北京凌云雀科技有限公司 | 一种基于Redis的大Key处理方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4319225A (en) * | 1974-05-17 | 1982-03-09 | The United States Of America As Represented By The Secretary Of The Army | Methods and apparatus for compacting digital data |
CN103353891A (zh) * | 2013-07-05 | 2013-10-16 | 北京人大金仓信息技术股份有限公司 | 数据库管理系统及其数据处理方法 |
CN103812877A (zh) * | 2014-03-12 | 2014-05-21 | 西安电子科技大学 | 基于Bigtable分布式存储系统的数据压缩方法 |
CN105989129A (zh) * | 2015-02-15 | 2016-10-05 | 腾讯科技(深圳)有限公司 | 实时数据统计方法和装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9251055B2 (en) * | 2012-02-23 | 2016-02-02 | Kabushiki Kaisha Toshiba | Memory system and control method of memory system |
CN103744617B (zh) * | 2013-12-20 | 2016-09-28 | 北京奇虎科技有限公司 | 一种键-值存储系统中数据文件的合并压缩方法及装置 |
CN103761276B (zh) * | 2014-01-09 | 2017-10-31 | 大唐移动通信设备有限公司 | 一种树形结构数据比较的展示方法和装置 |
-
2018
- 2018-03-01 CN CN201810172456.4A patent/CN110309138B/zh active Active
-
2019
- 2019-02-18 WO PCT/CN2019/075322 patent/WO2019165901A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4319225A (en) * | 1974-05-17 | 1982-03-09 | The United States Of America As Represented By The Secretary Of The Army | Methods and apparatus for compacting digital data |
CN103353891A (zh) * | 2013-07-05 | 2013-10-16 | 北京人大金仓信息技术股份有限公司 | 数据库管理系统及其数据处理方法 |
CN103812877A (zh) * | 2014-03-12 | 2014-05-21 | 西安电子科技大学 | 基于Bigtable分布式存储系统的数据压缩方法 |
CN105989129A (zh) * | 2015-02-15 | 2016-10-05 | 腾讯科技(深圳)有限公司 | 实时数据统计方法和装置 |
Non-Patent Citations (1)
Title |
---|
面向Cassandra数据库的高效动态数据管理机制;王博千等;《计算机科学》;20160715(第07期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110309138A (zh) | 2019-10-08 |
WO2019165901A1 (zh) | 2019-09-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11080277B2 (en) | Data set compression within a database system | |
CN103020205B (zh) | 一种分布式文件系统上基于硬件加速卡的压缩解压缩方法 | |
CN105204781B (zh) | 压缩方法、装置和设备 | |
CN107038206B (zh) | Lsm树的建立方法、lsm树的数据读取方法和服务器 | |
US20170123676A1 (en) | Reference Block Aggregating into a Reference Set for Deduplication in Memory Management | |
US9262313B2 (en) | Provisioning in heterogenic volume of multiple tiers | |
US9524300B2 (en) | Heterogenic volume generation and use system | |
US9727479B1 (en) | Compressing portions of a buffer cache using an LRU queue | |
US20170123678A1 (en) | Garbage Collection for Reference Sets in Flash Storage Systems | |
US10649967B2 (en) | Memory object pool use in a distributed index and query system | |
CN111625531B (zh) | 基于可编程装置的合并装置、数据合并方法及数据库系统 | |
CN110309138B (zh) | 数据合并方法、基于fpga的合并器及数据库系统 | |
US20170123689A1 (en) | Pipelined Reference Set Construction and Use in Memory Management | |
Zhang et al. | Understanding and improving disk-based intermediate data caching in Spark | |
CN111611250A (zh) | 数据存储设备、数据查询方法、装置、服务器及存储介质 | |
CN107423425B (zh) | 一种对k/v格式的数据快速存储和查询方法 | |
CN113535068A (zh) | 数据读取方法和系统 | |
Zeng et al. | An empirical evaluation of columnar storage formats | |
CN114138792A (zh) | 一种Key-value分离存储方法及系统 | |
US20230418827A1 (en) | Processing multi-column streams during query execution via a database system | |
CN112711564A (zh) | 合并处理方法以及相关设备 | |
CN113467699B (zh) | 一种提升可用存储容量方法及装置 | |
CN111736985B (zh) | 一种加快日志落入磁盘的方法、系统、设备及介质 | |
Zhang et al. | A Compatible LZMA ORC-Based Optimization for High Performance Big Data Load | |
CN110659315A (zh) | 基于非易失性存储系统的高性能非结构化数据库服务 |
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 |