本技术实施例涉及计算机,尤其涉及一种数据存储方法、装置、设备及存储介质。
背景技术:
1、随着企业数字化转型的需要,海量数据的实时处理技术受到关注,基于flink的流批一体技术逐渐成为主流,其中,实时计算和高效存储是两个重要的技术模块,现有技术在不断完善flink自身的实时计算框架以外,也在大力拓展流批一体的数据存储技术用于实现与实时计算模块的高效交互。高效存储需要至少满足以下两个特性:第一个特性是省内存且可高效维护,第二个特性是能支撑混合场景,既能满足高效扫描能力用来做olap场景,也能满足高效检索能力用来做随机查询场景。
2、为了满足olap场景下的顺序扫描和随机查询需求,相关技术下在内存中存放两份数据,第一份是存放原始数据用来做顺序扫描,第二份是存储有序数组用来满足随机查询需求。
3、然而,上述技术方案使得内存中保存的数据膨胀2倍,从而导致数据冗余以及存储资源浪费。
技术实现思路
1、本技术实施例提供了一种数据存储方法、装置、设备及存储介质,用于解决数据冗余以及存储资源浪费的问题。
2、第一方面,本技术实施例提供了一种数据存储方法,包括:
3、针对原始数据中的每个数据单元,将所述数据单元中的多个数据元素插入第一数组中;
4、将所述第一数组中的多个数据元素,按照升序或降序插入虚拟存储空间;
5、基于所述虚拟存储空间中的多个数据元素各自在所述第一数组中的位置,构建所述多个数据元素对应的间接索引数据。
6、本技术实施例中,通过将原始数据中的多个数据元素插入第一数组,再将第一数组中的多个数据元素按照升序或降序插入虚拟存储空间,再基于虚拟存储空间中的多个数据元素各自在第一数组中的位置构建间接索引数据,即本技术实际存储的数据为原始数据以及相应的间接索引数据,而不是存储原始数据以及将原始数据排序后的排序数据,从而减少了数据冗余,有效节省了存储空间,大大减少了存储资源浪费。
7、一种可选实施方式中,所述将所述数据单元中的多个数据元素插入第一数组中之前,还包括:对所述数据单元中的数据元素去重。
8、本技术实施例对数据单元中的数据元素去重后插入到第一数组中,第一数组不需要重复记录相同的数据元素,从而减少了第一数组的空间占用,进而节省了存储空间。
9、一种可选实施方式中,所述基于所述虚拟存储空间中的多个数据元素各自在所述数据单元中的位置,构建所述多个数据元素对应的间接索引数据,包括:将所述多个数据元素各自在所述第一数组中对应的数组下标,插入第二数组,获得所述多个数据元素对应的间接索引数据。
10、一种可选实施方式中,所述第二数组对应一个数据位图,所述数据位图用于标识所述第二数组中各个数组下标对应的数据元素是否被删除。
11、本技术实施例通过构建数据位图来标识第一数组中各个数据元素是否被删除,故在数据库数据更新后,不需要对数据索引进行重建,提高了数据查询效率。
12、一种可选实施方式中,接收针对目标数据元素的删除指令;基于所述删除指令,将所述目标数据元素在所述数据位图中对应的标识值设置为1。
13、一种可选实施方式中,接收针对目标数据元素的查询指令;基于所述查询指令,通过所述间接索引数据从所述第一数组中确定所述目标数据元素;若所述目标数据元素在所述数据位图中对应的标识值为0,则返回所述目标数据元素;若所述目标数据元素在所述数据位图中对应的标识值为1,则返回查询失败消息。
14、一种可选实施方式中,所述查询指令的类型包括:等值查询和范围查询。
15、一种可选实施方式中,所述基于所述查询指令,通过所述间接索引数据从所述第一数组中确定所述目标数据元素,包括:基于所述查询指令,对所述第二数组进行二分查找操作,并基于从所述第二数组查找获得的数组下标,对所述第一数组进行间接寻址,以从所述第一数组中确定所述目标数据元素。
16、本技术实施例中,相较于传统的二分算法来说,本技术不是对第二数组直接作二分操作,而是通过第二数组中的数组下标对第一数组中的原始数据做二分操作,每一次取值多了一次间接寻址,仅仅多了一个常数级别开销,时间复杂度为o(logn),大大提高了数据查询效率。
17、一种可选实施方式中,所述基于所述虚拟存储空间中的多个数据元素各自在所述第一数组中的位置,构建所述多个数据元素对应的间接索引数据之后,还包括,通过顺序扫描算子顺序扫描所述第一数组,以加载所述第一数组中的各个数据元素。
18、第二方面,本技术实施例提供了一种数据存储装置,包括:
19、数据插入模块,用于针对原始数据中的每个数据单元,将所述数据单元中的多个数据元素插入第一数组中;将所述第一数组中的多个数据元素,按照升序或降序插入虚拟存储空间;
20、索引构建模块,用于基于所述虚拟存储空间中的多个数据元素各自在所述数据单元中的位置,构建相应的间接索引数据。
21、一种可选实施方式中,所述数据插入模块还用于:
22、将所述数据单元中的多个数据元素插入第一数组中之前,对所述数据单元中的数据元素去重。
23、一种可选实施方式中,所述数据插入模块还用于:
24、将所述多个数据元素各自在所述第一数组中对应的数组下标,插入第二数组,获得所述多个数据元素对应的间接索引数据。
25、一种可选实施方式中,所述第二数组对应一个数据位图,所述数据位图用于标识所述第二数组中各个数组下标对应的数据元素是否被删除。
26、一种可选实施方式中,还包括更新模块;
27、所述更新模块具体用于:
28、接收针对目标数据元素的删除指令;
29、基于所述删除指令,将所述目标数据元素在所述数据位图中对应的标识值设置为1。
30、一种可选实施方式中,还包括查询模块;
31、所述查询模块具体用于:
32、接收针对目标数据元素的查询指令;
33、基于所述查询指令,通过所述间接索引数据从所述第一数组中确定所述目标数据元素;
34、若所述目标数据元素在所述数据位图中对应的标识值为0,则返回所述目标数据元素;
35、若所述目标数据元素在所述数据位图中对应的标识值为1,则返回查询失败消息。
36、一种可选实施方式中,所述查询模块具体用于:
37、基于所述查询指令,对所述第二数组进行二分查找操作,并基于从所述第二数组查找获得的数组下标,对所述第一数组进行间接寻址,以从所述第一数组中确定所述目标数据元素。
38、一种可选实施方式中,所述查询指令的类型包括:等值查询和范围查询。
39、一种可选实施方式中,所述索引构建模块还用于:
40、所述基于所述虚拟存储空间中的多个数据元素各自在所述第一数组中的位置,构建所述多个数据元素对应的间接索引数据之后,通过顺序扫描算子顺序扫描所述第一数组,以加载所述第一数组中的各个数据元素。
41、第三方面,本技术实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述数据存储方法的步骤。
42、第四方面,本技术实施例提供了一种计算机可读存储介质,其存储有可由计算机设备执行的计算机程序,当所述程序在计算机设备上运行时,使得所述计算机设备执行上述数据存储方法的步骤。