数据存储方法、装置、服务器和存储介质转让专利
申请号 : CN202010266500.5
文献号 : CN113296683B
文献日 : 2022-04-29
发明人 : 阮羽彬 , 吴迪 , 陈世平 , 梁宇坤
申请人 : 阿里巴巴集团控股有限公司
摘要 :
权利要求 :
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中任一项所述的数据存储方法。
说明书 :
数据存储方法、装置、服务器和存储介质
技术领域
背景技术
Merge)。
因此Delta Merge的过程会影响数据读写事务的正常运行。
发明内容
第一数据在所述内存中对应的标识信息,所述第二标识信息是所述数据库中已存储的第二
数据在所述数据库中对应的标识信息;
在所述数据库中对应的标识信息;
述预设数据量的第一数据在所述内存中对应的标识信息,所述第二标识信息是所述数据库
中已存储的第二数据在所述数据库中对应的标识信息;
设数据量的第一数据在所述数据库中对应的标识信息;
明实施例第一方面所述的数据存储方法。
述处理器执行本发明实施例第一方面所述的数据存储方法。
据量的数据复制到数据库中,使得一份数据还保留在内存中,仅对另一份数据进行转移,这
样还是能够在内存中查询到当前被转移的数据的,避免了在数据转移过程中无法查询到被
转移的数据的问题。在本发明实施例提供的方法中还可以通过第一记录信息和第二记录信
息记录数据转移过程中以及数据转移完成后内存及数据库中存储的数据标识信息(反映了
数据的存储位置),从而,当某数据读写事务被触发时,可以基于该数据读写事务的触发时
间,利用相应的记录信息执行数据读写事务,以便完成事务提交。
附图说明
领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的
附图。
具体实施方式
本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员
在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种。
果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述
的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
才能使得数据库从一种状态转换为另一种状态。如果这个操作序列中的任意一个操作发生
错误,那么就需要回滚之前已经完成的操作。也就是说,同一个事务中的所有操作,要么全
都正确执行,要么全都不要执行。
方法。
中,每当内存中写入的数据达到一定量时,会触发将一定量的数据从内存中转移到数据库
中的数据转移操作。相关技术中如果触发了数据转移操作,且在数据转移的过程中接收到
了数据读写事务,则被转移的这部分数据是无法读取的,这样会造成数据的缺失,就不能成
功执行数据读写事务,概括而言,数据存储的过程会对数据读写事务的执行过程造成干扰。
本发明实施例提供的数据存储方法可以避免这一问题,使得数据存储的过程对数据读写事
务的执行过程不造成干扰。
存中对应的标识信息,第二标识信息是数据库中已存储的第二数据在数据库中对应的标识
信息。
对应的标识信息。
一数据进行复制。为了描述方便,下文用Memtable表示内存中预设数据量的第一数据,用
Memtable’表示对内存中预设数据量的第一数据进行复制得到的数据。在得到Memtable’之
后,可以将Memtable’从内存中转移到数据库中。同时,还可通过第一记录信息和第二记录
信息分别记录数据转移过程中以及数据转移完成后内存及数据库中存储的数据的标识信
息(反映了数据的存储位置),从而,当某数据读写事务被触发时,可以基于该数据读写事务
的触发时间,利用相应的记录信息进行数据读写。
扰。
Memtable在内存中的存储位置。
达到预设数据量,此时则可以将先写入的一个Memtable复制到数据库,待达到下一个
Memtable复制时机时,触发再次执行本发明实施例提供的方法。
无论在内存中亦或是数据库中都是读取不到这部分数据的。然而通过本发明实施例,由于
在内存中还保留有Memtable,因此可以通过读取内存中的Memtable来执行数据读写事务,
并不影响数据读写事务的正常执行。
记录信息和第二记录信息来区分这些数据。第一记录信息或第二记录信息包括了执行数据
读写事务时所需操作数据的标识信息。
应的生成时间,确定与数据读写事务相匹配的参考记录信息。基于参考记录信息,执行数据
读写事务,即根据参考记录信息中包含的标识信息,确定执行该数据读写事务所需访问的
数据,以便基于这些数据来执行数据读写事务。参考记录信息为第一记录信息或者第二记
录信息。
的过程可以实现为:若数据读写事务的接收时间在第二记录信息的生成时间之前,则确定
参考记录信息为第一记录信息;若数据读写事务的接收时间在第二记录信息的生成时间之
后,则确定参考记录信息为第二记录信息。
息的生成时间之前,则可以将第一记录信息选定为参考记录信息,如果数据读写事务的接
收时间在第二记录信息的生成时间之后,则可以将第二记录信息选定为参考记录信息。可
以理解的是,既然可以获取第二记录信息的生成时间,表示在生成第二记录信息时,可以对
第二记录信息和对应的生成时间进行存储,后续可以基于此确定第二记录信息的生成时
间。
到的数据进行处理等,以完成数据读写事务。
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,都可以保证不存在重
复查询数据的情况以及保证查询的数据是存储的所有数据,避免了发生数据缺失的情况。
及与第一记录信息对应的内存中的Memtable。
多个Memtable排队依次被复制到数据库中,多个Memtable堆积的现象可能会引发同时存在
多个记录信息。那么,任一个记录信息的有效时间可以认为是:自生成之后至下一个记录信
息生成前,这段时间内接收到的数据读写事务都将使用该记录信息。
的,避免了在数据转移过程中数据缺失的问题。另外,在本发明实施例提供的方法中,当接
收到某数据读写事务时,可以基于该数据读写事务的接收时间,利用相应的记录信息进行
数据读写,以便完成事务提交。
格式的数据,再将经过存储格式转换的Memtable’复制到数据库中。
在内存中的存储格式不同,则可以对Memtable’进行存储格式转换,再将经过存储格式转换
的Memtable’存储到列式数据库中。
应的属性值,在内存中这些数据是一行一行进行存储的,也即将同一行数据的多个属性值
紧密排列在一起作为一个整体进行存储。
中共包括10行数据,每行数据对应一个学生。对于每个学生来说,需要在学生成绩单中记录
他的姓名、学号、班级和数学成绩。相应地,姓名、学号、班级和数学成绩则可以作为本实施
例中所描述的属性,而姓名、学号、班级和数学成绩分别对应的具体内容可以作为属性值。
例如,姓名对应的属性值可以为学生A,学号对应的属性值可以为20200114,班级对应的属
性值可以为2年级3班,数学成绩为90,则这一行数据为(学生A,20200114,2年级3班,90)。
列式数据库中。
20200114,2年级3班,90],第二行数据为:[学生B,20200115,2年级3班,95]。在进行存储格
式转换时,可以将对应于姓名的学生A和学生B组合在一起,得到数据块a;将对应于学号的
20200114和20200115组合在一起,得到数据块b;将对应于班级的2年级3班和2年级3班组合
在一起,得到数据块c;将对应于数学成绩的90和95组合在一起,得到数据块d。
以保证多个行组的同一列数据块对应于相同的属性。
库中对应于行组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存储在数据库中,且保证对应相同属性的数据块
排列在同一列。
据读写事务时所需操作的数据进行查询。
于数据统计信息在数据库中,过滤掉一部分用不到的数据块不进行扫描,只扫描剩余的数
据块。可选地,在生成多个数据块之后,可以获取多个数据块各自对应的数据统计信息,将
多个数据块各自对应的数据统计信息对应地存储到多个数据块各自对应的存储位置上。
均值、均方差等统计信息,将数据块i对应的数据统计信息对应地存储到数据块i对应的存
储位置上。
读写事务的数据块,则可以过滤掉该数据块,即不读取该数据块内部的数据。
100分)的学生的数量。此时,可以先定位到属性为数学成绩的那一列数据块,假设属性为数
学成绩的那一列数据块为第4列数据块。接着,获取第4列数据块中的每个数据块分别对应
的数据统计信息,以确定第4列数据块中的每个数据块中的最大值,比如分别为95、88、100、
99、100。基于此可以确定该第4列数据块中的第一个数据块、第二个数据块以及第四个数据
块的最大值都未到达满分,因此这三个数据块中不可能存在满分的数学成绩,进而可以直
接过滤掉这三个数据块,还剩下第三个数据块和第五个数据块。最后,可以读取第三个数据
块和第五个数据块中的数学成绩,统计有多少个满分的数学成绩。
数据读写事务时所需操作的数据对应至少两个属性,则可能选择以行的方式来存储数据更
为有利。还以查询学生的考试成绩为例,假设当前的数据读写事务为统计考试不及格的学
生名单,此时执行数据读写事务时所需操作的数据不仅包括考试成绩,还包括对应的学生
的姓名,即对应着两种属性,而如果以行的方式来存储数据,这样就可以直接读取学生的姓
名和考试成绩,如果考试成绩不合格,则直接输出对应的学生的姓名即可。
列的方式存储数据。如果选择了以行的方式存储数据,则将数据从内存复制到行列混合式
数据库的过程中,可以不对数据的存储格式进行转换。如果选择了以列的方式存储数据,则
将数据从内存复制到行列混合式数据库的过程中,需要对数据的存储格式进行转换。
可选地,在将Memtable转移到数据库之前,可以确定Memtable所对应的服务的查询特征信
息;根据查询特征信息,确定是否对Memtable进行存储格式转换。
读取事务时的特征,比如执行大部分数据读取事务时所需操作的数据都对应同一属性,或
者执行大部分数据读取事务时所需操作的数据对应不同属性。基于此,当执行大部分数据
读取事务时所需操作的数据都对应同一属性时,可以认为该服务的数据适合以行的方式进
行存储,当执行大部分数据读取事务时所需操作的数据对应不同属性时,可以认为该服务
的数据适合以列的方式进行存储。
所属的服务对应的查询特征信息。在确定查询特征信息之后,可以根据查询特征信息,确定
是否对Memtable进行存储格式转换。如果确定需要对Memtable进行存储格式转换,则可以
对Memtable进行存储格式转换,如果确定不需要对Memtable进行存储格式转换,则可以直
接将Memtable转移到数据库中。
效率。
构成。
第一数据在内存中对应的标识信息,第二标识信息是数据库中已存储的第二数据在数据库
中对应的标识信息。
据库中对应的标识信息。
多个数据块;确定多个数据块在数据库中分别对应的存储位置,多个数据块对应的存储位
置位于同一行;将多个数据块分别存储到各自对应的存储位置上。
上。
转换。
写事务相匹配的参考记录信息,参考记录信息为第一记录信息或者第二记录信息;基于参
考记录信息中包含的标识信息,确定执行所述数据读写事务所需访问的数据。
第二记录信息的生成时间之后,则确定参考记录信息为第二记录信息。
码,当所述可执行代码被所述处理器701执行时,使所述处理器701至少可以实现如前述图1
至图5所示实施例中提供的数据存储方法。
处理器至少可以实现如前述图1至图5所示实施例中提供的数据存储方法。
本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解
并实施。
现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以计算
机产品的形式体现出来,本发明可采用在一个或多个其中包含有计算机可用程序代码的计
算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程
序产品的形式。
性存储介质中,并在其需要执行前述数据存储方法时,通过CPU将该程序/软件读取到内存
中,进而由CPU执行该程序/软件以实现前述实施例中所提供的数据存储方法,执行过程可
以参见前述图1至图5中的示意。
以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;
而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和
范围。