本技术涉及数据处理,尤其是涉及到一种数据存储方法及装置、存储介质、计算机设备。
背景技术:
1、随着计算机和网络技术的飞速发展,互联网每天产生的数据量正呈现爆发增长的态势,如何存储不断产生的海量数据,如何提高存储器利用效率,正成为存储系统设计者的一大难题。
2、自两位以色列研究者j.ziv和a.lempel在1977年提出了lz77压缩算法以来,各种基于字典匹配的lz压缩算法的变体相继被提出,其中包括lz78、lzw、lzo、lzss等。大部分基于lz77的变体被广泛用于文本和位图的无损压缩,其压缩编码的效率可以很大程度上逼近信源的信息熵值。然而大部分lz算法及其变体的压缩和解压缩的平均速度仅200~600mbps已经不能适应现代计算机设备中动辄1gbps以上的总线带宽。于是提出了一种压缩解压缩速度远高于目前无损压缩解压缩算法的lz变体算法——lz4。
3、lz4压缩算法的速度优势在于其建立字典的过程中,减少了计算散列值和更新散列表单元的次数,并且,在输出编码方面采用直接编码的方式,减小了算法输出过程中的延迟。但正是由于lz4压缩算法降低散列表更新次数以提高压缩速度的做法,导致lz4压缩算法的压缩率会比其他基于lz变体的压缩算法要差一些。
4、如何在不降低压缩速度的情况下提升数据压缩比,成为了业界关注的问题。
技术实现思路
1、有鉴于此,本技术提供了一种数据存储方法及装置、存储介质、计算机设备,有助于提升数据向磁盘的写入速度,以及提升数据压缩速度和压缩比。
2、根据本技术的一个方面,提供了一种数据存储方法,所述方法包括:
3、获取待存储数据,将所述待存储数据按照lsm-tree(log structured mergetree,日志结构的合并树)数据结构写入至内存中进行存储;
4、当所述内存中lsm-tree数据结构的待存储数据满足磁盘写入条件时,通过归并排序的方式将所述内存中存储的数据存储至磁盘中;
5、利用lz4压缩算法,对所述磁盘中的待存储数据进行数据压缩。
6、可选地,所述lsm-tree数据结构包括一层数据存储层和至少一层数据块存储层;所述将所述待存储数据按照lsm-tree数据结构写入至内存中进行存储,包括:
7、向所述内存写入所述待存储数据时,将所述待存储数据写入所述内存中lsm-tree数据结构的数据存储层中;
8、判断所述数据存储层是否满足数据合并条件;
9、若所述数据存储层中存储的数据满足所述数据合并条件,则对所述数据存储层中存储的数据进行合并,将合并结果存储于第一层数据块存储层,并删除所述数据存储层中存储的数据;
10、若所述数据存储层中存储的数据不满足所述数据合并条件,则继续将下一条待存储数据写入所述内存中lsm-tree数据结构的数据存储层中。
11、可选地,所述将合并结果存储于第一层数据块存储层之后,所述方法还包括:
12、判断所述第一层数据块存储层是否满足第一数据块合并条件;
13、若所述第一层数据块存储层满足第一数据块合并条件,则对所述第一层数据块存储层中存储的数据进行合并,将合并结果存储于第二层数据块存储层中,删除所述第一层数据块存储层中存储的数据,并继续判断所述第二层数据块存储层是否满足第二数据块合并条件,直到任一层数据块存储层不满足对应的数据块合并条件或者最后一层数据块存储层中存储的数据达到预设数据量为止;
14、若所述第一层数据块存储层不满足第一数据块合并条件,则继续将下一条待存储数据写入所述内存中lsm-tree数据结构的数据存储层中。
15、可选地,所述数据合并条件包括数据量阈值;所述数据块存储层包括多层,第n层数据块存储层对应的第n数据块合并条件为第n数据块阈值,所述磁盘写入条件为最后一层数据块存储层对应的数据块合并条件;
16、所述判断所述数据存储层是否满足数据合并条件,包括:
17、判断所述数据存储层中的数据是否达到所述数据量阈值;
18、所述当所述内存中lsm-tree数据结构的待存储数据满足磁盘写入条件时,通过归并排序的方式将所述内存中存储的数据存储至磁盘中,包括:
19、当所述内存中lsm-tree数据结构的最后一层数据块存储层中存储的数据达到最后一层数据块存储层对应的预设数据量时,通过归并排序的方式将所述内存中存储的数据存储至磁盘中。
20、可选地,所述利用lz4压缩算法,对所述磁盘中的待存储数据进行数据压缩,包括:
21、当所述磁盘中写入的数据达到预设数据量时,利用lz4压缩算法,对所述磁盘中写入的数据进行数据压缩。
22、可选地,所述获取待存储数据,包括:
23、获取计算引擎在计算过程中产生的临时表文件;
24、将所述临时表文件进行逐列解析,获得多条待存储数据;
25、相应地,所述将所述待存储数据按照lsm-tree数据结构写入至内存中进行存储,包括:
26、逐条将所述待存储数据按照lsm-tree数据结构写入至内存中进行存储。
27、根据本技术的另一方面,提供了一种数据存储装置,所述装置包括:
28、数据获取模块,用于获取待存储数据;
29、第一存储模块,用于将所述待存储数据按照lsm-tree数据结构写入至内存中进行存储;
30、第二存储模块,用于当所述内存中lsm-tree数据结构的待存储数据满足磁盘写入条件时,通过归并排序的方式将所述内存中存储的数据存储至磁盘中;
31、数据压缩模块,用于利用lz4压缩算法,对所述磁盘中的待存储数据进行数据压缩。
32、可选地,所述lsm-tree数据结构包括一层数据存储层和至少一层数据块存储层;所述第一存储模块,还用于:
33、向所述内存写入所述待存储数据时,将所述待存储数据写入所述内存中lsm-tree数据结构的数据存储层中;
34、判断所述数据存储层是否满足数据合并条件;
35、若所述数据存储层中存储的数据满足所述数据合并条件,则对所述数据存储层中存储的数据进行合并,将合并结果存储于第一层数据块存储层,并删除所述数据存储层中存储的数据;
36、若所述数据存储层中存储的数据不满足所述数据合并条件,则继续将下一条待存储数据写入所述内存中lsm-tree数据结构的数据存储层中。
37、可选地,所述第一存储模块,还用于:
38、所述将合并结果存储于第一层数据块存储层之后,判断所述第一层数据块存储层是否满足第一数据块合并条件;
39、若所述第一层数据块存储层满足第一数据块合并条件,则对所述第一层数据块存储层中存储的数据进行合并,将合并结果存储于第二层数据块存储层中,删除所述第一层数据块存储层中存储的数据,并继续判断所述第二层数据块存储层是否满足第二数据块合并条件,直到任一层数据块存储层不满足对应的数据块合并条件或者最后一层数据块存储层中存储的数据达到预设数据量为止;
40、若所述第一层数据块存储层不满足第一数据块合并条件,则继续将下一条待存储数据写入所述内存中lsm-tree数据结构的数据存储层中。
41、可选地,所述数据合并条件包括数据量阈值;所述数据块存储层包括多层,第n层数据块存储层对应的第n数据块合并条件为第n数据块阈值,所述磁盘写入条件为最后一层数据块存储层对应的数据块合并条件;
42、所述第一存储模块,还用于:判断所述数据存储层中的数据是否达到所述数据量阈值;
43、所述第二存储模块,还用于:当所述内存中lsm-tree数据结构的最后一层数据块存储层中存储的数据达到最后一层数据块存储层对应的预设数据量时,通过归并排序的方式将所述内存中存储的数据存储至磁盘中。
44、可选地,所述数据压缩模块,还用于:
45、当所述磁盘中写入的数据达到预设数据量时,利用lz4压缩算法,对所述磁盘中写入的数据进行数据压缩。
46、可选地,所述数据获取模块,还用于:
47、获取计算引擎在计算过程中产生的临时表文件;
48、将所述临时表文件进行逐列解析,获得多条待存储数据;
49、相应地,所述第一存储模块,还用于:
50、逐条将所述待存储数据按照lsm-tree数据结构写入至内存中进行存储。
51、依据本技术又一个方面,提供了一种存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述数据存储方法。
52、依据本技术再一个方面,提供了一种计算机设备,包括存储介质、处理器及存储在存储介质上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述数据存储方法。
53、借由上述技术方案,本技术提供的一种数据存储方法及装置、存储介质、计算机设备,针对待存储数据,先按照lsm-tree数据结构将数据写入内存中进行存储,直到内存中存的数据满足磁盘写入条件时,通过归并排序的方式将内存中存储的数据写入磁盘中,最后利用lz4压缩算法对磁盘中的数据进行数据压缩。本技术实施例先基于lsm-tree数据结构在内存中对数据进行高性能的排序,再将内存中排序后的数据写入磁盘中,使得数据以一定顺序写入到磁盘中,提升数据写入速度,最后对磁盘中排序后的数据进行lz4压缩,不仅提升了压缩速度,而且具有极高的压缩比。
54、上述说明仅是本技术技术方案的概述,为了能够更清楚了解本技术的技术手段,而可依照说明书的内容予以实施,并且为了让本技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本技术的具体实施方式。