本申请涉及数据查询,特别是涉及一种基于数据湖的数据读写方法、数据读写装置以及计算机存储介质。
背景技术:
1、数据湖在现代大数据存储体系中扮演着重要角色。它可以存储海量的任意类型的数据,包括结构化、半结构化和非结构化数据。这些数据从不同的数据源,通过数据湖源源不断地存储到dfs(distributed file system,分布式文件系统)中。hudi作为一种数据湖存储系统,为dfs带来了数据快速摄取与删除地能力。
2、然而,目前的索引信息只能存储在基础文件中,在表格式为mor表时,对于一条新增的记录,不能将这条记录追加到日志文件中,而是要重写整个基础文件,存在更高的io开销和写放大的缺点,会使得数据摄取速度变慢,同时会产生更多的文件占用更多的存储空间。
技术实现思路
1、本申请提供一种基于数据湖的数据读写方法、数据读写装置以及计算机存储介质。
2、本申请采用的一个技术方案是提供一种基于数据湖的数据读写方法,所述数据读写方法包括:
3、获取记录数据,并获取所述记录数据的主键;
4、读取所述数据湖中所有文件组的基础文件的第一主键列表;
5、判断所述记录数据的主键是否存在于任意一个基础文件的第一主键列表中;
6、若否,读取所述数据湖中所有文件组的日志文件的第二主键列表;
7、判断所述记录数据的主键是否存在于任意一个日志文件的第二主键列表;
8、若是,将所述记录数据写入对应存在所述记录数据的主键的第二主键列表的日志文件。
9、其中,所述数据读写方法,还包括:
10、在所述记录数据的主键存在于任意一个基础文件的第一主键列表中时,将所述记录数据写入对应基础文件所在文件组的日志文件;
11、或者,在所述记录数据的主键不存在于任意一个基础文件的第一主键列表中,且不存在于任意一个日志文件的第二主键列表中时,将所述记录数据写入所述数据湖中基础文件最小的文件组的日志文件。
12、其中,所述判断所述记录数据的主键是否存在于任意一个日志文件的第二主键列表,包括:
13、获取每一日志文件的主键值范围;
14、基于所述记录数据的主键的数值获取符合主键数值条件的第一日志文件,其中,所述主键数值条件为所述记录数据的主键的数值在所述第一日志文件的主键值范围内;
15、判断所述记录数据的主键是否存在于任意一个第一日志文件的第二主键列表。
16、其中,所述判断所述记录数据的主键是否存在于任意一个第一日志文件的第二主键列表,包括:
17、获取每一第一日志文件的预设的布隆过滤器;
18、基于所述记录数据的主键获取符合过滤条件的第二日志文件,其中,所述过滤条件为所述记录数据的主键在所述第二日志文件中布隆过滤器的输出为可能存在;
19、判断所述记录数据的主键是否存在于任意一个第二日志文件的第二主键列表。
20、其中,所述将所述记录数据写入对应存在所述记录数据的主键的第二主键列表的日志文件,包括:
21、在对应存在所述记录数据的主键的第二主键列表的日志文件的末尾写入当前数据块,用于存储所述记录数据;
22、根据所述记录数据的主键设置所述当前数据块的页脚信息,其中,所述页脚信息包括布隆过滤器和当前日志文件的主键列表。
23、其中,所述根据所述记录数据的主键设置所述当前数据块的页脚信息,包括:
24、获取在所述当前日志文件中当前数据块的上一个数据块的页脚信息;
25、利用所述当前数据块的主键更新所述上一个数据块的页脚信息中的主键列表,以生成所述当前数据块的页脚信息。
26、其中,所述利用所述当前数据块的主键更新所述上一个数据块的页脚信息中的主键列表,以生成所述当前数据块的页脚信息,包括:
27、获取上一个数据块的页脚信息;
28、在所述上一个数据块的页脚信息不存在或为空时,获取当前日志文件的所有数据块,并提取所述所有数据块的主键;
29、根据所述所有数据块的主键和所述当前数据块的主键生成所述当前日志的主键列表,并根据所述当前日志的主键列表生成布隆过滤器;
30、按照所述当前日志的主键列表和布隆过滤器生成所述当前数据块的页脚信息。
31、其中,所述数据读写方法,还包括:
32、按照预设周期将所述所有文件组的日志文件的记录数据压缩到所属的基础文件。
33、本申请采用的另一个技术方案是提供一种数据读写装置,所述数据读写装置包括存储器以及与所述存储器耦接的处理器;
34、其中,所述存储器用于存储程序数据,所述处理器用于执行所述程序数据以实现如上述的数据读写方法。
35、本申请采用的另一个技术方案是提供一种计算机存储介质,所述计算机存储介质用于存储程序数据,所述程序数据在被计算机执行时,用以实现如上述的数据读写方法。
36、本申请的有益效果是:数据读写装置获取记录数据,并获取记录数据的主键;读取数据湖中所有文件组的基础文件的第一主键列表;判断记录数据的主键是否存在于任意一个基础文件的第一主键列表中;若否,读取数据湖中所有文件组的日志文件的第二主键列表;判断记录数据的主键是否存在于任意一个日志文件的第二主键列表;若是,将记录数据写入对应存在记录数据的主键的第二主键列表的日志文件。本申请的数据读写方法能够通过更改日志文件格式,赋予了日志文件中记录的主键可被索引的能力,使得新增记录时无需重写基础文件,降低数据摄取时存储空间的占用,新增记录支持写入日志文件,减少数据摄取时io开销,加速数据湖在摄取新数据时的摄取速度。
1.一种基于数据湖的数据读写方法,其特征在于,所述数据读写方法包括:
2.根据权利要求1所述的数据读写方法,其特征在于,
3.根据权利要求1所述的数据读写方法,其特征在于,
4.根据权利要求3所述的数据读写方法,其特征在于,
5.根据权利要求1所述的数据读写方法,其特征在于,
6.根据权利要求5所述的数据读写方法,其特征在于,
7.根据权利要求6所述的数据读写方法,其特征在于,
8.根据权利要求1所述的数据读写方法,其特征在于,
9.一种数据读写装置,其特征在于,所述数据读写装置包括存储器以及与所述存储器耦接的处理器;
10.一种计算机存储介质,其特征在于,所述计算机存储介质用于存储程序数据,所述程序数据在被计算机执行时,用以实现如权利要求1至8任一项所述的数据读写方法。