CN114443670B - 数据的存储、读取方法及装置 - Google Patents
数据的存储、读取方法及装置 Download PDFInfo
- Publication number
- CN114443670B CN114443670B CN202210357633.2A CN202210357633A CN114443670B CN 114443670 B CN114443670 B CN 114443670B CN 202210357633 A CN202210357633 A CN 202210357633A CN 114443670 B CN114443670 B CN 114443670B
- Authority
- CN
- China
- Prior art keywords
- attribute
- column
- columns
- storage
- mode
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Complex Calculations (AREA)
Abstract
本说明书实施例提供一种数据的存储、读取方法及装置,在数据的存储方法中,获取待存储的第一数据行。对第一数据行中的各属性列进行分组,得到若干列簇。对于若干列簇中任意的第一列簇,根据第一列簇中目标属性列的数目统计信息,确定对应的存储模式。在存储模式为稠密模式的情况下,存储第一列簇中各属性列各自的属性值,并记录对应的稠密存储信息,其中至少包括第一列簇中各属性列各自的偏移地址。在存储模式为稀疏模式的情况下,存储第一列簇中各非空属性列各自的属性值,并记录对应的稀疏存储信息,其中至少包括第一列簇中各非空属性列各自的列下标及其偏移地址。
Description
技术领域
本说明书一个或多个实施例涉及数据库领域,尤其涉及一种数据的存储、读取方法及装置。
背景技术
在基于日志结构合并树 (Log-Structured-Merge Tree,LSM-Tree)存储架构实现的分布式数据库中,通常会存储对应于每个DML操作的数据行。其中,对于INSERT操作,对应数据行中大部分属性列都是有意义的;对于UPDATE操作,对应数据行中只有主键列和修改列的新值是有意义的;对于DELETE操作,对应数据行中只有主键列是有意义的。
对于上述包含不同数目个有意义属性列的数据行,如何在不浪费存储资源的情况下,对其进行正确存储就成为要解决的问题。
发明内容
本说明书一个或多个实施例描述了一种数据的存储、读取方法及装置,针对任一数据行,可以灵活选择相应的存储模式进行存储,由此可以在不浪费存储资源的情况下,确保数据的查询性能。
第一方面,提供了一种数据的存储方法,包括:
获取待存储的第一数据行;
对所述第一数据行中的各属性列进行分组,得到若干列簇;
对于所述若干列簇中任意的第一列簇,根据所述第一列簇中目标属性列的数目统计信息,确定对应的存储模式;所述存储模式包括稠密模式或稀疏模式;
在所述存储模式为所述稠密模式的情况下,存储所述第一列簇中各属性列各自的属性值,并记录对应的稠密存储信息,其中至少包括所述第一列簇中各属性列各自的偏移地址;
在所述存储模式为所述稀疏模式的情况下,存储所述第一列簇中各非空属性列各自的属性值,并记录对应的稀疏存储信息,其中至少包括所述第一列簇中各非空属性列各自的列下标及其偏移地址。
第二方面,提供了一种数据的读取方法,包括:
接收数据库的读请求;
根据所述读请求,确定待读取的第一属性列的第一列下标,以及所述第一属性列所属的数据行;
根据所述第一列下标,从所述数据行对应的若干列簇中,确定出所述第一属性列所属的第一列簇;
根据所述第一列簇的存储模式,从该存储模式对应的存储信息中,获取所述第一属性列的偏移地址;所述存储模式包括稠密模式或稀疏模式;
至少根据所述偏移地址,读取所述第一属性列的属性值并返回。
第三方面,提供了一种数据的存储装置,包括:
获取单元,用于获取待存储的第一数据行;
分组单元,用于对所述第一数据行中的各属性列进行分组,得到若干列簇;
确定单元,用于对于所述若干列簇中任意的第一列簇,根据所述第一列簇中目标属性列的数目统计信息,确定对应的存储模式;所述存储模式包括稠密模式或稀疏模式;
第一存储单元,用于在所述存储模式为所述稠密模式的情况下,存储所述第一列簇中各属性列各自的属性值,并记录对应的稠密存储信息,其中至少包括所述第一列簇中各属性列各自的偏移地址;
第二存储单元,用于在所述存储模式为所述稀疏模式的情况下,存储所述第一列簇中各非空属性列各自的属性值,并记录对应的稀疏存储信息,其中至少包括所述第一列簇中各非空属性列各自的列下标及其偏移地址。
第四方面,提供了一种数据的读取装置,包括:
接收单元,用于接收数据库的读请求;
确定单元,用于根据所述读请求,确定待读取的第一属性列的第一列下标,以及所述第一属性列所属的数据行;
所述确定单元,还用于根据所述第一列下标,从所述数据行对应的若干列簇中,确定出所述第一属性列所属的第一列簇;
获取单元,用于根据所述第一列簇的存储模式,从该存储模式对应的存储信息中,获取所述第一属性列的偏移地址;所述存储模式包括稠密模式或稀疏模式;
读取单元,用于至少根据所述偏移地址,读取所述第一属性列的属性值并返回。
第五方面,提供了一种计算机存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面或第二方面的方法。
第六方面,提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面或第二方面的方法。
本说明书一个或多个实施例提供的数据的存储方法,针对数据库中的任一数据行,可以根据其中目标属性列的数目统计信息,灵活选择不同的存储模式对其进行存储。其中,在稠密模式下,存储数据行中各属性列各自的属性值,这可以方便于特定属性列的查询。在稀疏模式下,存储数据行中各非空属性列各自的属性值,这可以节省存储空间,且方便于快速过滤非空属性列,进而可以提升查询性能。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本说明书披露的一个实施例的实施场景示意图;
图2示出根据一个实施例的数据的存储方法流程图;
图3a示出稠密行的存储内容;
图3b示出稀疏行的存储内容;
图3c示出列簇行的存储内容;
图4示出根据一个实施例的数据的读取方法流程图;
图5示出根据一个实施例的数据的存储装置示意图;
图6示出根据一个实施例的数据的读取装置示意图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
传统技术中,对于数据库中的数据行,通常会通过如下两种存储模式进行存储:稠密模式和稀疏模式。
在稠密模式中,会紧密存储数据行中各属性列各自的属性值,对于无意义的属性列,用空值填充。应理解,在该种存储模式中,对于对应于UPDATE/DELETE操作的数据行,会存储大量无意义的空值,这会占用宝贵的存储空间,进而造成资源的浪费。此外,对于空值属性列的查询也会对性能造成影响。
在稀疏模式中,会跳过数据行中无意义的属性列,而紧密存储其中有意义的属性列的属性值,此外还需要额外存储有意义的属性列的列下标。应理解,在该种存储模式中,对于UPDATE/DELETE操作是很友好的,节省了存储空间。但是对于INSERT操作,由于对应数据行中无意义的属性列较少,额外存储的列下标反而占用了更多的存储空间,进而使得查询性能也有所下降。
需要说明,为方便于读取已存储数据行中的属性列的属性值,在上述存储数据行的过程中,可以同时记录如下的辅助信息。
第一,列长度。具体地,可以依次记录每个属性列的长度,之后在查询某个属性列时,通过累加前置列的列长度,来确定对应的偏移地址,之后基于该偏移地址,读取该属性列的属性值。然而,基于列长度读取属性值的过程中,由于需要实时计算偏移地址,进而会影响查询性能。
第二,偏移地址。具体地,可以依次记录每个属性列的偏移地址,之后在查询某个属性列时,直接获取该属性列的偏移地址,并基于该偏移地址读取属性列的属性值。然而,当数据行的列数比较多、行中有超长列时会导致偏移地址过大,这使得辅助信息占用过多的存储空间,进而使得性价比较低。
结合上述两种存储模式和两种辅助信息的优缺点,改进的方案提出,将数据行分为长数据列和短数据列,并划分为不同的区域(region)进行存储。其中,在短数据区域中,将短数据列划分为若干分组,并按分组依次记录每个分组中的各属性列各自的属性值,以及记录每个分组的长度。在长数据区域中,将长数据列划分为若干分组,并按分组依次记录每个分组中的各属性列各自的属性值,以及记录每个分组内长数据列的数目以及偏移地址。
然而,在上述改进的方案中,数据行的存储过程通常比较复杂,因为首先需要进行复杂的行解析,且需要将长数据列和短数据列分开存储,进而使得存储过程耗时高,实现复杂。此外,属性列的读取过程也比较繁琐,因为首先需要区分属性列是长数据列还是短数据列,如果是短数据列,需要累加前置列的长度才能得到当前数据列的偏移地址,再读取。如果是长数据列,则需要先确定该长数据列是第几个长数据列,然后再基于对应的偏移地址,读取属性值。
为此,本申请的发明人提出,针对数据库中的任一数据行,可以根据其中目标属性列的数目统计信息,灵活选择不同的存储模式对其进行存储。其中,在稠密模式下,存储数据行中各属性列各自的属性值,这可以方便于特定属性列的查询。在稀疏模式下,存储数据行中各非空属性列各自的属性值,这可以节省存储空间,且方便于快速过滤非空属性列,进而可以提升查询性能。以下进行详细说明。
图1为本说明书披露的一个实施例的实施场景示意图。图1中,数据库中存储有若干数据行,其中,每个数据行可以包括n个属性列:D0-Dn-1。以任一数据行为例来说,其中部分属性列的属性值可以为空值。以下将对应属性值为空值的属性列称为空属性列。
对于上述m个数据行中任意的第一数据行,在该第一数据行中属性列的数目小于预设的列数目时,直接按照稠密模式或者稀疏模式进行存储。而在第一数据行中属性列的数目大于等于预设的列数目时,可以先对第一数据行中的各属性列进行分组,得到若干列簇。然后针对每个列簇,可以根据其中的非空属性列的数目统计信息,选择按照稠密模式或者稀疏模式进行存储。
以划分列簇为例来说,在稠密存储模式下,可以存储列簇中各属性列的属性值,并记录各属性列的偏移地址。比如,针对D0列和D1列,可以同时记录对应的偏移地址Add0和Add1。在稀疏存储模式下,可以存储列簇中各非空属性列的属性值,并记录各非空属性列的列下标和偏移地址。比如,针对Di列,可以同时记录Di列的列下标i和偏移地址Addi。
图2示出根据一个实施例的数据的存储方法流程图。该方法可以通过任何具有计算、处理能力的装置、设备、平台、设备集群来执行。如图2所示,所述方法可以包括如下步骤。
步骤202,获取待存储的第一数据行。
具体地,可以接收数据库的写请求,该写请求可以包括数据库中的待存储的第一数据行。
上述第一数据行可以同时包括非空属性列和空属性列。其中,非空属性列是指属性列的属性值不为空的属性列,空属性列是指属性列的属性值为空的属性列。
步骤204,对第一数据行中的各属性列进行分组,得到若干列簇。
可选地,可以先判断第一数据行中属性列的数目是否大于预设的列数目N。在第一数据行中属性列的数目大于N的情况下,对第一数据行中的各属性列进行分组。在一个例子中,N可以为16、32或者64等等。
在一个示例中,可以按照预设的列数目N对所有的各属性列进行分组。即将所有的各属性列中每N个属性列归为一组,得到若干列簇。
在另一个示例中,也可以先判断第一数据行中主键列的数目是否大于预设的列数目N。若大于,则将各主键列归为一组,将剩余的其它属性列中每N个属性列归为一组,得到若干列簇。若不大于,则将所有的各属性列中每N个属性列归为一组,得到若干列簇。
需要说明,在数据库中,主键作为数据行的标识,其查询的频率比较高,若将主键列划分到不同的列簇中,会使得高频的主键查询效率降低。因此,可以将所有的主键列划分到一个列簇中,以确保查询效率。
步骤206,对于若干列簇中任意的第一列簇,根据第一列簇中目标属性列的数目统计信息,确定对应的存储模式。
这里的存储模式可以包括稠密模式或稀疏模式。
在一个示例中,上述目标属性列为非空属性列,数目统计信息为非空属性列的占比。
在另一个示例中,上述目标属性列为非空属性列,数目统计信息为非空属性列的总数量。
在还一个示例中,上述目标属性列为空属性列,数目统计信息为空属性列的占比。
在上述目标属性列为非空属性列,数目统计信息为非空属性列的占比的情况下,上述确定对应的存储模式可以包括:在非空属性列的占比大于预设的占比阈值的情况下,确定对应的存储模式为稠密模式。在非空属性列的占比不大于预设的占比阈值的情况下,确定对应的存储模式为稀疏模式。
在一个例子中,上述预设的占比阈值可以为10%。
在上述目标属性列为非空属性列,数目统计信息为非空属性列的总数量的情况下,上述确定对应的存储模式可以包括:在非空属性列的总数量大于预设的数量的情况下,确定对应的存储模式为稠密模式。在非空属性列的总数量不大于预设的数量的情况下,确定对应的存储模式为稀疏模式。
步骤208,在存储模式为稠密模式的情况下,存储第一列簇中各属性列各自的属性值,并记录对应的稠密存储信息,其中至少包括第一列簇中各属性列各自的偏移地址。
需要说明,上述第一列簇中各属性列各自的属性值是连续保存的。在一个示例中,可以将各属性列各自的属性值作为数组中的各个元素进行存储。从而各属性值的起始位置(也即第一列簇的起始位置)即为该数组的首地址。
以上述各属性列中任意的第一属性列为例来说,该第一属性列的偏移地址是指第一属性列的属性值相对于第一列簇的起始位置的偏移地址。
在一个示例中,某个属性列的偏移地址可以是在该属性列的属性值存储完成之后计算并记录的。比如,可以根据该属性列所属列簇中的前置属性列的数目及序列化长度,计算对应的偏移地址。
进一步地,上述稠密存储信息还可以包括,第一列簇中属性列的数目以及对应于稠密模式的模式信息等。
步骤210,在存储模式为稀疏模式的情况下,存储第一列簇中各非空属性列各自的属性值,并记录对应的稀疏存储信息,其中至少包括第一列簇中各非空属性列各自的列下标及其偏移地址。
需要说明,上述第一列簇中各非空属性列各自的属性值也是连续保存的。在一个示例中,可以将各非空属性列各自的属性值作为数组中的各个元素进行存储。从而各属性值的起始位置(也即第一列簇的起始位置)即为该数组的首地址。
以上述各非空属性列中任意的第一非空属性列为例来说,该第一非空属性列的偏移地址是指第一非空属性列的属性值相对于第一列簇的起始位置的偏移地址。
在一个示例中,某个非空属性列的偏移地址可以是在该非空属性列的属性值存储完成之后计算并记录的。比如,可以根据该非空属性列所属列簇中的前置非空属性列的数目及序列化长度,计算对应的偏移地址。
此外,关于上述稀疏存储信息中的列下标,其可以直接为非空属性列在第一数据行中的列下标;也可以为列下标的预处理结果,对应的取值范围可以为:[0,N-1]。
在一个例子中,可以基于如下公式,对列下标进行预处理:列下标-列簇下标*N。这里的列簇下标是指非空属性列所属列簇的下标,其一般从0开始编码。比如,可以为0,1,2,…,M-1,其中,M为列簇的数目。
进一步地,上述稀疏存储信息还可以包括,第一列簇中非空属性列的数目以及对应于稀疏模式的模式信息等。
需要说明,在对第一数据行中的各属性列划分分组的情况下,除了记录对应于每个列簇的稠密存储信息或者稀疏存储信息外,还可以记录第一数据行的行信息(比如,列簇的数目以及行起始位置等)以及各列簇各自的偏移地址等等。
以上是对在第一数据行中属性列的数目大于N的情况下,第一数据行的存储方法的说明。在第一数据行中属性列的数目不大于N的情况下,可以按照普通存储的方式进行存储。具体过程如下:
根据第一数据行中目标属性列的数目统计信息,确定对应的存储模式。按照确定的存储模式,存储第一数据行中各属性列各自的属性值。
关于目标属性列和对应的数目统计信息的说明可以参见上文所述,在此不复赘述。具体地,可以在非空属性列的占比大于预设的占比阈值的情况下,确定对应的存储模式为稠密模式。在非空属性列的占比不大于预设的占比阈值的情况下,确定对应的存储模式为稀疏模式。
其中,以稠密模式存储数据行的方法可以参照上述步骤208,以稀疏模式存储数据行的方法可以参照上述步骤210。
在本说明书中,将需要划分分组存储的数据行称为列簇行,将不需要划分分组而直接以稠密模式存储的数据行称为稠密行,将不需要划分分组而直接以稀疏模式存储的数据行称为稀疏行。
图3a示出稠密行的存储内容。图3a中,对应于稠密行的存储内容可以包括:行信息、数据行中各属性列的属性值以及偏移地址。其中的行信息可以包括,数据行中属性列的数目以及稠密模式的模式信息。
图3b示出稀疏行的存储内容。图3b中,对应于稀疏行的存储内容可以包括:行信息、数据行中各非空属性列的属性值、列下标以及偏移地址。其中的行信息可以包括,数据行中非空属性列的数目以及稀疏模式的模式信息。
图3c示出列簇行的存储内容。图3c中,对应于列簇行的存储内容可以包括:行信息、各列簇的存储内容以及各列簇的偏移地址。其中的行信息可以包括,数据行中列簇的数目。对于各列簇的存储内容,假设某列簇以稠密模式存储,那么对应的存储内容可以包括,列簇信息、列簇中各属性列的属性值以及偏移地址。其中的列簇信息可以包括,列簇中属性列的数目以及稠密模式的模式信息。而假设某列簇以稀疏模式存储,那么对应的存储内容可以包括,列簇信息、列簇中各非空属性列的属性值、列下标以及偏移地址。其中的列簇信息可以包括,列簇中非空属性列的数目以及稀疏模式的模式信息。
综合以上,本说明书实施例提供的数据的存储方法,在数据行中的属性列的数目较少时,使用精简的普通列存储格式,写入比较快捷;在属性列的数目较多时,使用精巧的列簇存储格式。进一步地,在使用列簇存储格式时,可以根据非空属性列的占比,使用不同的存储模式。其中,稠密模式存储数据更紧凑,定位指定列更快捷;稀疏模式最大限度地节省存储空间,快速过滤非空属性列,提升查询性能。
此外,本方案还可以对主键列进行特殊处理,使得被频繁查询的主键列归属于同一个列簇,避免了读主键时切换列簇的复杂操作,提升读取效率。以及通过使用本方案的存储方法,可以使得一个固定大小的数据块能够存储的行数变多,对数据块的缓存更友好。
以上是对数据的存储方法的说明,以下对通过该存储方法存储的数据的读取方法进行说明。
图4示出根据一个实施例的数据的读取方法流程图。该方法可以通过任何具有计算、处理能力的装置、设备、平台、设备集群来执行。如图4所示,所述方法可以包括如下步骤。
步骤402,接收数据库的读请求。
在一个示例中,该读请求可以包括待读取的第一属性列的列下标,以及该第一属性列所属数据行的起始位置和终止位置。
步骤404,根据读请求,确定待读取的第一属性列的第一列下标,以及第一属性列所属的数据行。
比如,根据上述起始位置和终止位置,就可以确定出上述第一属性列所属的数据行。
步骤406,根据第一列下标,从数据行对应的若干列簇中,确定出第一属性列所属的第一列簇。
在一个示例中,可以将第一列下标除以N的商值作为列簇下标,确定第一属性列所属的第一列簇。
步骤408,根据第一列簇的存储模式,从该存储模式对应的存储信息中,获取第一属性列的偏移地址。
这里的存储模式可以包括稠密模式或稀疏模式。
具体地,在第一列簇的存储模式为稠密模式的情况下,从稠密存储信息中,获取列下标与第一列下标相匹配的属性列的偏移地址,作为第一属性列的偏移地址。在第一列簇的存储模式为稀疏模式的情况下,判断稀疏存储信息中,是否存在列下标与第一列下标相匹配的非空属性列,若存在,则将相匹配的非空属性列的偏移地址,作为第一属性列的偏移地址,否则将空值作为第一属性列的偏移地址。
需要说明,在每个列簇中的属性列的列下标为数据行中的列下标时,直接执行上述相匹配的操作。而在每个列簇中的属性列的列下标经过预处理时,可以先按照上述预处理方式,对第一列下标进行预处理。即第一列下标-(第一列簇的列簇下标*N)。之后基于预处理后的第一列下标执行上述相匹配的操作。
步骤410,至少根据偏移地址,读取第一属性列的属性值并返回。
具体地,可以先获取第一列簇的偏移地址,接着通过将行的起始位置与第一列簇的偏移地址求和,得到第一列簇的起始位置。然后将第一列簇的起始位置与第一属性列的偏移地址求和,得到第一属性列的位置,最后基于该位置就可以读取到第一属性列的属性值。
综上,本说明书实施例提供的数据的读取方法,不需要区分短数据列和长数据列,且不需要对属性列的长度进行累加,从而可以提升数据查询性能。
与上述数据的存储方法对应地,本说明书一个实施例还提供的一种数据的存储装置,如图5所示,该装置可以包括:
获取单元502,用于获取待存储的第一数据行。
分组单元504,用于对第一数据行中的各属性列进行分组,得到若干列簇。
分组单元504具体用于:
在第一数据行中主键列的数目大于预设的列数目N的情况下,将各主键列归为一组,将剩余的其它属性列中每N个属性列归为一组,得到若干列簇;
在第一数据行中主键列的数目不大于预设的列数目N的情况下,将所有的各属性列中每N个属性列归为一组,得到若干列簇。
确定单元506,用于对于若干列簇中任意的第一列簇,根据第一列簇中目标属性列的数目统计信息,确定对应的存储模式,该存储模式包括稠密模式或稀疏模式。
确定单元506具体用于:
在非空属性列的占比大于预设的占比阈值的情况下,确定对应的存储模式为稠密模式;
在非空属性列的占比不大于预设的占比阈值的情况下,确定对应的存储模式为稀疏模式。
其中,目标属性列为非空属性列,数目统计信息为非空属性列的占比。
第一存储单元508,用于在存储模式为稠密模式的情况下,存储第一列簇中各属性列各自的属性值,并记录对应的稠密存储信息,其中至少包括第一列簇中各属性列各自的偏移地址。
上述稠密存储信息还包括,第一列簇中属性列的数目以及对应于稠密模式的模式信息。
第二存储单元510,用于在存储模式为稀疏模式的情况下,存储第一列簇中各非空属性列各自的属性值,并记录对应的稀疏存储信息,其中至少包括第一列簇中各非空属性列各自的列下标及其偏移地址。
上述稀疏存储信息还包括,第一列簇中非空属性列的数目以及对应于稀疏模式的模式信息。
可选地,该装置还包括:
记录单元512,用于记录列簇的数目以及各列簇各自的偏移地址。
可选地,该装置还包括:
判断单元514,用于判断第一数据行中属性列的数目是否大于预设的列数目N。
分组单元504具体用于:
在第一数据行中属性列的数目大于N的情况下,对第一数据行中的各属性列进行分组。
可选地,该装置还包括:第三存储单元516;
确定单元506,还用于在第一数据行中属性列的数目不大于N的情况下,根据第一数据行中目标属性列的数目统计信息,确定对应的存储模式;
第三存储单元516,用于按照确定的存储模式,存储第一数据行中各属性列各自的属性值。
本说明书上述实施例装置的各功能模块的功能,可以通过上述方法实施例的各步骤来实现,因此,本说明书一个实施例提供的装置的具体工作过程,在此不复赘述。
本说明书一个实施例提供的数据的存储装置,针对任一数据行,可以灵活选择相应的存储模式进行存储,由此可以在不浪费存储资源的情况下,确保数据的查询性能。
与上述数据的读取方法对应地,本说明书一个实施例还提供的一种数据的读取装置,如图6所示,该装置可以包括:
接收单元602,用于接收数据库的读请求。
确定单元604,用于根据读请求,确定待读取的第一属性列的第一列下标,以及第一属性列所属的数据行。
确定单元604,还用于根据第一列下标,从数据行对应的若干列簇中,确定出第一属性列所属的第一列簇。
获取单元606,用于根据第一列簇的存储模式,从该存储模式对应的存储信息中,获取第一属性列的偏移地址,该存储模式包括稠密模式或稀疏模式。
读取单元608,用于至少根据偏移地址,读取第一属性列的属性值并返回。
读取单元608具体用于:
在第一列簇的存储模式为稠密模式的情况下,从稠密存储信息中,读取列下标与第一列下标相匹配的属性列的偏移地址,作为第一属性列的偏移地址;
在第一列簇的存储模式为稀疏模式的情况下,判断稀疏存储信息中,是否存在列下标与第一列下标相匹配的非空属性列,若存在,则将相匹配的非空属性列的偏移地址,作为第一属性列的偏移地址,否则将空值作为第一属性列的偏移地址。
本说明书上述实施例装置的各功能模块的功能,可以通过上述方法实施例的各步骤来实现,因此,本说明书一个实施例提供的装置的具体工作过程,在此不复赘述。
本说明书一个实施例提供的数据的读取装置,不需要区分短数据列和长数据列,且不需要对属性列的长度进行累加,从而可以提升数据查询性能。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2或图4所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2或图4所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于服务器实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
结合本说明书公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、移动硬盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于服务器中。当然,处理器和存储介质也可以作为分立组件存在于服务器中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
以上所述的具体实施方式,对本说明书的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书的具体实施方式而已,并不用于限定本说明书的保护范围,凡在本说明书的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书的保护范围之内。
Claims (22)
1.一种数据的存储方法,包括:
获取待存储的第一数据行;
在所述第一数据行中主键列的数目大于预设的列数目N的情况下,将各主键列归为一组,将剩余的其它属性列中每N个属性列归为一组,得到若干列簇;
对于所述若干列簇中任意的第一列簇,根据所述第一列簇中目标属性列的数目统计信息,确定对应的存储模式;所述存储模式包括稠密模式或稀疏模式;
在所述存储模式为所述稠密模式的情况下,存储所述第一列簇中各属性列各自的属性值,并记录对应的稠密存储信息,其中至少包括所述第一列簇中各属性列各自的偏移地址;
在所述存储模式为所述稀疏模式的情况下,存储所述第一列簇中各非空属性列各自的属性值,并记录对应的稀疏存储信息,其中至少包括所述第一列簇中各非空属性列各自的列下标及其偏移地址。
2.根据权利要求1所述的方法,其中,所述目标属性列为所述非空属性列,所述数目统计信息为所述非空属性列的占比。
3.根据权利要求2所述的方法,其中,所述确定对应的存储模式,包括:
在所述非空属性列的占比大于预设的占比阈值的情况下,确定对应的存储模式为稠密模式;
在所述非空属性列的占比不大于预设的占比阈值的情况下,确定对应的存储模式为稀疏模式。
4.根据权利要求1所述的方法,还包括:
在所述第一数据行中主键列的数目不大于预设的列数目N的情况下,将所有的各属性列中每N个属性列归为一组,得到所述若干列簇。
5.根据权利要求1所述的方法,其中,所述稠密存储信息还包括,所述第一列簇中属性列的数目以及对应于所述稠密模式的模式信息;
所述稀疏存储信息还包括,所述第一列簇中非空属性列的数目以及对应于所述稀疏模式的模式信息。
6.根据权利要求1所述的方法,还包括:
记录列簇的数目以及各列簇各自的偏移地址。
7.根据权利要求1所述的方法,其中,在所述将各主键列归为一组,将剩余的其它属性列中每N个属性列归为一组之前,还包括:
判断所述第一数据行中属性列的数目是否大于预设的列数目N;
所述将各主键列归为一组,将剩余的其它属性列中每N个属性列归为一组,包括:
在所述第一数据行中属性列的数目大于N,且所述第一数据行中主键列的数目大于N的情况下,将各主键列归为一组,将剩余的其它属性列中每N个属性列归为一组。
8.根据权利要求7所述的方法,还包括:
在所述第一数据行中属性列的数目不大于N的情况下,根据所述第一数据行中目标属性列的数目统计信息,确定对应的存储模式;
按照确定的存储模式,存储所述第一数据行中各属性列各自的属性值。
9.一种数据的读取方法,包括:
接收数据库的读请求;
根据所述读请求,确定待读取的第一属性列的第一列下标,以及所述第一属性列所属的数据行;
根据所述第一列下标,从所述数据行对应的若干列簇中,确定出所述第一属性列所属的第一列簇;其中,所述若干列簇是在所述数据行中主键列的数目大于预设的列数目N的情况下,将各主键列归为一组,将剩余的其它属性列中每N个属性列归为一组得到的;
根据所述第一列簇的存储模式,从该存储模式对应的存储信息中,获取所述第一属性列的偏移地址;所述存储模式包括稠密模式或稀疏模式;其中,在所述稠密模式下,存储有所述第一列簇中各属性列各自的属性值,并记录有对应的稠密存储信息,其中至少包括所述各属性列各自的偏移地址;在所述稀疏模式下,存储有所述第一列簇中各非空属性列各自的属性值,并记录有对应的稀疏存储信息,其中至少包括所述各非空属性列各自的列下标及其偏移地址;
至少根据所述偏移地址,读取所述第一属性列的属性值并返回。
10.根据权利要求9所述的方法,其中,所述获取所述第一属性列的偏移地址,包括:
在所述第一列簇的存储模式为稠密模式的情况下,从稠密存储信息中,读取列下标与所述第一列下标相匹配的属性列的偏移地址,作为所述第一属性列的偏移地址;
在所述第一列簇的存储模式为稀疏模式的情况下,判断稀疏存储信息中,是否存在列下标与所述第一列下标相匹配的非空属性列,若存在,则将相匹配的非空属性列的偏移地址,作为所述第一属性列的偏移地址,否则将空值作为所述第一属性列的偏移地址。
11.一种数据的存储装置,包括:
获取单元,用于获取待存储的第一数据行;
分组单元,用于在所述第一数据行中主键列的数目大于预设的列数目N的情况下,将各主键列归为一组,将剩余的其它属性列中每N个属性列归为一组,得到若干列簇;
确定单元,用于对于所述若干列簇中任意的第一列簇,根据所述第一列簇中目标属性列的数目统计信息,确定对应的存储模式;所述存储模式包括稠密模式或稀疏模式;
第一存储单元,用于在所述存储模式为所述稠密模式的情况下,存储所述第一列簇中各属性列各自的属性值,并记录对应的稠密存储信息,其中至少包括所述第一列簇中各属性列各自的偏移地址;
第二存储单元,用于在所述存储模式为所述稀疏模式的情况下,存储所述第一列簇中各非空属性列各自的属性值,并记录对应的稀疏存储信息,其中至少包括所述第一列簇中各非空属性列各自的列下标及其偏移地址。
12.根据权利要求11所述的装置,其中,所述目标属性列为所述非空属性列,所述数目统计信息为所述非空属性列的占比。
13.根据权利要求12所述的装置,其中,所述确定单元具体用于:
在所述非空属性列的占比大于预设的占比阈值的情况下,确定对应的存储模式为稠密模式;
在所述非空属性列的占比不大于预设的占比阈值的情况下,确定对应的存储模式为稀疏模式。
14.根据权利要求11所述的装置,其中,所述分组单元还具体用于:
在所述第一数据行中主键列的数目不大于预设的列数目N的情况下,将所有的各属性列中每N个属性列归为一组,得到所述若干列簇。
15.根据权利要求11所述的装置,其中,所述稠密存储信息还包括,所述第一列簇中属性列的数目以及对应于所述稠密模式的模式信息;
所述稀疏存储信息还包括,所述第一列簇中非空属性列的数目以及对应于所述稀疏模式的模式信息。
16.根据权利要求11所述的装置,还包括:
记录单元,用于记录列簇的数目以及各列簇各自的偏移地址。
17.根据权利要求11所述的装置,还包括:
判断单元,用于判断所述第一数据行中属性列的数目是否大于预设的列数目N;
所述分组单元具体用于:
在所述第一数据行中属性列的数目大于N,且所述第一数据行中主键列的数目大于N的情况下,将各主键列归为一组,将剩余的其它属性列中每N个属性列归为一组。
18.根据权利要求17所述的装置,还包括:第三存储单元;
所述确定单元,还用于在所述第一数据行中属性列的数目不大于N的情况下,根据所述第一数据行中目标属性列的数目统计信息,确定对应的存储模式;
所述第三存储单元,用于按照确定的存储模式,存储所述第一数据行中各属性列各自的属性值。
19.一种数据的读取装置,包括:
接收单元,用于接收数据库的读请求;
确定单元,用于根据所述读请求,确定待读取的第一属性列的第一列下标,以及所述第一属性列所属的数据行;
所述确定单元,还用于根据所述第一列下标,从所述数据行对应的若干列簇中,确定出所述第一属性列所属的第一列簇;其中,所述若干列簇是在所述数据行中主键列的数目大于预设的列数目N的情况下,将各主键列归为一组,将剩余的其它属性列中每N个属性列归为一组得到的;
获取单元,用于根据所述第一列簇的存储模式,从该存储模式对应的存储信息中,获取所述第一属性列的偏移地址;所述存储模式包括稠密模式或稀疏模式;其中,在所述稠密模式下,存储有所述第一列簇中各属性列各自的属性值,并记录有对应的稠密存储信息,其中至少包括所述各属性列各自的偏移地址;在所述稀疏模式下,存储有所述第一列簇中各非空属性列各自的属性值,并记录有对应的稀疏存储信息,其中至少包括所述各非空属性列各自的列下标及其偏移地址;
读取单元,用于至少根据所述偏移地址,读取所述第一属性列的属性值并返回。
20.根据权利要求19所述的装置,其中,所述获取单元具体用于:
在所述第一列簇的存储模式为稠密模式的情况下,从稠密存储信息中,读取列下标与所述第一列下标相匹配的属性列的偏移地址,作为所述第一属性列的偏移地址;
在所述第一列簇的存储模式为稀疏模式的情况下,判断稀疏存储信息中,是否存在列下标与所述第一列下标相匹配的非空属性列,若存在,则将相匹配的非空属性列的偏移地址,作为所述第一属性列的偏移地址,否则将空值作为所述第一属性列的偏移地址。
21.一种计算机可读存储介质,其上存储有计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-10中任一项所述的方法。
22.一种计算设备,包括存储器和处理器,其中,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210357633.2A CN114443670B (zh) | 2022-04-07 | 2022-04-07 | 数据的存储、读取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210357633.2A CN114443670B (zh) | 2022-04-07 | 2022-04-07 | 数据的存储、读取方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114443670A CN114443670A (zh) | 2022-05-06 |
CN114443670B true CN114443670B (zh) | 2022-07-08 |
Family
ID=81358557
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210357633.2A Active CN114443670B (zh) | 2022-04-07 | 2022-04-07 | 数据的存储、读取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114443670B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880615A (zh) * | 2011-07-15 | 2013-01-16 | 腾讯科技(深圳)有限公司 | 一种数据存储方法和装置 |
CN104516912A (zh) * | 2013-09-29 | 2015-04-15 | 中国移动通信集团黑龙江有限公司 | 一种动态的数据存储方法及装置 |
CN108536692A (zh) * | 2017-03-01 | 2018-09-14 | 华为技术有限公司 | 一种执行计划的生成方法、装置及数据库服务器 |
CN108804684A (zh) * | 2018-06-13 | 2018-11-13 | 北京搜狗科技发展有限公司 | 一种数据处理方法和装置 |
CN110874358A (zh) * | 2018-08-30 | 2020-03-10 | 阿里巴巴集团控股有限公司 | 多属性列的存储、检索方法和装置以及电子设备 |
CN113742332A (zh) * | 2020-05-29 | 2021-12-03 | 北京金山云网络技术有限公司 | 数据存储方法、装置、设备及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102298641B (zh) * | 2011-09-14 | 2013-05-01 | 清华大学 | 一种基于键值库的文件与结构化数据统一存储方法 |
US20220012598A1 (en) * | 2020-07-09 | 2022-01-13 | Femtosense, Inc. | Methods and apparatus for matrix and vector storage and operations |
-
2022
- 2022-04-07 CN CN202210357633.2A patent/CN114443670B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880615A (zh) * | 2011-07-15 | 2013-01-16 | 腾讯科技(深圳)有限公司 | 一种数据存储方法和装置 |
CN104516912A (zh) * | 2013-09-29 | 2015-04-15 | 中国移动通信集团黑龙江有限公司 | 一种动态的数据存储方法及装置 |
CN108536692A (zh) * | 2017-03-01 | 2018-09-14 | 华为技术有限公司 | 一种执行计划的生成方法、装置及数据库服务器 |
CN108804684A (zh) * | 2018-06-13 | 2018-11-13 | 北京搜狗科技发展有限公司 | 一种数据处理方法和装置 |
CN110874358A (zh) * | 2018-08-30 | 2020-03-10 | 阿里巴巴集团控股有限公司 | 多属性列的存储、检索方法和装置以及电子设备 |
CN113742332A (zh) * | 2020-05-29 | 2021-12-03 | 北京金山云网络技术有限公司 | 数据存储方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114443670A (zh) | 2022-05-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110413611B (zh) | 数据存储、查询方法及装置 | |
US11347787B2 (en) | Image retrieval method and apparatus, system, server, and storage medium | |
CN110399104B (zh) | 数据存储方法、数据存储装置、电子设备、存储介质 | |
CN112287182A (zh) | 图数据存储、处理方法、装置及计算机存储介质 | |
CN116450656B (zh) | 数据处理方法、装置、设备及存储介质 | |
RU2633178C2 (ru) | Способ и система базы данных для индексирования ссылок на документы базы данных | |
CN111680063A (zh) | Elasticsearch分页查询数据的方法及装置 | |
CN114281819A (zh) | 数据查询方法、装置、设备及存储介质 | |
CN108038253B (zh) | 一种日志查询的处理方法及装置 | |
CN114153891A (zh) | 一种时间序列数据处理方法 | |
CN111984651A (zh) | 一种基于持久性内存的列式存储方法、装置及设备 | |
CN105912696A (zh) | 一种基于对数归并的dns索引创建方法及查询方法 | |
CN114443670B (zh) | 数据的存储、读取方法及装置 | |
CN110825747B (zh) | 一种信息存取方法、装置和介质 | |
CN112434085A (zh) | 基于Roaring Bitmap的用户数据统计方法 | |
CN111752941B (zh) | 一种数据存储、访问方法、装置、服务器及存储介质 | |
CN116975006A (zh) | 基于磁盘缓存及b树索引的数据去重方法、系统及介质 | |
CN112463837B (zh) | 一种关系型数据库数据存储查询方法 | |
CN112506922B (zh) | 面向混合固态存储系统的嵌入式IoT时序数据库设计方法 | |
CN112015791A (zh) | 数据处理方法、装置、电子设备及计算机存储介质 | |
CN111125425A (zh) | 一种视频数据的读写方法、系统、装置及可读存储介质 | |
CN112948376B (zh) | 一种ip地理位置信息查询方法、终端设备及存储介质 | |
CN112732196B (zh) | 规则数据存储方法、装置及存储介质 | |
CN116055589B (zh) | 数据管理方法、装置及计算机设备 | |
CN107391666B (zh) | 一种复合索引键值的生成方法及装置 |
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 |