CN118069069A - 一种数据存储方法及装置、存储介质、计算机程序产品 - Google Patents
一种数据存储方法及装置、存储介质、计算机程序产品 Download PDFInfo
- Publication number
- CN118069069A CN118069069A CN202410459825.3A CN202410459825A CN118069069A CN 118069069 A CN118069069 A CN 118069069A CN 202410459825 A CN202410459825 A CN 202410459825A CN 118069069 A CN118069069 A CN 118069069A
- Authority
- CN
- China
- Prior art keywords
- key
- address
- writing
- data
- log
- 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
- 238000000034 method Methods 0.000 title claims abstract description 63
- 238000013500 data storage Methods 0.000 title claims abstract description 42
- 238000004590 computer program Methods 0.000 title claims abstract description 17
- 238000004891 communication Methods 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 7
- 230000006835 compression Effects 0.000 description 4
- 238000007906 compression Methods 0.000 description 4
- 238000010276 construction Methods 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 238000004064 recycling Methods 0.000 description 2
- KLDZYURQCUYZBL-UHFFFAOYSA-N 2-[3-[(2-hydroxyphenyl)methylideneamino]propyliminomethyl]phenol Chemical compound OC1=CC=CC=C1C=NCCCN=CC1=CC=CC=C1O KLDZYURQCUYZBL-UHFFFAOYSA-N 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 201000001098 delayed sleep phase syndrome Diseases 0.000 description 1
- 208000033921 delayed sleep phase type circadian rhythm sleep disease Diseases 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种数据存储方法及装置、存储介质、计算机程序产品,包括:将待写入键值对中的第一值写入第一数据搁置日志文件中,生成第一值在第一数据搁置日志文件中的第一地址信息;将待写入键值对中的第一键与第一地址信息的第一键地址组合写入数据区的第一内存表中;并将第一地址信息和第一键的第一地址键组合写入反向索引区的第二内存表中;将第一内存表写入数据区的第一有效字符表文件中;并将第二内存表写入反向索引区的第二有效字符表文件中;将第一有效字符表文件加入数据区的第一日志结构合并树中;并将第二有效字符表文件加入反向索引区的第二日志结构合并树中。
Description
技术领域
本申请涉及数据存储领域,尤其涉及一种数据存储方法及装置、存储介质、计算机程序产品。
背景技术
随着非易失性内存主机控制器接口规范(Non-Volatile Memory express,NVMe)在文件***中的普通应用,日志结构合并树(Log-Structured Merge Tree,LSM-Tree)在日志文件***中应用较为广泛,而为了减少NVMe的磨损,键值对分离也是LSM-Tree的一种趋势。
在传统的键值对分离存储中,会将值写入数据搁置日志文件(Data Place LogFile,DataPlog)中,并将反向索引缓存后统一写入DataPlog中。由于反向索引需要缓存后再写入DataPlog中,会破坏写DataPlog操作的原子性,进而影响业务性能的问题。
发明内容
本申请实施例提供一种数据存储方法及装置、存储介质、计算机程序产品,能够保持写DataPlog操作的原子性,提升业务性能。
本申请的技术方案是这样实现的:
第一方面,本申请实施例提出一种数据存储方法,所述方法包括:
将待写入键值对中的第一值写入第一数据搁置日志文件中,生成所述第一值在所述第一数据搁置日志文件中的第一地址信息;
将所述待写入键值对中的第一键与所述第一地址信息的第一键地址组合写入数据区的第一内存表中;并将所述第一地址信息和所述第一键的第一地址键组合写入反向索引区的第二内存表中;
将所述第一内存表写入数据区的第一有效字符表文件中;并将所述第二内存表写入反向索引区的第二有效字符表文件中;
将所述第一有效字符表文件加入数据区的第一日志结构合并树中;并将所述第二有效字符表文件加入反向索引区的第二日志结构合并树中。
第二方面,本申请实施例提出一种数据存储装置,所述装置包括:
写入单元,用于将待写入键值对中的第一值写入第一数据搁置日志文件中,生成所述第一值在所述第一数据搁置日志文件中的第一地址信息;将所述待写入键值对中的第一键与所述第一地址信息的第一键地址组合写入数据区的第一内存表中;并将所述第一地址信息和所述第一键的第一地址键组合写入反向索引区的第二内存表中;将所述第一内存表写入数据区的第一有效字符表文件中;并将所述第二内存表写入反向索引区的第二有效字符表文件中;将所述第一有效字符表文件加入数据区的第一日志结构合并树中;并将所述第二有效字符表文件加入反向索引区的第二日志结构合并树中。
第三方面,本申请实施例提出一种数据存储装置,所述装置包括:处理器、存储器及通信总线;所述处理器执行存储器存储的运行程序时实现上述数据存储方法。
第四方面,本申请实施例提出一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述数据存储方法。
第五方面,本申请实施例提出一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现上述数据存储方法。
本申请实施例提供了一种数据存储方法及装置、存储介质、计算机程序产品,该方法包括:将待写入键值对中的第一值写入第一数据搁置日志文件中,生成第一值在第一数据搁置日志文件中的第一地址信息;将待写入键值对中的第一键与第一地址信息的第一键地址组合写入数据区的第一内存表中;并将第一地址信息和第一键的第一地址键组合写入反向索引区的第二内存表中;将第一内存表写入数据区的第一有效字符表文件中;并将第二内存表写入反向索引区的第二有效字符表文件中;将第一有效字符表文件加入数据区的第一日志结构合并树中;并将第二有效字符表文件加入反向索引区的第二日志结构合并树中。采用上述实现方案,将日志结构合并树拆分为数据区和反向索引区,写入数据时分别将键地址组合和地址键组合写入对应的区域,利用日志结构合并树的特性对反向索引进行管理,针对数据搁置日志文件的写操作对象只有键值对中的值,能够保持写DataPlog操作的原子性,进而提升业务性能。
附图说明
图1为一种键值对写入流程示意图;
图2为一种Value和反向索引一起写入DataPlog的示意图;
图3为一种垃圾回收方法的流程示意图;
图4为本申请实施例提供的一种数据存储方法的流程图一;
图5为本申请实施例提供的一种示例性的Value写入DataPlog的示意图;
图6为本申请实施例提供的一种示例性的数据写入方法的流程示意图;
图7为本申请实施例提供的一种示例性的数据持久化方法的流程示意图;
图8为本申请实施例提供的一种示例性的键值对写入流程示意图;
图9为本申请实施例提供的一种数据存储方法的流程图二;
图10为本申请实施例提供的一种示例性的压缩合并方法的流程示意图;
图11为本申请实施例提供的一种数据存储方法的流程图三;
图12为本申请实施例提供的一种示例性的垃圾回收的方法流程示意图;
图13为本申请实施例提供的一种数据存储装置的结构示意图一;
图14为本申请实施例提供的一种数据存储装置的结构示意图二。
具体实施方式
为了能够更加详尽地了解本申请实施例的特点与技术内容,下面结合附图对本申请实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本申请实施例。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。还需要指出,本申请实施例所涉及的术语“第一\第二\第三”仅是用于区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
在键值对分离的LSM-Tree中的垃圾回收(Garbage Collection,GC)的性能影响着整个***的性能与空间使用。目前的GC方案为将反向索引与数据同时记录在DataPlog中,整个键值对写入流程如图1所示。
1、将value和反向索引写入DataPlog中;
2、得到PlogPtr;
3、将key+PlogPtr写入内存的内存表(Memtable)中;
4、将Memtable持久化到磁盘的有效字符表文件(Sorted String Table,SSTable)中。
在将value和反向索引写入DataPlog中时,考虑到对DataPlog的输入输出(Input/Output,IO)次数与数据的对齐性,需要将反向索引先写入缓冲区后,再统一写入DataPlog中的反向索引区,而针对value则直接写入DataPlog中的数据区,上述操作将破坏数据与反向索引的写原子性。具体的参见图2。
1、将value写入DataPlog中;将反向索引写入缓冲区;
2、将缓冲区的反向索引写入DataPlog中。
由于数据块存在版本更新,使得同一key在LSM-Tree中包含多条记录,且分布在不同的SSTable中,所以GC过程遍历反向索引,需要扫描整个LSM-Tree来确认数据块是否有效,并去需要读取多个SSTable。具体的参见图3。
1、在DataPlog的数据区进行迭代遍历;
2、从DataPlog的反向索引区查找value对应的key;
3、从LSM-Tree中查询key的有效性;
4、若有效则写入新的DataPlog中;
5、根据新的DataPlog更新LSM-Tree。
上述方法存在以下问题:
1、反向索引与数据整合后写入DataPlog,破坏了数据块的原始结构,并需要4k或8k保证对齐。
2、写完数据后,再将反向索引写入DataPlog中,破坏了一个数据与反向索引的写原子性。
3、GC某个数据块时,需要通过反向扫描整个LSM-Tree来确认数据块是否还被引用,影响GC性能。
为解决上述问题,本申请实施例提供一种数据存储方法,如图4所示,该方法可以包括:
S101、将待写入键值对中的第一值写入第一数据搁置日志文件中,生成第一值在第一数据搁置日志文件中的第一地址信息。
本申请实施例提供的一种数据存储方法适用于日志文件***(即本申请提出的数据存储装置)对待写入键值对(KeyValue)进行存储的场景中。
在本申请实施例中,参见图5,第一DataPlog中只写入Value,而不再需要写入反向索引信息,使得信息完整而不再耦合其他信息;保证了写操作的原子性。
在本申请实施例中,在生成第一地址信息后,还得到第一键和第一地址信息的第一键地址组合(Key-PlogPtr)。
在本申请实施例中,PlogPtr包括DataPlogID和offset,其中offset为数据块的偏移量,表征该数据块是哪一个数据块。
进一步地,在S101和S102之间,还执行将第一键地址组合写入预写日志***(Wal,Write Ahead Logging)中,生成写入结果的过程。只有当写入结果为成功将第一键地址组合写入预写日志***中的情况下执行S102;当写入结果为写入失败时,直接退出此次数据存储过程。
S102、将待写入键值对中的第一键与第一地址信息的第一键地址组合写入数据区的第一内存表中;并将第一地址信息和第一键的第一地址键组合写入反向索引区的第二内存表中。
在本申请实施例中,数据存储装置包括内存,在内存中设置有内存数据区和内存反向索引区,内存数据区内包括一个或多个内存表,内存反向索引区内包括一个或多个内存表。将第一键地址组合写入其中数据区的第一内存表中,将第一地址键组合写入其中反向索引区的第二内存表中。写入完成后返回结果。
参见图6,为S101和S102的具体步骤实现,具体的:
1、Value写入DataPlog,得到PlogPtr;
2、生成Key-PlogPtr;
3、将Key-PlogPtr写入Wal中,生成写入结果;
4、若写入结果为写入成功,则将Key-PlogPtr写入数据区Memtable中;
5、将PlogPtr写入反向索引区Memtable中;
6、若写入结果为写入失败,则退出。
S103、将第一内存表写入数据区的第一有效字符表文件中;并将第二内存表写入反向索引区的第二有效字符表文件中。
在本申请实施例中,数据存储装置还包括磁盘,在磁盘中设置有磁盘数据区和磁盘反向索引区,磁盘数据区内包括由一组有效字符表文件组成的第一日志结构合并树,磁盘反向索引区内包括由一组有效字符表文件组成的第二日志结构合并树。
在本申请实施例中,数据区Memtable写入数据区的第一有效字符表文件中,反向索引区Memtable写入反向索引区的第二有效字符表文件中。
进一步地,若数据区第一Memtable写入数据区的第一有效字符表文件中失败,反向索引区第二Memtable写入反向索引区的第二有效字符表文件中失败,则直接结束流程。
S104、将第一有效字符表文件加入数据区的第一日志结构合并树中;并将第二有效字符表文件加入反向索引区的第二日志结构合并树中。
进一步地,若将第一有效字符表文件加入数据区的第一日志结构合并树中失败;并将第二有效字符表文件加入反向索引区的第二日志结构合并树中失败,则删除第一有效字符表文件和第二有效字符表文件后结束流程。
参见图7,为S103和S104的具体步骤实现,具体的:
1、数据区第一Memtable写入数据区的第一SSTable中;
2、若1写入成功,反向索引区第二Memtable写入反向索引区的第二SSTable中;
3、若2写入成功,则将第一SSTable写入反向索引区的第一LSM-Tree中;将第二SSTable写入反向索引区的第二LSM-Tree中;
4、若2写入失败,则将第一SSTable和第二SSTable丢弃。
可以理解的是,将日志结构合并树拆分为数据区和反向索引区,写入数据时分别将键地址组合和地址键组合写入对应的区域,利用日志结构合并树的特性对反向索引进行管理,针对数据搁置日志文件的写操作对象只有键值对中的值,能够保持写DataPlog操作的原子性。
基于上述实施例,本申请实施例提出一种键值对写入流程,参见图8,该流程包括:
1、写Value到DataPlog;
2、返回PlogPtr;
3、转化为key+PlogPtr组合;
4、将Key-PlogPtr组合写入内存中的数据区的Memtable中;
5、将PlogPtr-Key组合写入内存中的反向索引区的Memtable中;
6、将内存中的数据区的Memtable持久化到磁盘中的数据区的SSTable中;
7、将内存中的反向索引区的Memtable持久化到磁盘中的反向索引区的SSTable中。
上述键值对写入流程将Value写入DataPlog中,将反向索引依次写入内存和磁盘的反向索引区,保证了Value和反向索引信息的写原子性。进一步地,在S104之后,还可以执行压缩合并操作,压缩合并是一种合并和清理SSTable文件的过程,在LSM-Tree的某层SSTable的总数据量大于预设数据量阈值时,会跟磁盘上的下一层SSTable进行归并排序操作,两者合并生成的新文件会被顺序写入硬盘,取代旧版本的下一层SSTable,具体的,参见图9。
S201、在检测到第一日志结构合并树中的第N层有效字符表文件的总数据量大于预设数据量阈值的情况下,迭代遍历第N层有效字符表文件,得到对应的一组键地址组合;N为大于或者等于零的整数。
S202、分别检测一组键地址组合的有效性。
在本申请实施例中,在第一日志结构合并树中的第N层和第N+1层依次查找一组键地址组合;若查找到键相同的多个键地址组合,则从多个键地址组合中选择最新版本键对应的键地址组合有效,剩余键地址组合无效;若一组键地址组合中的一个或多个键地址组合的键在第N层和第N+1层唯一,则一个或多个键地址组合有效。
进一步地,在检测出一组键地址组合中的第三键地址组合无效的情况下,构建第三键地址组合对应的第二地址键组合;提交针对第二地址键组合的删除操作至第二日志结构合并树。
S203、在检测出一组键地址组合中的第二键地址组合有效的情况下,将第二键地址组合写入数据区的第一新有效字符表文件中。
S204、将数据区的第一新有效字符表文件合入第一日志结构合并树中。
基于上述实施例,提出一种压缩合并的方法,如图10所示,具体的方法包括:
1、迭代读取数据区第N层SSTable;
2、判断是否遍历结束;
3、若未遍历结束,则得到Key-PlogPtr;
4、判断Key-PlogPtr的有效性;
5、若其中的第二Key-PlogPtr有效,则写入到数据区的新SSTable中,并返回1;
6、若其中的第三Key-PlogPtr无效,则构建第三Key-PlogPtr对应的第二PlogPtr-Key,写入针对第二PlogPtr-Key的删除操作至反向索引区的新SSTable中,并返回1;
7、若遍历结束,则将数据区的新SSTable写入第一LSM-Tree。
进一步地,在S104之后,还可以执行GC的操作,其中,GC操作可以是一个定时任务。具体的,参见图11。
S301、在预设定时时间到达的情况下,查找垃圾数据量满足预设垃圾数据量阈值的第二数据搁置日志文件。
在一种可选的实施例中,设置用于记录各个DataPlog的垃圾数据量的存储区,在预设定时时间到达的情况下,从存储区中查找各个DataPlog的垃圾数据量,并跟预设垃圾数据量阈值进行比较。确定垃圾数据量满足预设垃圾数据量阈值的第二DataPlog。
S302、迭代遍历第二数据搁置日志文件,获取第二数据搁置日志文件中的一个或多个地址信息。
在本申请实施例中,迭代遍历第二DataPlog中的一个或多个PlogPtr作为key,查询反向索引区的第二LSM-Tree。
进一步地,如果未从第二LSM-Tree中查找到某一PlogPtr对应的PlogPtr-Key,则表征对应的数据块无效,此时直接丢弃该数据块。
S303、若从第二日志结构合并树中查找到一个或多个地址信息中的第二地址信息,则将第二地址信息对应的第二值写入新数据搁置日志文件中。
在本申请实施例中,如果从第二LSM-Tree中查找到第二PlogPtr对应的PlogPtr-Key,则表征对应的数据块有效,则将该数据块的第二Value写入新DataPlog中。
S304、将第二地址信息对应的第二键和第二地址信息的第四键地址组合写入数据区的第二新有效字符表文件中;并将第四键地址组合对应的第三地址键组合写入反向索引区的新有效字符表文件中。
S305、将数据区的第二新有效字符表文件加入第一日志结构合并树中;并将反向索引区的新有效字符表文件加入第二日志结构合并树中。
可以理解的是,由于将日志结构合并树拆分为数据区和反向索引区,可以在反向索引区对反向索引进行管理,在GC某个数据块时,针对于反向索引数据的读取和查找均可在反向索引区的第二日志结构合并树中实现,无需遍历数据搁置日志文件,加速了GC流程,减少性能损耗。
基于上述实施例,提出一种垃圾回收的方法,如图12所示,具体的方法包括:
1、迭代遍历垃圾数据量满足预设垃圾数据量阈值的第二DataPlog,获取一个或多个PlogPtr;
2、判断是否遍历结束;
3、若未遍历结束,则使用PlogPtr查询反向索引区的第二LSM-Tree;
4、若在第二LSM-Tree中查找到第二PlogPtr记录,则将第二PlogPtr对应的第二Value写入新的DataPlog,并得到第二Value对应的第二Key和第二PlogPtr的第四Key-PlogPtr组合;
5、将第四Key-PlogPtr组合写入数据区的新SSTable中;将第四Key-PlogPtr组合对应的第三PlogPtr-Key组合写入反向索引区的新SSTable中;并执行1;
6、若在第二LSM-Tree中未查找到第三PlogPtr记录,则丢弃第三PlogPtr对应的数据块;并执行1。
7、若遍历结束,则将数据区的新SSTable加入第一LSM-Tree中,将反向索引区的新SSTable加入第二LSM-Tree中。
本申请实施例提供一种数据存储装置1。如图13所示,该数据存储装置1包括:
写入单元10,用于将待写入键值对中的第一值写入第一数据搁置日志文件中,生成所述第一值在所述第一数据搁置日志文件中的第一地址信息;将所述待写入键值对中的第一键与所述第一地址信息的第一键地址组合写入数据区的第一内存表中;并将所述第一地址信息和所述第一键的第一地址键组合写入反向索引区的第二内存表中;将所述第一内存表写入数据区的第一有效字符表文件中;并将所述第二内存表写入反向索引区的第二有效字符表文件中;将所述第一有效字符表文件加入数据区的第一日志结构合并树中;并将所述第二有效字符表文件加入反向索引区的第二日志结构合并树中。
可选的,所述数据存储装置1包括内存和磁盘,在内存中设置有内存数据区和内存反向索引区,所述内存数据区内包括一个或多个内存表,所述内存反向索引区内包括一个或多个内存表;在磁盘中设置有磁盘数据区和磁盘反向索引区,所述磁盘数据区内包括由一组有效字符表文件组成的所述第一日志结构合并树,所述磁盘反向索引区内包括由一组有效字符表文件组成的所述第二日志结构合并树。
可选的,所述数据存储装置包括:遍历单元和检测单元;
所述遍历单元,用于在检测到所述第一日志结构合并树中的第N层有效字符表文件的总数据量大于预设数据量阈值的情况下,迭代遍历所述第N层有效字符表文件,得到对应的一组键地址组合;N为大于或者等于零的整数;
所述检测单元,用于分别检测所述一组键地址组合的有效性;
所述写入单元10,还用于在检测出所述一组键地址组合中的第二键地址组合有效的情况下,将所述第二键地址组合写入数据区的第一新有效字符表文件中;将数据区的第一新有效字符表文件合入所述第一日志结构合并树中。
可选的,所述数据存储装置包括:构建单元和删除单元;
所述构建单元,用于在检测出所述一组键地址组合中的第三键地址组合无效的情况下,构建所述第三键地址组合对应的第二地址键组合;
所述删除单元,用于提交针对所述第二地址键组合的删除操作至所述第二日志结构合并树。
可选的,所述数据存储装置包括:查找单元和选择单元;
所述查找单元,用于在所述第一日志结构合并树中的第N层和第N+1层依次查找所述一组键地址组合;
所述选择单元,用于若查找到键相同的多个键地址组合,则从所述多个键地址组合中选择最新版本键对应的键地址组合有效,剩余键地址组合无效;若所述一组键地址组合中的一个或多个键地址组合的键在所述第N层和所述第N+1层唯一,则所述一个或多个键地址组合有效。
可选的,所述查找单元,还用于在预设定时时间到达的情况下,查找垃圾数据量满足预设垃圾数据量阈值的第二数据搁置日志文件;
所述遍历单元,还用于迭代遍历所述第二数据搁置日志文件,获取所述第二数据搁置日志文件中的一个或多个地址信息;
所述写入单元10,还用于若从所述第二日志结构合并树中查找到所述一个或多个地址信息中的第二地址信息,则将所述第二地址信息对应的第二值写入新数据搁置日志文件中;将所述第二地址信息对应的第二键和所述第二地址信息的第四键地址组合写入数据区的第二新有效字符表文件中;并将所述第四键地址组合对应的第三地址键组合写入反向索引区的新有效字符表文件中;将数据区的第二新有效字符表文件加入所述第一日志结构合并树中;并将反向索引区的新有效字符表文件加入所述第二日志结构合并树中。
可选的,所述写入单元10,还用于将所述第一键地址组合写入预写日志***中,生成写入结果;在所述写入结果为成功将所述第一键地址组合写入预写日志***中的情况下,将所述待写入键值对中的第一键与所述第一地址信息的第一键地址组合写入数据区的第一内存表中;并将所述第一地址信息和所述第一键的第一地址键组合写入反向索引区的第二内存表中。
本申请实施例提供的一种数据存储装置,将待写入键值对中的第一值写入第一数据搁置日志文件中,生成第一值在第一数据搁置日志文件中的第一地址信息;将待写入键值对中的第一键与第一地址信息的第一键地址组合写入数据区的第一内存表中;并将第一地址信息和第一键的第一地址键组合写入反向索引区的第二内存表中;将第一内存表写入数据区的第一有效字符表文件中;并将第二内存表写入反向索引区的第二有效字符表文件中;将第一有效字符表文件加入数据区的第一日志结构合并树中;并将第二有效字符表文件加入反向索引区的第二日志结构合并树中。由此可见,本实施例提出的数据存储装置,将日志结构合并树拆分为数据区和反向索引区,写入数据时分别将键地址组合和地址键组合写入对应的区域,利用日志结构合并树的特性对反向索引进行管理,针对数据搁置日志文件的写操作对象只有键值对中的值,能够保持写DataPlog操作的原子性,提升业务性能。
图14为本申请实施例提供的一种数据存储装置1的组成结构示意图二,在实际应用中,基于上述实施例的同一公开构思下,如图14所示,本实施例的数据存储装置1包括:处理器11、存储器12及通信总线13。
在具体的实施例的过程中,上述处理器11可以为特定用途集成电路(ASIC,Application Specific Integrated Circuit)、数字信号处理器(DSP,Digital SignalProcessor)、数字信号处理图像处理装置(DSPD,Digital Signal Processing Device)、可编程逻辑图像处理装置(PLD,Programmable Logic Device)、现场可编程门阵列(FPGA,Field Programmable Gate Array)、CPU、控制器、微控制器、微处理器中的至少一种。可以理解地,对于不同的设备,用于实现上述处理器功能的电子器件还可以为其它,本实施例不作具体限定。
在本申请实施例中,上述通信总线13用于实现处理器11和存储器12之间的连接通信;上述处理器11执行存储器12中存储的运行程序时实现如下的数据存储方法:
将待写入键值对中的第一值写入第一数据搁置日志文件中,生成所述第一值在所述第一数据搁置日志文件中的第一地址信息;将所述待写入键值对中的第一键与所述第一地址信息的第一键地址组合写入数据区的第一内存表中;并将所述第一地址信息和所述第一键的第一地址键组合写入反向索引区的第二内存表中;将所述第一内存表写入数据区的第一有效字符表文件中;并将所述第二内存表写入反向索引区的第二有效字符表文件中;将所述第一有效字符表文件加入数据区的第一日志结构合并树中;并将所述第二有效字符表文件加入反向索引区的第二日志结构合并树中。
进一步地,所述数据存储装置包括内存和磁盘,在内存中设置有内存数据区和内存反向索引区,所述内存数据区内包括一个或多个内存表,所述内存反向索引区内包括一个或多个内存表;在磁盘中设置有磁盘数据区和磁盘反向索引区,所述磁盘数据区内包括由一组有效字符表文件组成的所述第一日志结构合并树,所述磁盘反向索引区内包括由一组有效字符表文件组成的所述第二日志结构合并树。
进一步地,上述处理器11,还用于在检测到所述第一日志结构合并树中的第N层有效字符表文件的总数据量大于预设数据量阈值的情况下,迭代遍历所述第N层有效字符表文件,得到对应的一组键地址组合;N为大于或者等于零的整数;分别检测所述一组键地址组合的有效性;在检测出所述一组键地址组合中的第二键地址组合有效的情况下,将所述第二键地址组合写入数据区的第一新有效字符表文件中;将数据区的第一新有效字符表文件合入所述第一日志结构合并树中。
进一步地,上述处理器11,还用于在检测出所述一组键地址组合中的第三键地址组合无效的情况下,构建所述第三键地址组合对应的第二地址键组合;提交针对所述第二地址键组合的删除操作至所述第二日志结构合并树。
进一步地,上述处理器11,还用于在所述第一日志结构合并树中的第N层和第N+1层依次查找所述一组键地址组合;若查找到键相同的多个键地址组合,则从所述多个键地址组合中选择最新版本键对应的键地址组合有效,剩余键地址组合无效;若所述一组键地址组合中的一个或多个键地址组合的键在所述第N层和所述第N+1层唯一,则所述一个或多个键地址组合有效。
进一步地,上述处理器11,还用于在预设定时时间到达的情况下,查找垃圾数据量满足预设垃圾数据量阈值的第二数据搁置日志文件;迭代遍历所述第二数据搁置日志文件,获取所述第二数据搁置日志文件中的一个或多个地址信息;若从所述第二日志结构合并树中查找到所述一个或多个地址信息中的第二地址信息,则将所述第二地址信息对应的第二值写入新数据搁置日志文件中;将所述第二地址信息对应的第二键和所述第二地址信息的第四键地址组合写入数据区的第二新有效字符表文件中;并将所述第四键地址组合对应的第三地址键组合写入反向索引区的新有效字符表文件中;将数据区的第二新有效字符表文件加入所述第一日志结构合并树中;并将反向索引区的新有效字符表文件加入所述第二日志结构合并树中。
进一步地,上述处理器11,还用于将所述第一键地址组合写入预写日志***中,生成写入结果;在所述写入结果为成功将所述第一键地址组合写入预写日志***中的情况下,将所述待写入键值对中的第一键与所述第一地址信息的第一键地址组合写入数据区的第一内存表中;并将所述第一地址信息和所述第一键的第一地址键组合写入反向索引区的第二内存表中。
本申请实施例提供一种存储介质,其上存储有计算机程序,上述计算机可读存储介质存储有一个或者多个程序,上述一个或者多个程序可被一个或者多个处理器执行,应用于数据存储装置中,该计算机程序实现如上述的数据存储方法。
基于上述实施例,本申请实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序可被一个或者多个处理器执行,该计算机程序实现如上述的数据存储方法。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本公开的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如磁碟、光盘)中,包括若干指令用以使得一台图像显示设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本公开各个实施例所述的方法。
以上所述,仅为本申请的较佳实施例而已,并非用于限定本申请保护范围。
Claims (11)
1.一种数据存储方法,其特征在于,所述方法包括:
将待写入键值对中的第一值写入第一数据搁置日志文件中,生成所述第一值在所述第一数据搁置日志文件中的第一地址信息;
将所述待写入键值对中的第一键与所述第一地址信息的第一键地址组合写入数据区的第一内存表中;并将所述第一地址信息和所述第一键的第一地址键组合写入反向索引区的第二内存表中;
将所述第一内存表写入数据区的第一有效字符表文件中;并将所述第二内存表写入反向索引区的第二有效字符表文件中;
将所述第一有效字符表文件加入数据区的第一日志结构合并树中;并将所述第二有效字符表文件加入反向索引区的第二日志结构合并树中。
2.根据权利要求1所述的方法,其特征在于,在内存中设置有内存数据区和内存反向索引区,所述内存数据区内包括一个或多个内存表,所述内存反向索引区内包括一个或多个内存表;在磁盘中设置有磁盘数据区和磁盘反向索引区,所述磁盘数据区内包括由一组有效字符表文件组成的所述第一日志结构合并树,所述磁盘反向索引区内包括由一组有效字符表文件组成的所述第二日志结构合并树。
3.根据权利要求1所述的方法,其特征在于,所述将所述第一有效字符表文件加入数据区的第一日志结构合并树中;并将所述第二有效字符表文件加入反向索引区的第二日志结构合并树中之后,所述方法还包括:
在检测到所述第一日志结构合并树中的第N层有效字符表文件的总数据量大于预设数据量阈值的情况下,迭代遍历所述第N层有效字符表文件,得到对应的一组键地址组合;N为大于或者等于零的整数;
分别检测所述一组键地址组合的有效性;
在检测出所述一组键地址组合中的第二键地址组合有效的情况下,将所述第二键地址组合写入数据区的第一新有效字符表文件中;
将数据区的第一新有效字符表文件合入所述第一日志结构合并树中。
4.根据权利要求3所述的方法,其特征在于,所述分别检测所述一组键地址组合的有效性之后,所述方法还包括:
在检测出所述一组键地址组合中的第三键地址组合无效的情况下,构建所述第三键地址组合对应的第二地址键组合;
提交针对所述第二地址键组合的删除操作至所述第二日志结构合并树。
5.根据权利要求3所述的方法,其特征在于,所述分别检测所述一组键地址组合的有效性,包括:
在所述第一日志结构合并树中的第N层和第N+1层依次查找所述一组键地址组合;
若查找到键相同的多个键地址组合,则从所述多个键地址组合中选择最新版本键对应的键地址组合有效,剩余键地址组合无效;
若所述一组键地址组合中的一个或多个键地址组合的键在所述第N层和所述第N+1层唯一,则所述一个或多个键地址组合有效。
6.根据权利要求1所述的方法,其特征在于,所述将所述第一有效字符表文件加入数据区的第一日志结构合并树中;并将所述第二有效字符表文件加入反向索引区的第二日志结构合并树中之后,所述方法还包括:
在预设定时时间到达的情况下,查找垃圾数据量满足预设垃圾数据量阈值的第二数据搁置日志文件;
迭代遍历所述第二数据搁置日志文件,获取所述第二数据搁置日志文件中的一个或多个地址信息;
若从所述第二日志结构合并树中查找到所述一个或多个地址信息中的第二地址信息,则将所述第二地址信息对应的第二值写入新数据搁置日志文件中;
将所述第二地址信息对应的第二键和所述第二地址信息的第四键地址组合写入数据区的第二新有效字符表文件中;并将所述第四键地址组合对应的第三地址键组合写入反向索引区的新有效字符表文件中;
将数据区的第二新有效字符表文件加入所述第一日志结构合并树中;并将反向索引区的新有效字符表文件加入所述第二日志结构合并树中。
7.根据权利要求1所述的方法,其特征在于,所述将待写入键值对中的第一值写入第一数据搁置日志文件中,生成所述第一值在所述第一数据搁置日志文件中的第一地址信息之后;所述将所述待写入键值对中的第一键与所述第一地址信息的第一键地址组合写入数据区的第一内存表中;并将所述第一地址信息和所述第一键的第一地址键组合写入反向索引区的第二内存表中之前,所述方法还包括:
将所述第一键地址组合写入预写日志***中,生成写入结果;
所述将所述待写入键值对中的第一键与所述第一地址信息的第一键地址组合写入数据区的第一内存表中;并将所述第一地址信息和所述第一键的第一地址键组合写入反向索引区的第二内存表中,包括:
在所述写入结果为成功将所述第一键地址组合写入预写日志***中的情况下,将所述待写入键值对中的第一键与所述第一地址信息的第一键地址组合写入数据区的第一内存表中;并将所述第一地址信息和所述第一键的第一地址键组合写入反向索引区的第二内存表中。
8.一种数据存储装置,其特征在于,所述装置包括:
写入单元,用于将待写入键值对中的第一值写入第一数据搁置日志文件中,生成所述第一值在所述第一数据搁置日志文件中的第一地址信息;将所述待写入键值对中的第一键与所述第一地址信息的第一键地址组合写入数据区的第一内存表中;并将所述第一地址信息和所述第一键的第一地址键组合写入反向索引区的第二内存表中;将所述第一内存表写入数据区的第一有效字符表文件中;并将所述第二内存表写入反向索引区的第二有效字符表文件中;将所述第一有效字符表文件加入数据区的第一日志结构合并树中;并将所述第二有效字符表文件加入反向索引区的第二日志结构合并树中。
9.一种数据存储装置,其特征在于,所述装置包括:处理器、存储器及通信总线;所述处理器执行存储器存储的运行程序时实现如权利要求1-7任一项所述的方法。
10.一种存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1-7任一项所述的方法。
11.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序在被处理器执行时实现如权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410459825.3A CN118069069B (zh) | 2024-04-17 | 2024-04-17 | 一种数据存储方法及装置、存储介质、计算机程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410459825.3A CN118069069B (zh) | 2024-04-17 | 2024-04-17 | 一种数据存储方法及装置、存储介质、计算机程序产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN118069069A true CN118069069A (zh) | 2024-05-24 |
CN118069069B CN118069069B (zh) | 2024-06-21 |
Family
ID=91104368
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410459825.3A Active CN118069069B (zh) | 2024-04-17 | 2024-04-17 | 一种数据存储方法及装置、存储介质、计算机程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118069069B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170364414A1 (en) * | 2016-06-17 | 2017-12-21 | Acronis International Gmbh | System and method for data deduplication using log-structured merge trees |
CN109213432A (zh) * | 2017-07-04 | 2019-01-15 | 华为技术有限公司 | 利用日志结构合并树将数据写入的存储设备及其方法 |
CN111886591A (zh) * | 2019-09-12 | 2020-11-03 | 创新先进技术有限公司 | 日志结构存储*** |
CN114817994A (zh) * | 2022-05-13 | 2022-07-29 | 支付宝(杭州)信息技术有限公司 | 日志结构的安全数据存储方法及装置 |
US20220335027A1 (en) * | 2021-04-20 | 2022-10-20 | Netapp Inc. | Key-value store and file system integration |
-
2024
- 2024-04-17 CN CN202410459825.3A patent/CN118069069B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170364414A1 (en) * | 2016-06-17 | 2017-12-21 | Acronis International Gmbh | System and method for data deduplication using log-structured merge trees |
CN109213432A (zh) * | 2017-07-04 | 2019-01-15 | 华为技术有限公司 | 利用日志结构合并树将数据写入的存储设备及其方法 |
CN111886591A (zh) * | 2019-09-12 | 2020-11-03 | 创新先进技术有限公司 | 日志结构存储*** |
US20220335027A1 (en) * | 2021-04-20 | 2022-10-20 | Netapp Inc. | Key-value store and file system integration |
CN114817994A (zh) * | 2022-05-13 | 2022-07-29 | 支付宝(杭州)信息技术有限公司 | 日志结构的安全数据存储方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN118069069B (zh) | 2024-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Dayan et al. | Dostoevsky: Better space-time trade-offs for LSM-tree based key-value stores via adaptive removal of superfluous merging | |
Sarkar et al. | Lethe: A tunable delete-aware LSM engine | |
US10067958B2 (en) | Supporting transient snapshot with coordinated/uncoordinated commit protocol | |
JP4866495B2 (ja) | データベースシステムにおいて結合質問を実行する方法及び装置 | |
US8527556B2 (en) | Systems and methods to update a content store associated with a search index | |
CN102629247B (zh) | 一种数据处理方法、装置和*** | |
US11074242B2 (en) | Bulk data insertion in analytical databases | |
CN109697016B (zh) | 用于改进容器的存储性能的方法和装置 | |
US11567681B2 (en) | Method and system for synchronizing requests related to key-value storage having different portions | |
EP2562657B1 (en) | Management of update transactions and crash recovery for columnar database | |
US10678784B2 (en) | Dynamic column synopsis for analytical databases | |
US20230195710A1 (en) | Database Index Performance Improvement | |
Sarkar et al. | Dissecting, designing, and optimizing LSM-based data stores | |
KR101806394B1 (ko) | 모바일 dbms환경에서 트랜잭션에 특화된 색인 캐시의 구조를 갖는 데이터 처리 방법 | |
CN113392089B (zh) | 一种数据库索引优化方法及可读存储介质 | |
CN118069069B (zh) | 一种数据存储方法及装置、存储介质、计算机程序产品 | |
KR20130136730A (ko) | 비정형 로그 압축 저장 및 조회 방법 및 장치 | |
WO2015015559A1 (ja) | 検索システムおよび検索方法 | |
KR102233880B1 (ko) | 싱글-레벨 기반의 데이터 저장 장치 및 방법 | |
US10871945B2 (en) | Resumable merge sort | |
Sarkar et al. | Enabling Timely and Persistent Deletion in LSM-Engines | |
CN115878563B (zh) | 一种分布式文件***目录级快照的实现方法及电子设备 | |
US12032484B1 (en) | Adjusting leaf pointers with reduced cache usage | |
US11762868B2 (en) | Metadata management for a transactional storage system | |
CN112486404B (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 |