本技术涉及数据存储,特别是涉及一种数据存储方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术:
::1、随着数据存储技术的发展,人们对数据存储的需求越来越多,进而,对于数据存储的读写要求也越来越高。2、目前,传统的数据存储方法,通常会选择lsm-tree数据存储结构或者btree数据存储结构进行数据存储,其中,lsm-tree(log structured merge tree,日志结构化合并树)主要是利用磁盘的顺序写性能,将批量的随机写转换为一次性顺序写。btree数据存储结构主要是将数据以有序的方式存储在磁盘块中,从而实现数据的查找、插入和删除。3、然而,lsm-tree数据存储结构以及btree数据存储结构均存在写入放大的问题,较大的写入放大可能会导致较高的磁盘写入负载,消耗更多的磁盘资源,降低存储系统的写入性能。技术实现思路1、基于此,有必要针对上述技术问题,提供一种数据存储方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。2、第一方面,本技术提供了一种数据存储方法,所述方法应用于数据存储设备,所述数据存储设备中包含日志结构化合并树lsm树和btree的混合数据存储结构,所述方法包括:3、在数据写入过程中,当所述lsm树的最后一层数据分级中的数据满足预设数据下沉条件时,在所述最后一层数据分级中选取目标数据集;4、在所述btree的第一数据层的数据节点中确定目标子节点集,并基于所述目标子节点集对应的逻辑键范围分割所述目标数据集,得到多个数据块;5、若所述多个数据块中存在目标数据块小于预设阈值,则将所述目标数据块回退至所述lsm树的最后一层数据分级,并将除所述目标数据块之外的其他数据块写入所述目标子节点集。6、本实施例中,lsm树和btree的混合数据存储结构,借助lsm树的写优势以及btree的读优势,保证数据的读写性能,并在数据写入过程中通过设置目标数据块回退机制,避免目标数据块较小带来的大量写放大问题,降低磁盘消耗,进而,提高数据存储的写入性能。7、在其中一个实施例中,所述当所述lsm树的最后一层数据分级中的数据满足预设数据下沉条件时,在所述最后一层数据分级中选取目标数据集之前,所述方法还包括:8、获取待存储数据,并将所述待存储数据写入所述lsm树的内存表中;9、当所述内存表中的数据写满时,将已写满的所述内存表转换成不可变内存表,并生成新的内存表;10、将所述不可变内存表固化到所述lsm树的第一层数据分级中,形成所述第一层数据分级中的有序字符串表sstable,直至所述第一层数据分级中的所述sstable满足预设数据下沉条件时,将所述第一层数据分级中的数据下沉至下一层数据分级。11、本实施例中,将数据写入到混合数据存储结构的lsm树部分,并预先设置数据下沉条件,当lsm树的数据分级中的数据满足该数据下沉条件时,则将数据分级中的数据下沉至下一层数据分级,实现了数据的一次性有序写入。12、在其中一个实施例中,所述lsm树的每一数据分级中包含sstable,所述当所述lsm树的最后一层数据分级中的数据满足预设数据下沉条件时,在所述最后一层数据分级中选取目标数据集,包括:13、当所述lsm树的最后一层数据分级中,各所述sstable的总数据量达到第一预设阈值,或者,所述sstable的数目达到第二预设阈值时,在所述最后一层数据分级中,按照各所述sstable对应的键范围从小到大的顺序,选取预设数目个sstable,构建目标数据集。14、本实施例中,通过设置数据量以及sstable数目两种不同维度的数据下沉条件,实现在满足数据量要求或者满足数据分级中sstable的数量要求的情况下,均可以实现数据下沉,提高了数据下沉存储的灵活性,进而,提高了数据存储性能。15、在其中一个实施例中,所述在所述btree的第一数据层的数据节点中确定目标子节点集,并基于所述目标子节点集对应的逻辑键范围分割所述目标数据集,得到多个数据块,包括:16、基于所述目标数据集中数据的键范围并集,在所述btree的第一数据层的数据节点中筛选与所述键范围并集存在交集的目标子节点,得到目标子节点集;17、基于所述目标子节点集中每个目标子节点的逻辑键范围分割所述目标数据集,得到多个数据块。18、本实施例中,在btree的第一数据层的数据节点中确定目标子节点集,进而,基于目标子节点集中每个目标子节点的逻辑键范围分割目标数据集,得到多个数据块,这样,实现了基于分区键值的并行数据下沉存储。19、在其中一个实施例中,所述基于所述目标子节点集中每个目标子节点的逻辑键范围分割所述目标数据集,得到多个数据块之前,所述方法还包括:20、若所述目标子节点集为空集,则将所述目标数据集平分为多个sstable,并将多个所述sstable插入所述btree的第一数据层。21、本实施例中,当btree的第一数据层中,不存在与目标数据集中数据的键范围并集存在交集的目标子节点时,采用将目标数据集中的sstable插入btree的第一数据层的方式进行数据下沉,保证了数据的有序性存储以及提高了数据存储的性能。22、在其中一个实施例中,所述目标子节点集中每一目标子节点支持多个尺寸的sstable,所述将除所述目标数据块之外的其他数据块写入所述目标子节点集,包括:23、针对除所述目标数据块之外的每一其他数据块,基于所述其他数据块对应的键范围,在所述目标子节点集中确定与所述其他数据块对应的目标子节点;24、基于预设的尺寸筛选规则,在与所述其他数据块对应的所述目标子节点中选取目标尺寸的sstable;25、将所述其他数据块与所述目标尺寸的sstable进行合并处理,得到新的sstable。26、本实施例中,在数据写入过程中,btree的数据层中的目标子节点支持多个尺寸的sstable,使得在每次数据下沉时,可以选择合适尺寸(目标尺寸)的sstable进行数据合并,降低写放大问题,降低磁盘消耗,进而,提高数据存储的写入性能。27、在其中一个实施例中,所述方法还包括:28、当所述btree的目标数据层中的数据满足所述预设数据下沉条件时,在所述目标数据层的数据节点中确定源数据子节点;所述目标数据层为所述btree中的除最底层之外的任意数据层;29、在所述目标数据层的下一数据层的数据节点中,确定目的子节点集,并基于所述目的子节点集对应的逻辑键范围分割所述源数据子节点中的数据,得到多个数据块;30、若所述多个数据块中存在目标数据块小于所述预设阈值,则将所述目标数据块回退至所述btree的目标数据层,并将除所述目标数据块之外的其他数据块写入所述目的子节点集。31、本实施例中,在数据写入过程中,通过设置目标数据块回退机制,避免目标数据块较小带来的大量写放大问题,btree的数据层中的目的子节点支持多个尺寸的sstable,使得在每次数据下沉时,可以选择合适尺寸(目标尺寸)的sstable进行数据合并,降低磁盘消耗,进而,提高数据存储的写入性能。32、第二方面,本技术还提供了一种数据存储装置,所述装置应用于数据存储设备,所述数据存储设备中包含日志结构化合并树lsm树和btree的混合数据存储结构,所述装置包括:33、选取模块,用于在数据写入过程中,当所述lsm树的最后一层数据分级中的数据满足预设数据下沉条件时,在所述最后一层数据分级中选取目标数据集;34、处理模块,用于在所述btree的第一数据层的数据节点中确定目标子节点集,并基于所述目标子节点集对应的逻辑键范围分割所述目标数据集,得到多个数据块;35、写入模块,用于若所述多个数据块中存在目标数据块小于预设阈值,则将所述目标数据块回退至所述lsm树的最后一层数据分级,并将除所述目标数据块之外的其他数据块写入所述目标子节点集。36、第三方面,本技术还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:37、在数据写入过程中,当所述lsm树的最后一层数据分级中的数据满足预设数据下沉条件时,在所述最后一层数据分级中选取目标数据集;38、在所述btree的第一数据层的数据节点中确定目标子节点集,并基于所述目标子节点集对应的逻辑键范围分割所述目标数据集,得到多个数据块;39、若所述多个数据块中存在目标数据块小于预设阈值,则将所述目标数据块回退至所述lsm树的最后一层数据分级,并将除所述目标数据块之外的其他数据块写入所述目标子节点集。40、第四方面,本技术还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:41、在数据写入过程中,当所述lsm树的最后一层数据分级中的数据满足预设数据下沉条件时,在所述最后一层数据分级中选取目标数据集;42、在所述btree的第一数据层的数据节点中确定目标子节点集,并基于所述目标子节点集对应的逻辑键范围分割所述目标数据集,得到多个数据块;43、若所述多个数据块中存在目标数据块小于预设阈值,则将所述目标数据块回退至所述lsm树的最后一层数据分级,并将除所述目标数据块之外的其他数据块写入所述目标子节点集。44、第五方面,本技术还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:45、在数据写入过程中,当所述lsm树的最后一层数据分级中的数据满足预设数据下沉条件时,在所述最后一层数据分级中选取目标数据集;46、在所述btree的第一数据层的数据节点中确定目标子节点集,并基于所述目标子节点集对应的逻辑键范围分割所述目标数据集,得到多个数据块;47、若所述多个数据块中存在目标数据块小于预设阈值,则将所述目标数据块回退至所述lsm树的最后一层数据分级,并将除所述目标数据块之外的其他数据块写入所述目标子节点集。48、上述数据存储方法、装置、计算机设备、存储介质和计算机程序产品,在数据写入过程中,当所述lsm树的最后一层数据分级中的数据满足预设数据下沉条件时,在所述最后一层数据分级中选取目标数据集;在所述btree的第一数据层的数据节点中确定目标子节点集,并基于所述目标子节点集对应的逻辑键范围分割所述目标数据集,得到多个数据块;若所述多个数据块中存在目标数据块小于预设阈值,则将所述目标数据块回退至所述lsm树的最后一层数据分级,并将除所述目标数据块之外的其他数据块写入所述目标子节点集。采用本方法,通过lsm树和btree的混合数据存储结构,保证数据的读写性能,并通过数据块回退机制,避免较小数据块带来的大量写放大问题,降低磁盘消耗,进而,提高数据存储的写入性能。当前第1页12当前第1页12