CN112148691B - 数据存储方法和数据存储引擎 - Google Patents

数据存储方法和数据存储引擎 Download PDF

Info

Publication number
CN112148691B
CN112148691B CN201910566893.9A CN201910566893A CN112148691B CN 112148691 B CN112148691 B CN 112148691B CN 201910566893 A CN201910566893 A CN 201910566893A CN 112148691 B CN112148691 B CN 112148691B
Authority
CN
China
Prior art keywords
storage
format
data
hierarchy
level
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.)
Active
Application number
CN201910566893.9A
Other languages
English (en)
Other versions
CN112148691A (zh
Inventor
金世超
郭聪
陈全照
朱叶峰
王文夫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to CN201910566893.9A priority Critical patent/CN112148691B/zh
Publication of CN112148691A publication Critical patent/CN112148691A/zh
Application granted granted Critical
Publication of CN112148691B publication Critical patent/CN112148691B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/14Details of searching files based on file metadata
    • G06F16/148File search processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/185Hierarchical storage management [HSM] systems, e.g. file migration or policies thereof

Abstract

本公开的实施例提供了一种数据存储方法和数据存储引擎,所述方法包括:将待存储数据存储至易变表中,所述易变表位于RAM中;若所述易变表的存储量大于或等于预设存储量阈值,则将所述易变表修改为非易变表,并停止接收待存储数据的存储;若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为列格式,则将所述最低层级的数据按照列格式存储至所述下一层级;若所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级。可以在磁盘中按照行格式存储新数据,按照列格式存储老数据,从而在进行范围查询时,将以列格式存储的目标数据返回,有助于提高查询效率。

Description

数据存储方法和数据存储引擎
技术领域
本公开的实施例涉及数据库技术领域,尤其涉及一种数据存储方法和数据存储引擎。
背景技术
数据库管理系统作为存储数据的手段,其支持对数据的存储、查询、删除、更新等操作。数据库管理系统中的最底层的组件数据存储引擎用于将数据存储至各种存储设备中。LSM(Log-Structured Merge,日志结构合并)树广泛应用于数据存储引擎中,例如,LevelDB、RocksDB和WiredTiger等一系列基于LSM树的数据存储引擎。以RocksDB为例说明LSM树的存储过程,RocksDB存在RAM(Random Access Memory,随机存取存储器)和磁盘两部分存储,但RocksDB的RAM存在两个以上跳表,其中一个为易变表,其余均为非易变表,新的数据写入至易变表中,当易变表的容量达到一定阈值时,创建新的易变表,并将原易变表作为非易变表,以将非易变表中的数据写入磁盘。磁盘中划分为多个层级,每个层级对应一个或多个用于存储数据的SST(Sorted String Table,有序字符串文件)文件,其中,从RAM中的数据写入低层级,从而低层级的数据相比高层级的数据为更新的数据,一个或多个低层级的各SST文件之间可以包含相同的关键值,其余每个层级的各SST文件之间不包含相同的关键值。
发明人在对LSM树进行研究的过程中发现,LSM的磁盘中存储的SST文件均以行格式存储,即对于多条数据,将每条数据包含的所有属性值存储完之后,继续存储下一条数据。而这样的存储方式导致针对一个属性进行统计时,采用范围查询的效率较低。
发明内容
本公开的实施例提供一种数据存储方法和数据存储引擎,可以解决磁盘以行存储数据导致范围查询的效率较低的问题。
根据本公开的实施例的第一方面,提供了一种数据存储方法,所述方法包括:
将待存储数据存储至易变表中,所述易变表位于RAM中;
若所述易变表的存储量大于或等于预设存储量阈值,则将所述易变表修改为非易变表,并停止接收待存储数据的存储;
若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为列格式,则将所述最低层级的数据按照列格式存储至所述下一层级;
若所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级。
根据本公开的实施例的第二方面,提供了一种数据存储引擎,所述数据存储引擎包括:
第一存储模块,用于将待存储数据存储至易变表中,所述易变表位于RAM中;
易变表修改模块,用于若所述易变表的存储量大于或等于预设存储量阈值,则将所述易变表修改为非易变表,并停止接收待存储数据的存储;
第二存储模块,用于若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为列格式,则将所述最低层级的数据按照列格式存储至所述下一层级;
第三存储模块,用于若所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级。
根据本公开的实施例的第三方面,提供了一种电子设备,包括:
处理器、存储器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现前述数据存储方法。
根据本公开的实施例的第四方面,提供了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行前述数据存储方法。
本公开的实施例提供了一种数据存储方法和数据存储引擎,所述方法包括:将待存储数据存储至易变表中,所述易变表位于RAM中;若所述易变表的存储量大于或等于预设存储量阈值,则将所述易变表修改为非易变表,并停止接收待存储数据的存储;若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为列格式,则将所述最低层级的数据按照列格式存储至所述下一层级;若所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级。可以在磁盘中按照行格式存储新数据,按照列格式存储老数据,从而在进行范围查询时,将以列格式存储的目标数据返回,有助于提高查询效率。
附图说明
为了更清楚地说明本公开的实施例的技术方案,下面将对本公开的实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的实施例的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1示出了本公开的一种实施例中的数据存储方法的步骤流程图;
图2(A、B、C、D、E)分别为本发明实施例中的多种数据存储方式示意图;
图3(A、B)分别为本发明实施例中的多种磁盘存储状态示意图;
图4示出了本公开的另一种实施例中的数据存储方法的步骤流程图;
图5示出了本公开的一种实施例中的数据存储引擎的结构图;
图6示出了本公开的另一种实施例中的数据存储引擎的结构图;
图7示出了本公开的一种实施例中的电子设备的结构图。
具体实施方式
下面将结合本公开的实施例中的附图,对本公开的实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开的实施例一部分实施例,而不是全部的实施例。基于本公开的实施例中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开的实施例保护的范围。
实施例一
参照图1,其示出了本公开的一种实施例中的数据存储方法的步骤流程图,具体如下。
本发明实施例应用于基于LSM树的数据存储引擎,本发明以RocksDB的实现为例进行说明,但本发明的应用不限于RocksDB、LevelDB、WiredTiger等一系列基于LSM树的数据引擎。
数据存储引擎用于对RAM和磁盘中的数据进行管理,包括:存储、删除、更新等操作,所述RAM包括易变表和非易变表,在本发明实施例中,磁盘中被划分为多个层级,其中一部分层级以行格式存储数据,另一部分层级以列格式存储数据。在后面的说明书中,可以将以行格式存储数据的部分层级称为第一类层级,将以列格式存储数据的另一部分层级称为第二类层级。如图3(A)或3(B)所示,最低层级L0为第一类层级,下一层级L1、下下一层级L2均为第二类层级。
可以理解,在实际应用中,第一类层级或第二类层级的数目可以为0,即:当第一类层级的数目为0时,代表磁盘中所有SST文件均以列格式存储;当第二类层级的数目为0时,代表磁盘中所有SST文件均以行格式存储。
步骤101,将待存储数据存储至易变表中,所述易变表位于RAM中。
当一个新的待存储数据到达时,将其首先存储至RAM中的易变表中。
可以理解,易变表为接收待存储数据的数据表。
步骤102,若所述易变表的存储量大于或等于预设存储量阈值,则将所述易变表修改为非易变表,并停止接收待存储数据的存储。
其中,预设存储量阈值可以根据实际应用场景设定,本发明实施例对其不进行限制。例如,若需要将易变表的大小设置为500MB,那么当易变表的存储量大于或等于500MB时,该易变表不再接收待存储数据。
可以理解,非易变表也在RAM中,并且可能会有多个,取决于参数的设定。
在本发明实施例中,若所述易边表的存储量大于或等于预设存储量阈值,该表停止接收待存储数据的存储,同时生成新的易边表以接收新的带存储数据;若所述易变表的存储量小于预设存储量阈值,则继续接收待存储数据的存储。
步骤103,若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为列格式,则将所述最低层级的数据按照列格式存储至所述下一层级。
其中,层级存储量阈值可以以SST文件的数目表示,也可以以字节数表示。层级存储量阈值可以根据实际应用场景设定,本发明实施例对其不加以限制。
具体地,按照列格式存储可以为同一属性的所有取值连续存储,例如,对于存在员工编号、姓名、年龄、工资四种属性的数据,存在如下4个员工的数据:{id1,name1,age1,sal1},{id2,name2,age2,sal2},{id3,name3,age3,sal3},{id4,name4,age4,sal4},采用列存储的结果可以为:首先将姓名连续存储,例如,name1、name2、name3、name4连续存储;然后将年龄连续存储,例如,age1、age2、age3、age4连续存储;最后将工资连续存储,例如,sal1、sal2、sal3、sal4连续存储。
在本发明实施例中,可以将每个属性作为一个单独的SST文件存储,例如,如图2(A)所示的SST1,将id1与name1、id2与name2、id3与name3、id4与name4按照顺序连续存储至SST1中,如图2(B)所示的SST2,将id1与age1、id2与age2、id3与age3、id4与age4按照顺序连续存储至SST2中,如图2(C)所示的SST3,将id1与sal1、id2与sal2、id3与sal3、id4与sal4按照顺序连续存储至SST3中。
当然,还可以将两个或多个属性的取值存储至同一SST文件中,例如,如图2(D)所示的SST4,可以将上述id1与name1、age1,id2与name2、age2,id3与name3、age3,id4与name4、age4按照顺序存储至一个SST4中,并且,如图2(C)将id1与sal1、id2与sal2、id3与sal3、id4与sal4按照顺序连续存储至一个SST3文件中。
可以理解,极限情况下,若将所有属性存储至同一个SST文件中,则为本质上为行存储。
在本发明实施例中,第二类层级通常存储历史数据,而这些历史数据通常用于进行数据统计,即会对第二类层级单个或几个属性进行范围查询,而本发明采用列存储的第二类层级可以有助于提高范围查询的查询效率。
步骤104,若所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级。
由于非易变表中的数据也按照行格式存储,从而不需要对非易变表中的数据进行格式转换,经过序列化之后存储至最低层级。
具体地,按照行格式存储可以为同一条记录的所有属性连续存储,例如,对于存在员工编号、姓名、年龄、工资四种属性的数据,存在如下4个员工的数据:{id1,name1,age1,sal1},{id2,name2,age2,sal2},{id3,name3,age3,sal3},{id4,name4,age4,sal4},采用行存储的结果可以为:如图2(E)所示,首先将员工编号为id1的员工记录的所有属性连续存储,即将name1、age1、sal1连续存储;然后将员工编号为id2的员工记录的所有属性连续存储,即将name2、age2、sal2连续存储;最后将员工编号为id3的员工记录的所有属性连续存储,即将name3、age3、sal3连续存储。
在本发明实施例中,相对于第二类层级,第一类层级通常存储新数据,而这些新数据通常用于进行点查询,从而本发明采用行存储的第一类层级可以有助于提高点查询的查询效率。
在实际应用中,第一类层级和第二类层级的划分可以根据历史数据统计规律或者深度学习确定。比如用历史访问记录,可以统计各层级中点查询和范围查询的访问频率,以及范围查询和点查询的单次查询开销(例如,每次查询对应的时间开销),以将点查询的访问频率和点查询的单次查询开销的乘积作为点查询的综合开销,将范围查询的访问频率和范围查询的单次查询开销的乘积作为范围查询的综合开销,从而将点查询的综合开销较低的层级设置为第一类层级,将范围查询的综合开销较低的层级设置为第二类层级。
此外,还可以动态修改每个层级中每个SST文件的存储格式,以使得同一层级中同时存在行格式的SST文件和列格式的SST文件。例如,在历史时间段内针对一个行格式的SST文件的访问记录中,若范围查询的综合开销较低,则将该行格式的SST文件转换为列格式的SST文件;若点查询和范围查询的综合开销相当,则针对该行格式的SST文件再额外生成一个列格式的SST文件,使得同一份数据存在两种格式的SST文件,点查询访问行格式的SST文件,范围查询访问列格式的SST文件。
又例如,在历史时间段内针对一个列格式的SST文件的访问记录中,若点查询的综合开销较低,则将该列格式的SST文件转换为行格式的SST文件;若点查询和范围查询的综合开销相当,则针对该列格式的SST文件再额外生成一个行格式的SST文件,使得同一份数据存在两种格式的SST文件,点查询访问行格式的SST文件,范围查询访问列格式的SST文件。
综上所述,本公开的实施例提供了一种数据存储方法,所述方法包括:将待存储数据存储至易变表中,所述易变表位于RAM中;若所述易变表的存储量大于或等于预设存储量阈值,则将所述易变表修改为非易变表,并停止接收待存储数据的存储;若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为列格式,则将所述最低层级的数据按照列格式存储至所述下一层级;若所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级。可以在磁盘中按照行格式存储新数据,按照列格式存储老数据,从而在进行范围查询时,将以列格式存储的目标数据返回,有助于提高查询效率。
实施例二
参照图4,其示出了在本公开的另一种实施例中的数据存储方法的具体步骤流程图,具体如下。
步骤201,将待存储数据存储至易变表中,所述易变表位于RAM中。
该步骤可以参照步骤101的详细说明,在此不再赘述。
步骤202,若所述易变表的存储量大于或等于预设存储量阈值,则将所述易变表修改为非易变表,并停止接收待存储数据的存储。
该步骤可以参照步骤102的详细说明,在此不再赘述。
步骤203,创建新的易变表,并将待存储数据存储至所述新的易变表中。
具体地,可以在每次存储结束之后,判断易变表的存储量是否大于或等于预设存储量阈值,若易变表的存储量大于或等于预设存储量阈值,则创建新的易变表,从而新的待存储数据直接存储至新的易变表中;也可以在每次存储之前,判断易变表的存储量是否大于或等于预设存储量阈值,若易变表的存储量大于或等于预设存储量阈值,则创建新的易变表,从而将本次的待存储数据直接存储至新的易变表中。
步骤204,若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为列格式,则从所述最低层级的每个数据中提取每个属性的取值。
具体地,首先从行存储的SST文件中提取一条数据记录,将该数据记录中每个属性的取值作为该属性的第一个取值,然后提取第二条数据记录,并以相同的方式得到每个属性的第二个取值,以此类推,得到行存储的SST文件中所有数据记录的所有属性的所有取值,最后,将每个属性的所有取值存储至该属性对应的列存储SST文件中,或,将多个属性的取值与对应的关键值作为键值对,按照关键值的顺序写入同一个SST文件中。
其中,每个数据对应一条行格式存储的记录。例如,如图2(E)所示,name1、age1、sal1为行存储的一个数据,从而提取每个属性的取值即为:根据分隔符从行存储的SST文件中读取相邻两个分隔符之间的数据,然后提取每个属性的取值。
可以理解,磁盘中最低层级的存储量大于或等于预设层级存储量阈值,代表此时磁盘中最低层级无法接收SST文件的存储,从而需要将最低层级的部分SST文件存储至层级更高的下一层级。若此时,层级更高的下一层级的存储格式为列格式,则需要将行格式转换为列格式。
步骤205,针对每个属性,将所述属性的取值存储至所述属性在所述下一层级中对应的属性存储文件。
可以理解,该属性存储文件为列存储的SST文件。
步骤206,若所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级。
该步骤可以参照步骤104的详细说明,在此不再赘述。
步骤207,若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为行格式,则将所述最低层级的数据存储至所述下一层级。
在本发明实施例中,当最低层级的存储量达到预设层级存储量阈值时,需要将最低层级的数据存储至下一层级,从而使得最低层级可以接收非易变表的数据。由于最低层级的存储格式为行格式,若此时下一层级的存储格式仍为行格式,则不需要进行格式转换,直接将行格式的SST文件直接存储至下一层级。具体地,需要将行格式的SST文件根据键值合并至下一层级中与其键值重叠的SST文件中,若不存在与其键值重叠的SST文件,则直接将该行格式的SST文件作为一个新的SST文件存储至下一层级。
步骤208,若磁盘中其中一个存储格式为行格式的层级的存储量大于或等于预设层级存储量阈值,且所述层级的下一层级的存储格式为列格式,则将所述存储格式为行格式的层级中的数据以列格式存储至所述下一层级。
在本发明实施例中,在生成新的非易变表之后,需要将非易变表存储至最低层级,此时,需要检测最低层级是否达到预设层级存储量阈值;此外,还可以周期性的检测各层级的存储量是否达到预设层级存储量阈值。在检测到其中一个层级的存储量达到预设层级存储量阈值时,可以将存储格式为行格式的层级中的数据合并至存储格式为列格式的下一层级,从而需要将存储格式从行格式转换为列格式。
步骤209,若磁盘中其中一个存储格式为行格式的层级的存储量大于或等于预设层级存储量阈值,且所述层级的下一层级的存储格式为行格式,则将所述行格式存储的层级的数据存储至所述下一层级。
在检测到其中一个层级的存储量达到预设层级存储量阈值时,可以将存储格式为行格式的层级中的数据直接合并至存储格式为行格式的下一层级,且不需要进行格式转换。
步骤210,若磁盘中其中一个存储格式为列格式的层级的存储量大于或等于预设层级存储量阈值,且所述层级的下一层级的存储格式为列格式,则将所述列格式存储的层级的数据存储至所述下一层级。
在检测到其中一个层级的存储量达到预设层级存储量阈值时,可以将存储格式为列格式的层级中的数据直接合并至存储格式为列格式的下一层级,且不需要进行格式转换。如图3(B)所示,L1和L2均为列格式,L2为L1的下一层级,此时,若L1的存储量达到预设层级存储量阈值,则直接将L1层中最老的SST存储至L2层中,而并不需要进行格式转换。具体地,需要将L1层中最老的SST根据键值合并至L2层中与其键值重叠的SST文件中,若不存在与其键值重叠的SST文件,则直接将该L1层中最老的SST文件作为一个新的SST文件存储至L2。
可以理解,在检测过程中,存在以下极限情况:每个层级的存储量均达到预设层级存储量阈值,此时,需要将每个层级的数据均向下一层级合并之后,使得最低层级可以接收非易变表。若层级存储量阈值为3个SST文件,如图3(A)所示的3层L0、L1层均已达到存储量阈值,则从而需要将L1的文件合并至L2中,将L0的文件存储至L1中。具体地,可以将L1中的SST文件按照键值存储至L2层中的SST文件中,例如,若L1中的SST文件的键值范围为A至H,L2中的SST文件分为键值从A至G,H至M,N至Z三个SST文件,从而可以将键值范围为A至H的SST文件合并至键值范围为A至G、H至M的两个SST文件中。
需要说明的是,最高层级的存储量是不受限制的,如图3(A)所示,当最大层级数目为3,则最高层级L2的存储量是不受限制的。
在本发明实施例中,还存在如下状态:部分层级的存储量已达到层级存储量阈值,如图3(B)所示,若最大层级数目为4,但最高层级L3并未存储数据,且L2层也并未达到层级存储量阈值3,此时,可以不需要将L2中的SST文件存储至L3中,仅需要将L1中的SST文件存储至L2中,然后,将L0中的SST文件存储至L1中,最后将非易变表存储至L0中。
步骤211,若最低层级的存储量小于预设层级存储量阈值,且所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级。
可以理解,当最低层级的存储量小于预设层级存储量阈值时,代表最低层级还可以继续存储数据,从而可以将非易变表中的数据存储至最低层级。
在本发明实施例中,最低层级的存储格式设置为行格式,从而需要将非易变表按照行格式存储至最低层级;当然,最低层级还可以为列格式,此时,需要将非易变表以列格式存储至最低层级。
综上所述,本公开的实施例提供了一种数据存储方法,所述数据存储方法在实施例一的基础上,还可以周期性检测各层级中的存储量,并将各层级中的数据存储至下一层级,最终存储至存储量不受限制的最高层级,可以预先对层级数据进行管理,使得低层级空出存储空间,提高非易变表的存储速度,还可以根据层级之间的格式是否相同,进行格式转换或不转换,实现了灵活的层级间数据存储。
实施例三
参照图5,其示出了在本公开的一种实施例中的数据存储引擎的结构图,所述数据存储引擎包括:
第一存储模块301,用于将待存储数据存储至易变表中,所述易变表位于RAM中。
易变表修改模块302,用于若所述易变表的存储量大于或等于预设存储量阈值,则将所述易变表修改为非易变表,并停止接收待存储数据的存储。
第二存储模块303,用于若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为列格式,则将所述最低层级的数据按照列格式存储至所述下一层级。
第三存储模块304,用于若所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级。
综上所述,本公开的实施例提供了一种数据存储引擎,所述数据存储引擎包括:将待存储数据存储至易变表中,所述易变表位于RAM中;若所述易变表的存储量大于或等于预设存储量阈值,则将所述易变表修改为非易变表,并停止接收待存储数据的存储;若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为列格式,则将所述最低层级的数据按照列格式存储至所述下一层级;若所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级。可以在磁盘中按照行格式存储新数据,按照列格式存储老数据,从而在进行范围查询时,将以列格式存储的目标数据返回,有助于提高查询效率。
实施例三为实施例一对应的装置实施例,详细说明可以参照实施例一,在此不再赘述。
实施例四
参照图6,其示出了在本公开的另一种实施例中的数据存储引擎的结构图,所述数据存储引擎包括:
第一存储模块401,用于将待存储数据存储至易变表中,所述易变表位于RAM中。
易变表修改模块402,用于若所述易变表的存储量大于或等于预设存储量阈值,则将所述易变表修改为非易变表,并停止接收待存储数据的存储。
易变表创建模块403,用于创建新的易变表,并将待存储数据存储至所述新的易变表中。
第二存储模块404,用于若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为列格式,则将所述最低层级的数据按照列格式存储至所述下一层级;可选地,在发明的实施例中,所述第二存储模块404包括:
属性提取子模块4041,用于从所述最低层级的每个数据中提取每个属性的取值。
属性存储子模块4042,用于针对每个属性,将所述属性的取值存储至所述属性在所述下一层级中对应的属性存储文件。
第三存储模块405,用于若所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级。
第四存储模块406,用于若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为行格式,则将所述最低层级的数据存储至所述下一层级。
第五存储模块407,用于若磁盘中其中一个存储格式为行格式的层级的存储量大于或等于预设层级存储量阈值,且所述层级的下一层级的存储格式为列格式,则将所述存储格式为行格式的层级中的数据以列格式存储至所述下一层级。
第六存储模块408,用于若磁盘中其中一个存储格式为行格式的层级的存储量大于或等于预设层级存储量阈值,且所述层级的下一层级的存储格式为行格式,则将所述行格式存储的层级的数据存储至所述下一层级。
第七存储模块409,用于若磁盘中其中一个存储格式为列格式的层级的存储量大于或等于预设层级存储量阈值,且所述层级的下一层级的存储格式为列格式,则将所述列格式存储的层级的数据存储至所述下一层级。
第八存储模块410,用于若最低层级的存储量小于预设层级存储量阈值,且所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级。
综上所述,本公开的实施例提供了另一种数据存储引擎,所述数据存储引擎在实施例三的基础上,还可以周期性检测各层级中的存储量,并将各层级中的数据存储至下一层级,最终存储至存储量不受限制的最高层级,可以预先对层级数据进行管理,使得低层级空出存储空间,提高非易变表的存储速度,还可以根据层级之间的格式是否相同,进行格式转换或不转换,实现了灵活的层级间数据存储。
实施例四为实施例二对应的装置实施例,详细说明可以参照实施例二,在此不再赘述。
本公开的实施例还提供了一种电子设备,参照图7,包括:处理器501、存储器502以及存储在所述存储器502上并可在所述处理器上运行的计算机程序5021,所述处理器501执行所述程序时实现前述实施例的数据存储方法。
本公开的实施例还提供了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行前述实施例的数据存储方法。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本公开的实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本公开的实施例的内容,并且上面对特定语言所做的描述是为了披露本公开的实施例的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本公开的实施例的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本公开的实施例的示例性实施例的描述中,本公开的实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本公开的实施例要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本公开的实施例的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
本公开的实施例的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本公开的实施例的数据存储设备中的一些或者全部部件的一些或者全部功能。本公开的实施例还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序。这样的实现本公开的实施例的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本公开的实施例进行说明而不是对本公开的实施例进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本公开的实施例可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所述仅为本公开的实施例的较佳实施例而已,并不用以限制本公开的实施例,凡在本公开的实施例的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本公开的实施例的保护范围之内。
以上所述,仅为本公开的实施例的具体实施方式,但本公开的实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开的实施例揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的实施例的保护范围之内。因此,本公开的实施例的保护范围应以权利要求的保护范围为准。

Claims (9)

1.一种数据存储方法,其特征在于,所述方法包括:
将待存储数据存储至易变表中,所述易变表位于RAM中;
若所述易变表的存储量大于或等于预设存储量阈值,则将所述易变表修改为非易变表,并停止接收待存储数据的存储;
若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为列格式,则将所述最低层级的数据按照列格式存储至所述下一层级;
若所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级;
所述方法还包括:
若磁盘中其中一个存储格式为行格式的层级的存储量大于或等于预设层级存储量阈值,且所述层级的下一层级的存储格式为列格式,则将所述存储格式为行格式的层级中的数据以列格式存储至所述下一层级;
若磁盘中其中一个存储格式为行格式的层级的存储量大于或等于预设层级存储量阈值,且所述层级的下一层级的存储格式为行格式,则将所述行格式存储的层级的数据存储至所述下一层级;
若磁盘中其中一个存储格式为列格式的层级的存储量大于或等于预设层级存储量阈值,且所述层级的下一层级的存储格式为列格式,则将所述列格式存储的层级的数据存储至所述下一层级。
2.根据权利要求1所述的方法,其特征在于,所述将所述最低层级的数据按照列格式存储至所述下一层级的步骤,包括:
从所述最低层级的每个数据中提取每个属性的取值;
针对每个属性,将所述属性的取值存储至所述属性在所述下一层级中对应的属性存储文件。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为行格式,则将所述最低层级的数据存储至所述下一层级。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若最低层级的存储量小于预设层级存储量阈值,且所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级。
5.根据权利要求1所述的方法,其特征在于,所述将所述易变表修改为非易变表的步骤之后,所述方法还包括:
创建新的易变表,并将待存储数据存储至所述新的易变表中。
6.根据权利要求1至5其中任一项所述的方法,其特征在于,在每个层级中以SST文件存储数据,所述方法还包括:
动态修改每个层级中每个SST文件的存储格式。
7.一种数据存储引擎,其特征在于,所述数据存储引擎包括:
第一存储模块,用于将待存储数据存储至易变表中,所述易变表位于RAM中;
易变表修改模块,用于若所述易变表的存储量大于或等于预设存储量阈值,则将所述易变表修改为非易变表,并停止接收待存储数据的存储;
第二存储模块,用于若磁盘中最低层级的存储量大于或等于预设层级存储量阈值,且磁盘中层级更高的下一层级的存储格式为列格式,则将所述最低层级的数据按照列格式存储至所述下一层级;
第三存储模块,用于若所述最低层级的存储格式为行格式,则将所述非易变表中的数据按照行格式存储至所述最低层级;
第五存储模块,用于若磁盘中其中一个存储格式为行格式的层级的存储量大于或等于所述预设层级存储量阈值,且所述层级的下一层级的存储格式为列格式,则将所述存储格式为行格式的层级中的数据以列格式存储至所述下一层级;
第六存储模块,用于若磁盘中其中一个存储格式为行格式的层级的存储量大于或等于所述预设层级存储量阈值,且所述层级的下一层级的存储格式为行格式,则将所述行格式存储的层级的数据存储至所述下一层级;
第七存储模块,用于若磁盘中其中一个存储格式为列格式的层级的存储量大于或等于所述预设层级存储量阈值,且所述层级的下一层级的存储格式为列格式,则将所述列格式存储的层级的数据存储至所述下一层级。
8.一种电子设备,其特征在于,包括:
处理器、存储器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-6任一所述的数据存储方法。
9.一种可读存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1-6任一所述的数据存储方法。
CN201910566893.9A 2019-06-27 2019-06-27 数据存储方法和数据存储引擎 Active CN112148691B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910566893.9A CN112148691B (zh) 2019-06-27 2019-06-27 数据存储方法和数据存储引擎

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910566893.9A CN112148691B (zh) 2019-06-27 2019-06-27 数据存储方法和数据存储引擎

Publications (2)

Publication Number Publication Date
CN112148691A CN112148691A (zh) 2020-12-29
CN112148691B true CN112148691B (zh) 2024-03-26

Family

ID=73868696

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910566893.9A Active CN112148691B (zh) 2019-06-27 2019-06-27 数据存储方法和数据存储引擎

Country Status (1)

Country Link
CN (1) CN112148691B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103177058A (zh) * 2011-12-22 2013-06-26 Sap股份公司 存储为行存储和列存储二者的混合数据库表
WO2015180432A1 (zh) * 2014-05-27 2015-12-03 华为技术有限公司 一种聚簇存储方法及装置
CN106155929A (zh) * 2015-04-17 2016-11-23 伊姆西公司 数据存储管理系统和方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103177058A (zh) * 2011-12-22 2013-06-26 Sap股份公司 存储为行存储和列存储二者的混合数据库表
WO2015180432A1 (zh) * 2014-05-27 2015-12-03 华为技术有限公司 一种聚簇存储方法及装置
CN106155929A (zh) * 2015-04-17 2016-11-23 伊姆西公司 数据存储管理系统和方法

Also Published As

Publication number Publication date
CN112148691A (zh) 2020-12-29

Similar Documents

Publication Publication Date Title
US7765215B2 (en) System and method for providing a trustworthy inverted index to enable searching of records
CN105320775A (zh) 数据的存取方法和装置
CN105183735A (zh) 数据的查询方法及查询装置
CN103678589B (zh) 一种基于等价类的数据库内核查询优化方法
US8583655B2 (en) Using an inverted index to produce an answer to a query
US20210254995A1 (en) Methods, apparatuses, systems, and storage media for storing and loading visual localization maps
CN107704511A (zh) 一种sql优化方法及设备
US20040054683A1 (en) System and method for join operations of a star schema database
US6745198B1 (en) Parallel spatial join index
CN104142962A (zh) 一种对电子地图的线要素进行处理的方法
US11221788B2 (en) Data storage method and data storage engine
CN107704633A (zh) 一种文件迁移的方法和系统
US7512617B2 (en) Interval tree for identifying intervals that intersect with a query interval
CN104408128B (zh) 一种基于b+树异步更新索引的读优化方法
CN108549666B (zh) 一种数据表的排序方法、装置、设备及存储介质
CN112148691B (zh) 数据存储方法和数据存储引擎
CN104750743A (zh) 一种交易文件勾对系统和方法
US7243108B1 (en) Database component packet manager
CN106934033A (zh) 一种弯板机器人数据索引方法及装置
Medina et al. Evaluation of indexing strategies for possibilistic queries based on indexing techniques available in traditional RDBMS
CN114817512B (zh) 问答推理方法及装置
US9959295B1 (en) S-expression based computation of lineage and change impact analysis
US7565217B2 (en) Traversal of empty regions in a searchable data structure
US20110029570A1 (en) Systems and methods for contextualized caching strategies
US8122219B2 (en) Storage allocation

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