数据存储方法、装置、服务器和存储介质转让专利

申请号 : CN202010266500.5

文献号 : CN113296683B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 阮羽彬吴迪陈世平梁宇坤

申请人 : 阿里巴巴集团控股有限公司

摘要 :

本发明实施例提供一种数据存储方法、装置、服务器和存储介质,该方法包括:向内存中写入第一数据;若内存中已写入的第一数据达到预设数据量,则生成第一记录信息,第一记录信息中包括预设数据量的第一数据在内存中对应的第一标识信息及数据库中已存储的第二数据在数据库中对应的第二标识信息。将预设数据量的第一数据复制到数据库,生成第二记录信息,第二记录信息中包括第二标识信息以及与预设数据量的第一数据对应的第三标识信息,第三标识信息是预设数据量的第一数据在数据库中对应的标识信息。根据第一记录信息和第二记录信息进行数据读写事务的处理。采用该方案,能保证存储数据的过程不影响数据读写事务的正常运行。

权利要求 :

1.一种数据存储方法,所述方法包括:向内存中写入第一数据,所述第一数据是待存储到数据库中的数据;

若所述内存中已写入的第一数据达到预设数据量,则生成第一记录信息,所述第一记录信息中包括第一标识信息和第二标识信息,所述第一标识信息是所述预设数据量的第一数据在所述内存中对应的标识信息,所述第二标识信息是所述数据库中已存储的第二数据在所述数据库中对应的标识信息;

将所述预设数据量的第一数据复制到所述数据库;

生成第二记录信息,所述第二记录信息中包括所述第二标识信息以及与所述预设数据量的第一数据对应的第三标识信息,所述第三标识信息是所述预设数据量的第一数据在所述数据库中对应的标识信息;

接收数据读写事务,根据所述数据读写事务的接收时间与所述第一记录信息和所述第二记录信息各自对应的生成时间,确定执行所述数据读写事务所需访问的数据;

根据所述需访问的数据,进行所述数据读写事务的处理。

2.根据权利要求1所述的方法,所述将所述预设数据量的第一数据复制到所述数据库,包括:

对所述预设数据量的第一数据进行存储格式转换;

将经过存储格式转换的数据复制到所述数据库中。

3.根据权利要求2所述的方法,所述预设数据量的第一数据包括多行数据,每行数据包括分别与多个属性对应的属性值,所述对所述预设数据量的第一数据进行存储格式转换,包括:

将所述多行数据中对应于相同属性的属性值进行组合,得到多个数据块;

所述将经过存储格式转换的数据复制到所述数据库中,包括:确定所述多个数据块在所述数据库中分别对应的存储位置,所述多个数据块对应的存储位置位于同一行;

将所述多个数据块分别存储到各自对应的存储位置上。

4.根据权利要求3所述的方法,所述方法还包括:获取所述多个数据块各自对应的数据统计信息;

将所述多个数据块各自对应的数据统计信息对应地存储到所述多个数据块各自对应的存储位置上。

5.根据权利要求4所述的方法,所述方法还包括:响应于与所述多个数据块对应的数据读写事务,根据所述数据统计信息滤除不满足所述数据读写事务的数据块。

6.根据权利要求2所述的方法,所述方法还包括:确定所述预设数据量的第一数据所对应的服务的查询特征信息;

根据所述查询特征信息,确定是否对所述预设数据量的第一数据进行存储格式转换。

7.根据权利要求1所述的方法,所述将所述预设数据量的第一数据复制到所述数据库,包括:

对所述预设数据量的第一数据进行压缩;

将压缩后的数据复制到所述数据库。

8.根据权利要求1至7中任一项所述的方法,所述根据所述数据读写事务的接收时间与所述第一记录信息和所述第二记录信息各自对应的生成时间,确定执行所述数据读写事务所需访问的数据,包括:

根据所述数据读写事务的接收时间与所述第一记录信息和所述第二记录信息各自对应的生成时间,确定与所述数据读写事务相匹配的参考记录信息,所述参考记录信息为所述第一记录信息或者所述第二记录信息;

基于所述参考记录信息中包含的标识信息,确定执行所述数据读写事务所需访问的数据。

9.根据权利要求8所述的方法,所述确定与所述数据读写事务相匹配的参考记录信息,包括:

若所述数据读写事务的接收时间在所述第二记录信息的生成时间之前,则确定所述参考记录信息为所述第一记录信息;

若所述数据读写事务的接收时间在所述第二记录信息的生成时间之后,则确定所述参考记录信息为所述第二记录信息。

10.根据权利要求9所述的方法,所述参考记录信息为所述第一记录信息,所述方法还包括:

若所述数据读写事务提交,则删除所述第一记录信息和所述内存中的所述预设数据量的第一数据。

11.一种数据存储装置,所述装置包括:写入模块,用于向内存中写入第一数据,所述第一数据是待存储到数据库中的数据;

生成模块,用于当所述内存中已写入的第一数据达到预设数据量时,生成第一记录信息,所述第一记录信息中包括第一标识信息和第二标识信息,所述第一标识信息是所述预设数据量的第一数据在所述内存中对应的标识信息,所述第二标识信息是所述数据库中已存储的第二数据在所述数据库中对应的标识信息;

复制模块,用于将所述预设数据量的第一数据复制到所述数据库;

所述生成模块,用于生成第二记录信息,所述第二记录信息中包括所述第二标识信息以及与所述预设数据量的第一数据对应的第三标识信息,所述第三标识信息是所述预设数据量的第一数据在所述数据库中对应的标识信息;

处理模块,用于接收数据读写事务,根据所述数据读写事务的接收时间与所述第一记录信息和所述第二记录信息各自对应的生成时间,确定执行所述数据读写事务所需访问的数据;根据所述需访问的数据,进行所述数据读写事务的处理。

12.一种服务器,包括:存储器、处理器;其中,所述存储器上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求1‑10中任一项所述的数据存储方法。

13.一种非暂时性机器可读存储介质,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被服务器的处理器执行时,使所述处理器执行如权利要求1‑10中任一项所述的数据存储方法。

说明书 :

数据存储方法、装置、服务器和存储介质

技术领域

[0001] 本发明涉及数据处理技术领域,尤其涉及一种数据存储方法、装置、服务器和存储介质。

背景技术

[0002] 在向磁盘写入数据之前,可以先将数据写入到内存中。当内存中的数据积累到一定量之后,会触发将内存中的数据转移到磁盘中,此操作可以称为数据转移(Delta 
Merge)。
[0003] 在Delta Merge的过程中,被转移的数据暂时会处于既不属于内存也不属于磁盘的存储空间中。此时,如果接收到数据读写事务,会发生无法查询到被转移的数据的情况,
因此Delta Merge的过程会影响数据读写事务的正常运行。

发明内容

[0004] 本发明实施例提供一种数据存储方法、装置、设备和存储介质,以保证向数据库存储数据的过程不影响数据读写事务的正常运行。
[0005] 第一方面,本发明实施例提供一种数据存储方法,所述方法包括:
[0006] 向内存中写入第一数据,所述第一数据是待存储到数据库中的数据;
[0007] 若所述内存中已写入的第一数据达到预设数据量,则生成第一记录信息,所述第一记录信息中包括第一标识信息和第二标识信息,所述第一标识信息是所述预设数据量的
第一数据在所述内存中对应的标识信息,所述第二标识信息是所述数据库中已存储的第二
数据在所述数据库中对应的标识信息;
[0008] 将所述预设数据量的第一数据复制到所述数据库;
[0009] 生成第二记录信息,所述第二记录信息中包括所述第二标识信息以及与所述预设数据量的第一数据对应的第三标识信息,所述第三标识信息是所述预设数据量的第一数据
在所述数据库中对应的标识信息;
[0010] 根据所述第一记录信息和所述第二记录信息,进行数据读写事务的处理。
[0011] 第二方面,本发明实施例提供一种数据存储装置,所述装置包括:
[0012] 写入模块,用于向内存中写入第一数据,所述第一数据是待存储到数据库中的数据;
[0013] 生成模块,用于当所述内存中已写入的第一数据达到预设数据量时,生成第一记录信息,所述第一记录信息中包括第一标识信息和第二标识信息,所述第一标识信息是所
述预设数据量的第一数据在所述内存中对应的标识信息,所述第二标识信息是所述数据库
中已存储的第二数据在所述数据库中对应的标识信息;
[0014] 复制模块,用于将所述预设数据量的第一数据复制到所述数据库;
[0015] 所述生成模块,用于生成第二记录信息,所述第二记录信息中包括所述第二标识信息以及与所述预设数据量的第一数据对应的第三标识信息,所述第三标识信息是所述预
设数据量的第一数据在所述数据库中对应的标识信息;
[0016] 处理模块,用于根据所述第一记录信息和所述第二记录信息,进行数据读写事务的处理。
[0017] 第三方面,本发明实施例提供一种服务器,包括:存储器、处理器;其中,所述存储器上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行本发
明实施例第一方面所述的数据存储方法。
[0018] 第四方面,本发明实施例提供一种非暂时性机器可读存储介质,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被服务器的处理器执行时,使所
述处理器执行本发明实施例第一方面所述的数据存储方法。
[0019] 通过本发明实施例提供的方法,在将内存中的数据存储到数据库的过程中,当内存中的数据达到预设数据量时,以该预设数据量为单位,采用复制的方式,将内存中预设数
据量的数据复制到数据库中,使得一份数据还保留在内存中,仅对另一份数据进行转移,这
样还是能够在内存中查询到当前被转移的数据的,避免了在数据转移过程中无法查询到被
转移的数据的问题。在本发明实施例提供的方法中还可以通过第一记录信息和第二记录信
息记录数据转移过程中以及数据转移完成后内存及数据库中存储的数据标识信息(反映了
数据的存储位置),从而,当某数据读写事务被触发时,可以基于该数据读写事务的触发时
间,利用相应的记录信息执行数据读写事务,以便完成事务提交。

附图说明

[0020] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本
领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的
附图。
[0021] 图1为本发明实施例提供的一种数据存储方法的流程图;
[0022] 图2为本发明实施例提供的一种生成记录信息的示意图;
[0023] 图3为本发明实施例提供的一种数据复制方法的流程图;
[0024] 图4本发明实施例提供的一种存储格式转换的示意图;
[0025] 图5本发明实施例提供的一种数据存储方法的示意图;
[0026] 图6为本发明实施例提供的一种数据存储装置的结构示意图;
[0027] 图7为本发明实施例提供的一种服务器的结构示意图。

具体实施方式

[0028] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是
本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员
在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0029] 在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”
也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种。
[0030] 取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如
果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述
的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
[0031] 另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。
[0032] 先对本文中涉及到的一个概念进行说明:
[0033] 数据读写事务,也可以简称为事务,是为了实现特定的服务功能而访问数据库的最小逻辑工作单位,由一个操作序列构成。只有这个操作序列包含的全部操作都成功完成,
才能使得数据库从一种状态转换为另一种状态。如果这个操作序列中的任意一个操作发生
错误,那么就需要回滚之前已经完成的操作。也就是说,同一个事务中的所有操作,要么全
都正确执行,要么全都不要执行。
[0034] 本发明实施例提供的事务处理方法可以由服务器来执行,该服务器作为数据库的硬件载体,具体地,可以在该服务器中部署一种应用程序、启动某个进程来执行该事务处理
方法。
[0035] 本发明实施例提供的数据存储方法可以应用于向数据库中存储数据的场景。在需要向数据库中存储数据时,数据不是直接被存储到数据库中的,而是首先会被写入到内存
中,每当内存中写入的数据达到一定量时,会触发将一定量的数据从内存中转移到数据库
中的数据转移操作。相关技术中如果触发了数据转移操作,且在数据转移的过程中接收到
了数据读写事务,则被转移的这部分数据是无法读取的,这样会造成数据的缺失,就不能成
功执行数据读写事务,概括而言,数据存储的过程会对数据读写事务的执行过程造成干扰。
本发明实施例提供的数据存储方法可以避免这一问题,使得数据存储的过程对数据读写事
务的执行过程不造成干扰。
[0036] 下面结合以下一些实施例来说明本文提供的数据存储方法的执行过程。
[0037] 图1为本发明实施例提供的一种数据存储方法的流程图,如图1所示,该方法包括如下步骤:
[0038] 101、向内存中写入第一数据,第一数据是待存储到数据库中的数据。
[0039] 102、若内存中已写入的第一数据达到预设数据量,则生成第一记录信息,第一记录信息中包括第一标识信息和第二标识信息,第一标识信息是预设数据量的第一数据在内
存中对应的标识信息,第二标识信息是数据库中已存储的第二数据在数据库中对应的标识
信息。
[0040] 103、将预设数据量的第一数据复制到数据库。
[0041] 104、生成第二记录信息,第二记录信息中包括第二标识信息以及与所述预设数据量的第一数据对应的第三标识信息,第三标识信息是该预设数据量的第一数据在数据库中
对应的标识信息。
[0042] 105、根据第一记录信息和第二记录信息,进行数据读写事务的处理。
[0043] 先概述本实施例提供的数据推荐方案的核心思想:在将内存中写入的第一数据存储到数据库的过程中,当内存中的第一数据达到预设数据量时,对内存中预设数据量的第
一数据进行复制。为了描述方便,下文用Memtable表示内存中预设数据量的第一数据,用
Memtable’表示对内存中预设数据量的第一数据进行复制得到的数据。在得到Memtable’之
后,可以将Memtable’从内存中转移到数据库中。同时,还可通过第一记录信息和第二记录
信息分别记录数据转移过程中以及数据转移完成后内存及数据库中存储的数据的标识信
息(反映了数据的存储位置),从而,当某数据读写事务被触发时,可以基于该数据读写事务
的触发时间,利用相应的记录信息进行数据读写。
[0044] 实际应用中,上述预设数据量可以根据实际需求进行设定,例如可以是500MB等。合理的设定该预设数据量,可以提高数据存储的效率,也避免对数据读写事务的长时间干
扰。
[0045] 本实施例中的上述标识信息可以是但不限于是存储位置或者位置索引等,通过标识信息可以定位到对应的数据。以上述Memtable为例,其对应的第一标识信息可以是
Memtable在内存中的存储位置。
[0046] 在本发明实施例中,每次可以只复制一个Memtable到数据库中。如果在触发复制Memtable到数据库之后,内存中还继续写入了更多的第一数据,而后写入的第一数据又未
达到预设数据量,此时则可以将先写入的一个Memtable复制到数据库,待达到下一个
Memtable复制时机时,触发再次执行本发明实施例提供的方法。
[0047] 在将Memtable复制到数据库的过程中,通过复制的方式,对Memtable进行复制得到Memtable’。Memtable仍然保留在内存中,对Memtable’进行转移。在数据转移的过程中,
无论在内存中亦或是数据库中都是读取不到这部分数据的。然而通过本发明实施例,由于
在内存中还保留有Memtable,因此可以通过读取内存中的Memtable来执行数据读写事务,
并不影响数据读写事务的正常执行。
[0048] 为了节省数据库的存储空间,可选地,上述将Memtable复制到数据库的过程还可以实现为:对Memtable进行压缩;将压缩后的Memtable复制到数据库。
[0049] 经过数据复制操作,内存和数据库中存在同样的数据,即被复制的Memtable。为了避免在执行数据读写事务时由于重复读取相同数据而导致的事务执行错误,可以通过第一
记录信息和第二记录信息来区分这些数据。第一记录信息或第二记录信息包括了执行数据
读写事务时所需操作数据的标识信息。
[0050] 下面将结合执行数据读写事务的具体过程,来说明第一记录信息和第二记录信息的作用。
[0051] 根据第一记录信息和第二记录信息,进行数据读写事务处理的过程可以实现为:接收数据读写事务,根据数据读写事务的接收时间与第一记录信息和第二记录信息各自对
应的生成时间,确定与数据读写事务相匹配的参考记录信息。基于参考记录信息,执行数据
读写事务,即根据参考记录信息中包含的标识信息,确定执行该数据读写事务所需访问的
数据,以便基于这些数据来执行数据读写事务。参考记录信息为第一记录信息或者第二记
录信息。
[0052] 在基于参考记录信息执行数据读写事务之前,需要在第一记录信息和第二记录信息之中,为数据读写事务选定与数据读写事务相匹配的参考记录信息。选定参考记录信息
的过程可以实现为:若数据读写事务的接收时间在第二记录信息的生成时间之前,则确定
参考记录信息为第一记录信息;若数据读写事务的接收时间在第二记录信息的生成时间之
后,则确定参考记录信息为第二记录信息。
[0053] 在实际应用中,假设某时刻接收到数据读写事务,进而可以将数据读写事务的接收时间和第二记录信息的生成时间进行比较。如果数据读写事务的接收时间在第二记录信
息的生成时间之前,则可以将第一记录信息选定为参考记录信息,如果数据读写事务的接
收时间在第二记录信息的生成时间之后,则可以将第二记录信息选定为参考记录信息。可
以理解的是,既然可以获取第二记录信息的生成时间,表示在生成第二记录信息时,可以对
第二记录信息和对应的生成时间进行存储,后续可以基于此确定第二记录信息的生成时
间。
[0054] 在确定了与数据读写事务相匹配的参考记录信息之后,就可以确定执行该数据读写事务时所需操作的数据的存储位置,接着就可以到这些存储位置上去查询数据,对查询
到的数据进行处理等,以完成数据读写事务。
[0055] 为了方便理解,下面结合具体例子和图2,示例性说明执行数据读写事务的过程。
[0056] 在图2中,在时刻1,内存中存在1个Memtable’,标记为M0,数据库中存在3个已从内存中转移过来的数据,标记为R0、R1和R2。在将M0转移到数据库之前,可以生成记录信息A:
M0、R0、R1和R2。接着,可以对M0进行复制,假设将复制得到的数据标记为R3。随后,可以将R3
转移到数据库中,这样在数据库中增多了R3。在完成复制操作的时刻2,可以生成记录信息
B:R0、R1、R2和R3。如果在某时刻接收到数据读写事务X,可以判断数据读写事务X的接收时
间是否在时刻2之后,如果数据读写事务X的接收时间在时刻2之前,则使用记录信息A执行
数据读写事务X,也即在M0、R0、R1和R2中查询所需操作的数据。如果数据读写事务X的接收
时间在时刻2之后,则使用记录信息B执行数据读写事务X,也即在R0、R1、R2和R3中查询操作
所需的数据。无论使用记录信息A还是记录信息B执行数据读写事务X,都可以保证不存在重
复查询数据的情况以及保证查询的数据是存储的所有数据,避免了发生数据缺失的情况。
[0057] 为了减少存储空间的占用,可选地,若基于第一记录信息执行的数据读写事务(即在生成第二记录信息之前触发的数据读写事务)都已经提交,则可以删除第一记录信息以
及与第一记录信息对应的内存中的Memtable。
[0058] 在某些情况下,可能会同时存在多个记录信息。比如如果将一个Memtable复制到数据库的速率比新的Memtable的产生速率慢时,内存中会出现多个Memtable堆积的现象,
多个Memtable排队依次被复制到数据库中,多个Memtable堆积的现象可能会引发同时存在
多个记录信息。那么,任一个记录信息的有效时间可以认为是:自生成之后至下一个记录信
息生成前,这段时间内接收到的数据读写事务都将使用该记录信息。
[0059] 通过本发明实施例提供的方法,在将内存中的数据存储到数据库的过程中,将Memtable保留在内存中,仅对Memtable’进行转移,这样还是能够在内存中查询到Memtable
的,避免了在数据转移过程中数据缺失的问题。另外,在本发明实施例提供的方法中,当接
收到某数据读写事务时,可以基于该数据读写事务的接收时间,利用相应的记录信息进行
数据读写,以便完成事务提交。
[0060] 下面结合图3所示实施例,示例性说明一种将Memtable复制到数据库的方案。如图3所示,该复制方案可以包括如下步骤:
[0061] 301、对预设数据量的第一数据进行存储格式转换。
[0062] 302、将经过存储格式转换的数据复制到数据库中。
[0063] 在实际应用中,如果数据在内存中的存储格式与数据在数据库中的存储格式不一致,则可以对Memtable’先进行存储格式转换,以将Memtable’转换为符合数据库中的存储
格式的数据,再将经过存储格式转换的Memtable’复制到数据库中。
[0064] 实际应用中,数据库可以包括行式数据库、列式数据库等。其中,列式数据库比如可以是Histore数据库。如果数据库为列式数据库,数据在列式数据库中的存储格式和数据
在内存中的存储格式不同,则可以对Memtable’进行存储格式转换,再将经过存储格式转换
的Memtable’存储到列式数据库中。
[0065] 下面将介绍数据在列式数据库中的存储格式和数据在内存中的存储格式,以及具体如何得进行存储格式转换的过程。
[0066] 在实际应用中,数据在内存中是以行的方式进行存储的,数据在列式数据库中是以列的方式进行存储的。假设Memtable’包括了多行数据,每行数据包括分别与多个属性对
应的属性值,在内存中这些数据是一行一行进行存储的,也即将同一行数据的多个属性值
紧密排列在一起作为一个整体进行存储。
[0067] 为了便于理解,以将学生的数学学科的考试成绩录入数据库为例进行说明,假设一个班级有10名学生,现针对该10名学生的数学考试情况建立学生成绩单,该学生成绩单
中共包括10行数据,每行数据对应一个学生。对于每个学生来说,需要在学生成绩单中记录
他的姓名、学号、班级和数学成绩。相应地,姓名、学号、班级和数学成绩则可以作为本实施
例中所描述的属性,而姓名、学号、班级和数学成绩分别对应的具体内容可以作为属性值。
例如,姓名对应的属性值可以为学生A,学号对应的属性值可以为20200114,班级对应的属
性值可以为2年级3班,数学成绩为90,则这一行数据为(学生A,20200114,2年级3班,90)。
[0068] 针对上述Memtable’中所包含的多行数据,在进行存储格式转换时,分别将多行数据中对应于相同属性的多个属性值组合在一起,得到多个数据块,将这多个数据块存储到
列式数据库中。
[0069] 为了更加直观地理解存储格式转换的过程,结合图4来示例性说明。
[0070] 在内存中,数据以[姓名,学号,班级,数学成绩]的存储格式进行存储,即一条数据中包含多个属性的属性值。在图4所示的内存中实际包括两行数据:第一行数据为:[学生A,
20200114,2年级3班,90],第二行数据为:[学生B,20200115,2年级3班,95]。在进行存储格
式转换时,可以将对应于姓名的学生A和学生B组合在一起,得到数据块a;将对应于学号的
20200114和20200115组合在一起,得到数据块b;将对应于班级的2年级3班和2年级3班组合
在一起,得到数据块c;将对应于数学成绩的90和95组合在一起,得到数据块d。
[0071] 在得到多个数据块之后,可以确定多个数据块在数据库中分别对应的存储位置,将多个数据块分别存储到各自对应的存储位置上。
[0072] 在实际应用中,每个存储位置可以存储一个数据块,多个数据块对应的存储位置位于同一行。可以将位于同一行的多个数据块称为是一个行组(Rowgroup)。
[0073] 虽然一个行组包括多个数据块,其中每个数据块对应不同的属性,但是一个行组内的多个数据块对应着N行完整的数据。同时,通过将多个数据块排列在同一行的方式,可
以保证多个行组的同一列数据块对应于相同的属性。
[0074] 下面结合图5来示例性说明将Memtable复制到数据库的过程。假设当前有一个数据表,该数据表已写入了1017行数据,其中0‑999行数据已经被存储到数据库中,且在数据
库中对应于行组0、行组1、行组2和行组3所示意的多个数据块,其中,每个行组包含四个数
据块。假设1000‑1017行数据存储在内存中。在内存中,假设每6行数据就构成一个
Memtable,因此内存中共有3个Memtable。第一个Memtable对应1000‑1005行数据,第二个
Memtable对应1006‑1011行数据,第三个Memtable对应1012‑1017行数据。需要将这3个
Memtable依次复制到数据库中,复制顺序为第一个Memtable、第二个Memtable、第三个
Memtable。以第一个Memtable的复制过程为例,首先可以对第一个Memtable进行存储格式
转换,假设得到4个数据块,包括数据块a、数据块b、数据块c和数据块d。此时,可以将数据块
a、数据块b、数据块c和数据块d作为行组4存储在数据库中,且保证对应相同属性的数据块
排列在同一列。
[0075] 基于此,在列式数据库中,排列在同一列的数据块它们的属性是相同的,比如说第4列的数据块中的数据都是学生的数学成绩。这样,在某些数据读写场景下,便于对执行数
据读写事务时所需操作的数据进行查询。
[0076] 为了进一步提高查询数据的效率,可以对每个数据块进行数据统计,得到每个数据块对应的数据统计信息,在查询执行数据读写事务时所需操作的数据的过程中,可以基
于数据统计信息在数据库中,过滤掉一部分用不到的数据块不进行扫描,只扫描剩余的数
据块。可选地,在生成多个数据块之后,可以获取多个数据块各自对应的数据统计信息,将
多个数据块各自对应的数据统计信息对应地存储到多个数据块各自对应的存储位置上。
[0077] 数据统计信息可以包括数据块中的最大值、最小值、平均值、均方差等统计信息。对于多个数据块中的任一数据块i,在得到数据块i之后,可以计算它的最大值、最小值、平
均值、均方差等统计信息,将数据块i对应的数据统计信息对应地存储到数据块i对应的存
储位置上。
[0078] 基于此,查询数据的过程具体可以实现为:响应于与多个数据块对应的数据读写事务,根据数据统计信息滤除不满足数据读写事务的数据块。
[0079] 在查询数据的过程中,可以优先读取各数据块的数据统计信息而无需读取各数据块内部的数据,如果基于任一数据块对应的数据统计信息确定该数据块不满足当前的数据
读写事务的数据块,则可以过滤掉该数据块,即不读取该数据块内部的数据。
[0080] 以查询学生的数学成绩为例,假设当前数据库中有4列数据块,每列包括5个数据块,其中有一列数据块对应的属性为数学成绩,当前的数据读写事务为统计数学考满分(为
100分)的学生的数量。此时,可以先定位到属性为数学成绩的那一列数据块,假设属性为数
学成绩的那一列数据块为第4列数据块。接着,获取第4列数据块中的每个数据块分别对应
的数据统计信息,以确定第4列数据块中的每个数据块中的最大值,比如分别为95、88、100、
99、100。基于此可以确定该第4列数据块中的第一个数据块、第二个数据块以及第四个数据
块的最大值都未到达满分,因此这三个数据块中不可能存在满分的数学成绩,进而可以直
接过滤掉这三个数据块,还剩下第三个数据块和第五个数据块。最后,可以读取第三个数据
块和第五个数据块中的数学成绩,统计有多少个满分的数学成绩。
[0081] 通过上述示例可以看出,当执行数据读写事务时所需操作的数据对应于同一属性时,可以直接查询同列数据块来执行数据读写事务,数据查询的效率较高。然而,如果执行
数据读写事务时所需操作的数据对应至少两个属性,则可能选择以行的方式来存储数据更
为有利。还以查询学生的考试成绩为例,假设当前的数据读写事务为统计考试不及格的学
生名单,此时执行数据读写事务时所需操作的数据不仅包括考试成绩,还包括对应的学生
的姓名,即对应着两种属性,而如果以行的方式来存储数据,这样就可以直接读取学生的姓
名和考试成绩,如果考试成绩不合格,则直接输出对应的学生的姓名即可。
[0082] 上文提及过行式数据块和列式数据库,实际应用中还存在另外一种数据库为行列混合式数据库。在这种行列混合式数据库中,可以选择以行的方式存储数据,也可以选择以
列的方式存储数据。如果选择了以行的方式存储数据,则将数据从内存复制到行列混合式
数据库的过程中,可以不对数据的存储格式进行转换。如果选择了以列的方式存储数据,则
将数据从内存复制到行列混合式数据库的过程中,需要对数据的存储格式进行转换。
[0083] 以何种存储格式在行列混合式数据库中存储数据,或者说在存储数据之前,是否需要对数据进行存储格式转换,可以根据第一数据所对应的服务的查询特征信息来确定。
可选地,在将Memtable转移到数据库之前,可以确定Memtable所对应的服务的查询特征信
息;根据查询特征信息,确定是否对Memtable进行存储格式转换。
[0084] 实际应用中,一个Memtable中的数据往往来自于同一服务,不同服务往往具有不同的查询特征信息。在实际应用中,针对某一服务的数据读取事务,可以统计执行这些数据
读取事务时的特征,比如执行大部分数据读取事务时所需操作的数据都对应同一属性,或
者执行大部分数据读取事务时所需操作的数据对应不同属性。基于此,当执行大部分数据
读取事务时所需操作的数据都对应同一属性时,可以认为该服务的数据适合以行的方式进
行存储,当执行大部分数据读取事务时所需操作的数据对应不同属性时,可以认为该服务
的数据适合以列的方式进行存储。
[0085] 可以理解的是,可以建立服务和查询特征信息的对应关系,在将Memtable转移到数据库之前,可以确定Memtable所属的服务,接着可以基于上述对应关系,确定与Memtable
所属的服务对应的查询特征信息。在确定查询特征信息之后,可以根据查询特征信息,确定
是否对Memtable进行存储格式转换。如果确定需要对Memtable进行存储格式转换,则可以
对Memtable进行存储格式转换,如果确定不需要对Memtable进行存储格式转换,则可以直
接将Memtable转移到数据库中。
[0086] 通过本发明实施例提供的方法,可以按需将内寸中以行的方式存储的数据转换为以列的方式存储的数据块,将转换后的数据块存入到列式数据块中,可以提高数据查询的
效率。
[0087] 以下将详细描述本发明的一个或多个实施例的数据存储装置。本领域技术人员可以理解,这些数据存储装置均可使用市售的硬件组件通过本方案所教导的步骤进行配置来
构成。
[0088] 图6为本发明实施例提供的一种数据存储装置的结构示意图,如图6所示,该装置包括:写入模块601、生成模块602、复制模块603。
[0089] 写入模块601,用于向内存中写入第一数据,第一数据是待存储到数据库中的数据。
[0090] 生成模块602,用于当内存中已写入的第一数据达到预设数据量时,生成第一记录信息,第一记录信息中包括第一标识信息和第二标识信息,第一标识信息是预设数据量的
第一数据在内存中对应的标识信息,第二标识信息是数据库中已存储的第二数据在数据库
中对应的标识信息。
[0091] 复制模块603,用于将预设数据量的第一数据复制到数据库。
[0092] 生成模块602,用于生成第二记录信息,第二记录信息中包括第二标识信息以及与预设数据量的第一数据对应的第三标识信息,第三标识信息是预设数据量的第一数据在数
据库中对应的标识信息。
[0093] 处理模块604,根据所述第一记录信息和所述第二记录信息,进行数据读写事务的处理。
[0094] 可选地,复制模块603具体用于:对预设数据量的第一数据进行存储格式转换;将经过存储格式转换的数据复制到数据库中。
[0095] 可选地,预设数据量的第一数据包括多行数据,每行数据包括分别与多个属性对应的属性值,复制模块603还用于:将多行数据中对应于相同属性的属性值进行组合,得到
多个数据块;确定多个数据块在数据库中分别对应的存储位置,多个数据块对应的存储位
置位于同一行;将多个数据块分别存储到各自对应的存储位置上。
[0096] 可选地,复制模块603还用于:对预设数据量的第一数据进行压缩;将压缩后的数据复制到数据库。
[0097] 可选地,所述装置还包括:统计模块,用于获取多个数据块各自对应的数据统计信息;将多个数据块各自对应的数据统计信息对应地存储到多个数据块各自对应的存储位置
上。
[0098] 可选地,所述装置还包括:滤除模块,用于响应于与多个数据块对应的数据读写事务,根据数据统计信息滤除不满足数据读写事务的数据块。
[0099] 可选地,所述装置还包括:确定模块,用于确定预设数据量的第一数据所对应的服务的查询特征信息;根据查询特征信息,确定是否对预设数据量的第一数据进行存储格式
转换。
[0100] 可选地,所述处理模块604具体用于:接收数据读写事务;根据所述数据读写事务的接收时间与所述第一记录信息和所述第二记录信息各自对应的生成时间,确定与数据读
写事务相匹配的参考记录信息,参考记录信息为第一记录信息或者第二记录信息;基于参
考记录信息中包含的标识信息,确定执行所述数据读写事务所需访问的数据。
[0101] 可选地,所述事务处理模块具体用于:若数据读写事务的接收时间在第二记录信息的生成时间之前,则确定参考记录信息为第一记录信息;若数据读写事务的接收时间在
第二记录信息的生成时间之后,则确定参考记录信息为第二记录信息。
[0102] 可选地,参考记录信息为第一记录信息,所述事务处理模块还用于:当数据读写事务提交时,删除第一记录信息和内存中的预设数据量的第一数据。
[0103] 图6所示装置可以执行前述图1至图5所示实施例中提供的数据存储方法,详细的执行过程和技术效果参见前述实施例中的描述,在此不再赘述。
[0104] 在一个可能的设计中,上述图6所示数据存储装置的结构可实现为一服务器,如图7所示,该服务器可以包括:处理器701、存储器702。其中,所述存储器702上存储有可执行代
码,当所述可执行代码被所述处理器701执行时,使所述处理器701至少可以实现如前述图1
至图5所示实施例中提供的数据存储方法。
[0105] 可选地,该服务器中还可以包括通信接口703,用于与其他设备进行通信。
[0106] 另外,本发明实施例提供了一种非暂时性机器可读存储介质,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被服务器的处理器执行时,使所述
处理器至少可以实现如前述图1至图5所示实施例中提供的数据存储方法。
[0107] 以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的。可以根据实际的需要选择其中的部分或者全部模块来实现
本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解
并实施。
[0108] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助加必需的通用硬件平台的方式来实现,当然也可以通过硬件和软件结合的方式来实
现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以计算
机产品的形式体现出来,本发明可采用在一个或多个其中包含有计算机可用程序代码的计
算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程
序产品的形式。
[0109] 本发明实施例提供的数据存储方法可以由某种程序/软件来执行,该程序/软件可以由网络侧提供,前述实施例中提及的电子设备可以将该程序/软件下载到本地的非易失
性存储介质中,并在其需要执行前述数据存储方法时,通过CPU将该程序/软件读取到内存
中,进而由CPU执行该程序/软件以实现前述实施例中所提供的数据存储方法,执行过程可
以参见前述图1至图5中的示意。
[0110] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可
以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;
而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和
范围。