CN115794960A - 关系型数据库的管理方法及装置 - Google Patents
关系型数据库的管理方法及装置 Download PDFInfo
- Publication number
- CN115794960A CN115794960A CN202211358894.2A CN202211358894A CN115794960A CN 115794960 A CN115794960 A CN 115794960A CN 202211358894 A CN202211358894 A CN 202211358894A CN 115794960 A CN115794960 A CN 115794960A
- Authority
- CN
- China
- Prior art keywords
- data
- data table
- sub
- stored
- row
- 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请一个或多个实施例提供一种关系型数据库的管理方法及装置;关系型数据库为基于LSM Tree的关系型数据库;关系型数据库中的目标数据表包括第一子数据表和第二子数据表;第一子数据表为缓存在内存中的数据表;第二子数据表为存储在用于持久化存储数据的存储介质中的数据表;该方法包括:按照预设的第一时长周期,定期遍历第一子数据表,并确定第一子数据表是否包括访问次数大于预设的第一阈值的候选数据行;如果是,则确定第一子数据表中是否存储了候选数据行中与目标数据表中的数据列对应的全列数据;如果否,则从第二子数据表中读取候选数据行中与第一子数据表中未存储的数据列对应的数据,并将读取到的数据加载到第一子数据表中。
Description
技术领域
本申请一个或多个实施例涉及分布式技术领域,尤其涉及一种关系型数据库的管理方法及装置。
背景技术
关系型数据库,是指采用了关系模型来组织数据的数据库,通常以行和列的形式存储数据。在关系型数据库中,一系列的数据行和数据列被称为数据表,一组数据表组成了数据库。通常,数据表中的一行数据是一条数据记录(record),一列数据是与一个字段(field)对应的数据。
对于关系型数据库而言,可以采用LSM Tree(Log Structure Merge Tree,日志结构合并树)作为存储引擎,以通过牺牲一部分读性能,来换取较高的写性能。在这种情况下,如何优化针对基于LSM Tree的关系型数据库的数据查询,也就成为了亟待解决的问题。
发明内容
本申请一个或多个实施例提供技术方案如下:
本申请提供一种关系型数据库的管理方法;其中,所述关系型数据库为基于LSMTree的关系型数据库;所述关系型数据库中的目标数据表包括第一子数据表和第二子数据表;所述第一子数据表为缓存在内存中的数据表;所述第二子数据表为存储在用于持久化存储数据的存储介质中的数据表;所述方法包括:
按照预设的第一时长周期,定期遍历所述第一子数据表,并确定所述第一子数据表是否包括访问次数大于预设的第一阈值的候选数据行;
如果所述第一子数据表包括所述候选数据行,则确定所述第一子数据表中是否存储了所述候选数据行中与所述目标数据表中的数据列对应的全列数据;
如果所述第一子数据表中未存储所述全列数据,则从所述第二子数据表中读取所述候选数据行中与所述第一子数据表中未存储的数据列对应的数据,并将读取到的所述数据加载到所述第一子数据表中。
本申请还提供一种关系型数据库的管理装置;其中,所述关系型数据库为基于LSMTree的关系型数据库;所述关系型数据库中的目标数据表包括第一子数据表和第二子数据表;所述第一子数据表为缓存在内存中的数据表;所述第二子数据表为存储在用于持久化存储数据的存储介质中的数据表;所述装置包括:
遍历模块,按照预设的第一时长周期,定期遍历所述第一子数据表,并确定所述第一子数据表是否包括访问次数大于预设的第一阈值的候选数据行;
确定模块,如果所述第一子数据表包括所述候选数据行,则确定所述第一子数据表中是否存储了所述候选数据行中与所述目标数据表中的数据列对应的全列数据;
加载模块,如果所述第一子数据表中未存储所述全列数据,则从所述第二子数据表中读取所述候选数据行中与所述第一子数据表中未存储的数据列对应的数据,并将读取到的所述数据加载到所述第一子数据表中。
本申请还提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述任一项所述方法的步骤。
本申请还提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述任一项所述方法的步骤。
在上述技术方案中,针对基于LSM Tree的关系型数据库,可以定期遍历目标数据表包括的缓存在内存中的第一子数据表,并确定第一子数据表是否包括访问次数大于阈值的候选数据行,如果是,则可以确定第一子数据表中是否存储了候选数据行中与目标数据表中的数据列对应的全列数据,如果否,则可以从目标数据表包括的存储在磁盘等用于持久化存储数据的存储介质中的第二子数据表中,读取候选数据行中与第一子数据表中未存储的数据列对应的数据,并将读取到的该数据加载到第一子数据表中。
采用这种方式,在基于LSM Tree的关系型数据库中,对于数据表中访问次数较多的数据行而言,其中与该数据表中的数据列对应的全列数据,都可以存储在内存中的子数据表中,使得后续在查询该数据行时,可以直接在内存中的子数据表中进行数据查询,而无需再在磁盘等用于持久化存储数据的存储介质中的子数据表中进行数据查询,因此可以避免访问这类存储介质,提升读性能,提高数据查询效率;并且,此时从内存中的子数据表中读取的该数据行中的数据,就可以是该数据行中的最新数据,可以保证所读取的该数据行中的数据的正确性。
附图说明
图1是本申请一示例性实施例示出的一种关系型数据库的管理方法的流程图。
图2A是本申请一示例性实施例示出的一种多版本数据的数据结构的示意图。
图2B是本申请一示例性实施例示出的另一种多版本数据的数据结构的示意图。
图3是本申请一示例性实施例示出的另一种关系型数据库的管理方法的流程图。
图4是本申请一示例性实施例示出的一种设备的硬件结构的示意图。
图5是本申请一示例性实施例示出的一种关系型数据库的管理装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本申请示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本申请所描述的更多或更少。此外,本申请中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本申请中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
在对本申请一个或多个实施例进行详细说明之前,先对本申请一个或多个实施例涉及的应用场景进行简单说明。
数据库系统(Database System)通常可以包括数据库(Database,DB)、硬件、软件等部分。其中,数据库是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合,数据库中的数据按照特定的数学模型进行组织、描述和存储;硬件是构成计算机系统的各种物理设备,还包括存储所需的外部设备,硬件的配置应满足整个数据库系统的需要;软件可以进一步包括操作系统、数据库管理系统(Database Management System,DBMS)和应用程序。数据库管理系统是数据库系统的核心软件,是在操作系统的支持下工作,解决如何科学地组织和存储数据,如何高效地获取和维护数据的系统软件,其主要功能包括:数据定义功能、数据操纵功能、数据库的运行管理和数据库的建立与维护。
在数据库系统中,数据库管理系统通常使用存储引擎针对数据库执行特定操作,例如:对关系型数据库执行DDL(Data Definition Language,数据定义语言)操作和DML(Data Manipulation Language,数据操作语言)操作,以实现针对数据库的读/写。存储引擎就是如何存储数据,如何为数据建立索引以及如何查询、更新数据等技术的实现方法。一个数据库系统通常支持多种存储引擎,以满足不同场景的数据库应用需要。
数据库系统中的数据修改操作通常是以事务为单位进行的,一个事务可以包括多个数据修改操作(包括插入、更新、删除等操作)。在实现一个事务过程中,对于一个数据修改操作,会在内存中存储修改之后的数据,并生成针对该数据修改操作的一个重做日志。该重做日志包括该数据修改操作对应的修改之前的数据在硬盘中的存储地址以及修改内容等信息。后续通过一定策略将重做日志写到重做日志文件中。该重做日志文件存储在硬盘中,这样如果数据库系统发生崩溃,则可以根据重做日志文件进行数据恢复,从而保证数据的一致性。
在数据库系统中,可以采用LSM Tree作为存储引擎,以通过牺牲一部分读性能,来换取较高的写性能。从字面上看,LSM Tree是一种基于日志的追加写、有一定结构、并且会进行合并的树形结构。但是实际上,LSM Tree与B-Tree、B+Tree等不同,其并不是一种具体的数据结构,而是一种用于存储数据的设计思想。LSM Tree的核心思想是首先将数据写入到内存中,而不需要在每次有数据更新时就必须将数据写入到磁盘中,等到内存中的数据积累到一定阈值之后,再使用类似于归并排序的方式将内存中的数据合并追加到磁盘队尾。
通常,磁盘在随机读/写时速度很慢,但在顺序读/写时速度很快。因此,对于磁盘而言,能够最大化地发挥磁盘具有的特性的使用方式是:一次性地读取或写入固定大小的一块数据,并尽可能地减少针对这个读/写操作进行随机寻道的次数。LSM Tree就是充分利用了这种使用方式来实现的,消除随机的数据修改操作,转而将数据修改操作分批次地顺序写入至磁盘,由此极大地提升了写性能。
LSM Tree由两个或以上的存储结构组成。其中,一个存储结构常驻在内存中,称之为C0 Tree,具体可以是任何方便健值查找的数据结构,比如B+Tree、MAP、HashTable之类,甚至可以是跳表;另外一个存储结构常驻在硬盘中,称之为C1 Tree,具体的数据结构类似于B-Tree。
在以LSM Tree为存储引擎的数据库系统中,数据被分为基线数据(SSTable)和增量数据(MemTable)两部分,增量数据的存储结构为C0 Tree,基线数据的存储结构为C1Tree。基线数据被保存在磁盘中,当需要读取的时候会被加载到数据库的缓存中,当数据被不断插入或修改时,在内存中缓存增量数据,当增量数据达到一定阈值时,就把增量数据刷新到磁盘中,当磁盘中的增量数据达到一定阈值时再把磁盘中的增量数据和基线数据进行合并。这就是LSM Tree的核心思想本身,就是将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘,从而大幅度提升写性能。关于树中的节点的数据结构,不同的数据库系统在基于LSM-Tree的思想实现具体的存储引擎时,可以根据自己的特点去定义该数据结构。
下面对数据库系统中基于LSM Tree存储引擎读/写数据的过程进行简单说明。其中,读数据通常包括针对数据库进行数据查询,写数据通常包括将数据存储至数据库、对数据库中存储的数据进行更新、从数据库中删除数据等。
基于LSM Tree存储引擎写数据的过程包括:1,当收到一个写请求时,会先写重做日志,用作故障恢复。2,当写完重做日志后,会把这条数据(这条数据在该写请求对应于删除操作时是墓碑标记,在该写请求对应于更新操作时是新的数据记录)写入内存中的Memtable里面。3,当Memtable超过一定的大小后,会在内存中冻结,变成不可变的Memtable,同时为了不阻塞写操作需要新生成一个Memtable继续提供服务。4,把内存中不可变的Memtable给刷新到磁盘中的SSTable层里面,此步骤也被称为Minor Compaction,这里需要注意首层的SSTable是没有进行合并的,所以这里的key range在多个SSTable中可能会出现重叠,但在首层之后的SSTable,不存在重叠的key。5,当磁盘中的每层SSTable中的数据的大小或个数超过一定阈值,也会周期地进行合并,此步骤也被称为MajorCompaction,在此阶段中会真正地清除标记删除的数据以及合并多版本数据,避免浪费存储空间,其中由于SSTable都是有序的,可以直接采用归并排序(Merge Sort)进行高效合并。
基于LSM Tree存储引擎读数据的过程包括:1,当收到一个读请求时,会先直接在内存中的Memtable里面查询数据,如果查询到就返回这些数据。2,如果在内存中的Memtable里面没有查询到这些数据,就会在磁盘中的SSTable层里面依次下沉查询这些数据,直到将磁盘中的各层SSTable查询一遍。
关系型数据库系统即为包括关系型数据库的数据库系统。由于在关系型数据库中,通常以行和列的形式将数据存储在数据表中,对于该数据表中的一个数据行而言,可能出现内存中仅存储了这个数据行中与该数据表中的一部分数据列对应的数据,而磁盘中则存储这个数据行中与该数据表中的所有数据列对应的全列数据的情况。此外,由于对该数据表中的数据的插入、更新、删除等操作的相关数据或先写入到内存中,在这种情况下,虽然磁盘中存储了该全列数据,但是该全列数据中的部分数据可能已经发生了修改,而内存中存储的数据则是最新的数据。
基于此,对于以LSM Tree为存储引擎的关系型数据库系统而言,如果需要查询其中的关系型数据库中的一个数据行,则需要将内存中存储的这个数据行中的数据与磁盘中存储的这个数据行中的数据进行合并(例如:归并排序),得到这个数据行中的最新数据,并基于这个数据行中的最新数据进行数据查询。
因此,在基于LSM Tree的关系型数据库中,是通过牺牲一部分读性能,来换取较高的写性能,即针对这类关系型数据库的数据查询效率较低。
本申请提出一种用于关系型数据库的管理的技术方案,以优化针对基于LSM Tree的关系型数据库的数据查询。在该技术方案中,针对基于LSM Tree的关系型数据库,可以定期遍历目标数据表包括的缓存在内存中的第一子数据表,并确定第一子数据表是否包括访问次数大于阈值的候选数据行,如果是,则可以确定第一子数据表中是否存储了候选数据行中与目标数据表中的数据列对应的全列数据,如果否,则可以从目标数据表包括的存储在磁盘等用于持久化存储数据的存储介质中的第二子数据表中,读取候选数据行中与第一子数据表中未存储的数据列对应的数据,并将读取到的该数据加载到第一子数据表中。
在具体实现时,上述关系型数据库可以是基于LSM Tree的关系型数据库,即与该关系型数据库对应的关系型数据库系统可以是以LSM Tree为存储引擎的关系型数据库系统。在这种情况下,该关系型数据库中的某一个数据表(称之为目标数据表)可以包括两个子数据表,分别称为第一子数据表和第二子数据表。其中,第一子数据表可以是缓存在内存中的数据表;第二子数据表可以是存储在用于持久化存储数据的存储介质(例如:磁盘等)中的数据表。
可以预先设置一个时长周期(称之为第一时长周期),以定期对上述第一子数据表中存储的数据进行检查。后续,可以按照第一时长周期,定期遍历第一子数据表,并确定第一子数据表是否包括候选数据行。其中,候选数据行可以是与其对应的访问次数大于预设的阈值(称之为第一阈值)的数据行。
在上述第一子数据表中包括上述候选数据行的情况下,可以进一步地确定第一子数据表中是否存储了候选数据行中与上述目标数据表中的数据列对应的全列数据。
结合前述LSM Tree的思想,上述第一子数据表中可能未存储上述候选数据行中的上述全列数据,因为可能已经将该全列数据转储至上述第二子数据表,但是第二子数据表中则存储了该全列数据。在这种情况下,可以从第二子数据表中读取候选数据行中与第一子数据表中未存储的数据列对应的数据,并将读取到的该数据加载到第一子数据表中,从而使第一子数据表中可以存储候选数据行中的全列数据。
采用这种方式,在基于LSM Tree的关系型数据库中,对于数据表中访问次数较多的数据行而言,其中与该数据表中的数据列对应的全列数据,都可以存储在内存中的子数据表中,使得后续在查询该数据行时,可以直接在内存中的子数据表中进行数据查询,而无需再在磁盘等用于持久化存储数据的存储介质中的子数据表中进行数据查询,因此可以避免访问这类存储介质,提升读性能,提高数据查询效率;并且,此时从内存中的子数据表中读取的该数据行中的数据,就可以是该数据行中的最新数据,可以保证所读取的该数据行中的数据的正确性。
请参考图1,图1是本申请一示例性实施例示出的一种关系型数据库的管理方法的流程图。
对于关系型数据库系统而言,可以采用上述关系型数据库的管理方法对其中的关系型数据库进行管理,例如:对该关系型数据库中存储的数据进行维护,针对该关系型数据库进行数据查询等。在这种情况下,该关系型数据库的管理方法可以应用于该关系型数据库系统中的数据库管理系统,由该数据库管理系统对该关系型数据库系统中的关系型数据库进行管理。
在一些实施例中,上述关系型数据库可以包括OceanBase,OceanBase是一种分布式关系型数据库。
在本实施例中,上述关系型数据库可以是基于LSM Tree的关系型数据库,即与该关系型数据库对应的关系型数据库系统可以是以LSM Tree为存储引擎的关系型数据库系统。在这种情况下,该关系型数据库中的某一个数据表(称之为目标数据表)可以包括两个子数据表,分别称为第一子数据表和第二子数据表。其中,第一子数据表可以是缓存在内存中的数据表,用于存储前述MemTable,而与该第一子数据表对应的具体存储结构则可以是前述C0Tree;第二子数据表可以是存储在用于持久化存储数据的存储介质(例如:磁盘等)中的数据表,用于存储前述SSTable,而与该第二子数据表对应的具体存储结构则可以是前述C1Tree。
在一些实施例中,结合前述LSM Tree的思想,可以确定上述第一子数据表中存储的数据的数据量(例如:数据所占存储空间的大小或数据记录的数目等)是否达到预设的阈值(称之为第四阈值)。如果第一子数据表中存储的数据的数据量达到第四阈值,则可以将第一子数据表中存储的数据转储(例如:dump)至上述第二子数据表,并创建新的第一子数据表,从而由新的第一子数据表继续提供服务。
上述关系型数据库的管理方法可以包括以下步骤:
步骤102:按照预设的第一时长周期,定期遍历所述第一子数据表,并确定所述第一子数据表是否包括访问次数大于预设的第一阈值的候选数据行。
在本实施例中,可以预先设置一个时长周期(称之为第一时长周期),以定期对上述第一子数据表中存储的数据进行检查。后续,可以按照第一时长周期,定期遍历第一子数据表,并确定第一子数据表是否包括候选数据行。其中,候选数据行可以是与其对应的访问次数大于预设的阈值(称之为第一阈值)的数据行。在实际应用中,一个数据行对应的访问次数可以是对这个数据行执行读/写操作的次数。
例如,可以预先设置用于统计与各数据行对应的访问次数的时长周期,并按照该时长周期,定期统计与各数据行对应的访问次数,而在确定上述第一子数据表是否包括上述候选数据行时,具体可以根据最近一次统计得到的与各数据行对应的访问次数,将访问次数大于上述第一阈值的数据行确定为候选数据行。
步骤104:如果所述第一子数据表包括所述候选数据行,则确定所述第一子数据表中是否存储了所述候选数据行中与所述目标数据表中的数据列对应的全列数据。
在本实施例中,在上述第一子数据表中包括上述候选数据行的情况下,可以进一步地确定第一子数据表中是否存储了候选数据行中与上述目标数据表中的数据列对应的全列数据。
在实际应用中,针对上述第一子数据表中的某一个数据行,也可以先确定第一子数据表中是否存储了这个数据行中与上述目标数据表中的数据列对应的全列数据,并在第一子数据表中未存储该全列数据的情况下,进一步地确定与这个数据行对应的访问次数是否大于上述第一阈值,本申请对这两个判断步骤的时序不作限制。
例如,假设上述目标数据表如下表1所示:
ID1 | ID2 | ID3 |
X1 | Y1 | Z1 |
X2 | Y2 | Z2 |
X3 | Y3 | Z3 |
表1
其中,目标数据表一共包括三个数据行以及三个数据列。第一列的列名为ID1,X1-X3表示第一列中的数据;第二列的列名为ID2,Y1-Y3表示第二列中的数据;第三列的列名为ID3,Z1-Z3表示第三列中的数据。假设第一个数据行是上述候选数据行,则X1、Y1、Z1即为第一个数据行中与目标数据表中的数据列对应的全列数据。
进一步地,如上表1所示的目标数据表可以包括上述第一子数据表和上述第二子数据表。假设第一子数据表仅包括目标数据表中的第二个数据列和第三个数据列,而不包括第一个数据列,则对于目标数据表中作为上述候选数据行的第一个数据行而言,第一子数据表中仅存储了第一个数据行中的Y1和Z1,而未存储X1,因此第一子数据表中未存储第一个数据行中与目标数据表中的数据列对应的全列数据。
步骤106:如果所述第一子数据表中未存储所述全列数据,则从所述第二子数据表中读取所述候选数据行中与所述第一子数据表中未存储的数据列对应的数据,并将读取到的所述数据加载到所述第一子数据表中。
在本实施例中,结合前述LSM Tree的思想,上述第一子数据表中可能未存储上述候选数据行中的上述全列数据,因为可能已经将该全列数据转储至上述第二子数据表,但是第二子数据表中则存储了该全列数据。在这种情况下,可以从第二子数据表中读取候选数据行中与第一子数据表中未存储的数据列对应的数据,并将读取到的该数据加载到第一子数据表中。
在一些实施例中,可以直接从上述第二子数据表中读取上述候选数据行中的上述全列数据,并将读取到的该全列数据加载到上述第一子数据表中。
对于上述目标数据表中的上述候选数据行而言,该候选数据行中的上述全列数据都可以存储在内存中的上述第一子数据表中,使得后续在查询该数据行时,可以直接在内存中的第一子数据表中进行数据查询,而无需再在磁盘等用于持久化存储数据的存储介质中的上述第二子数据表中进行数据查询,因此可以避免访问这类存储介质,提升读性能,提高数据查询效率。
在实际应用中,由于对上述目标数据表中的数据的插入、更新、删除等操作的相关数据会先写入到内存中的上述第一子数据表中,在从上述第二子数据表中读取上述全列数据,并将该全列数据加载到上述第一子数据表中的情况下,可以将该全列数据尚未被加载到第一子数据表中之前,第一子数据表中存储的上述候选数据行中的数据,与该全列数据本身进行合并,从而可以得到候选数据行中的最新数据。
在一些实施例中,由于上述第一子数据表中的存储的数据的数据量达到上述第四阈值时,第一子数据表中数据就会被转储至上述第二子数据表,而新的第一子数据表实际上是一个空的数据表,其中不会存储各数据行中与上述目标数据表中的数据列对应的全列数据,在这种情况下,为了避免在将某一个数据行中与目标数据表中的数据列对应的全列数据存储在第一子数据表中之后,第一子数据表中存储的数据的数据量快速达到第四阈值,导致该全列数据又被转储至第二子数据表,上述候选数据行不仅可以是访问次数大于上述第一阈值的数据行,还可以是所存储的数据的数据量较小的数据行。
也即,在确定上述第一子数据表是否包括访问次数大于上述第一阈值的候选数据行时,具体可以确定第一子数据表是否包括访问次数大于第一阈值,并且满足以下示出的一个或多个条件的候选数据行:数据行中存储的数据的数据量不超过预设的阈值(称之为第二阈值);与数据行中存储的数据对应的数据列的列数不超过预设的阈值(称之为第三阈值)。
在一些实施例中,上述目标数据表中的数据行中的数据包括:基于MVCC(Multi-Version Concurrency Control,多版本并发控制)机制的多版本数据。
以如上表1所示的上述目标数据表为例,对于目标数据表中的第一个数据行而言,第一数据行中的多版本数据的数据结构可以如图2A所示。
如图2A所示,上述第一个数据行中的多版本数据构成一个链式结构。在这个链式结构中,每个节点可以包括事务提交(commit)版本号(commit version),以及与该事务中的一个数据修改操作对应的数据修改结果。并且,所有节点按照事务提交版本号从小到大的顺序(即为事务提交时刻的先后顺序),依次排列。
首个节点包括的数据修改结果即为插入上述第一个数据行时所采用的数据,因此首个节点可以包括事务提交版本号100,以及第一个数据行中的全列数据ID1=X1,ID2=Y1,ID3=Z1。第二个节点中的表示在提交了事务提交版本号为200的事务之后,将上述第一个数据行中的第二列数据修改为Y11,并将第一个数据行中的第三列数据修改为Z11。以此类推。
此外,上述链式结构中还可以包括用于对上述第一个数据行进行多版本并发控制的参数,包括:行锁(row lock);多版本数据的头指针(list head),指向第一个数据行的最新的数据修改结果;最大的事务提交版本号(max commit version);等等。
在一些实施例中,为了节省上述目标数据表中的数据行占用的内存存储空间,可以确定上述第一子数据表中,任意一个数据行(称之为目标数据行)中的多版本数据的版本数是否达到预设的阈值(称之为第五阈值)。如果是,则可以将这多版本数据进行合并。
如图2A所示,在上述第一个数据行中的多版本数据构成的链式结构中,可以将一个节点视为一个版本的数据。假设上述第五阈值为3,则在第一个数据行中的多版本数据的版本数达到3,即该链式结构中的节点的个数达到3时,可以将这三个多版本数据进行合并,得到合并节点(compaction node)。如图2B所示,在完成合并之后,可以从该链式结构中删除这三个节点,即从第一个数据行中的多版本数据中去除这三个多版本数据,仅保留该合并节点。
需要说明的是,由于上述目标数据表包括上述第一子数据表和上述第二子数据表,在目标数据表中,对于数据行中的多版本数据而言,事务提交版本号较小的数据可能已经被转储至第二子数据表,而事务提交版本号较大的数据仍然存储在第一子数据表中。以如图2A所示的上述第一个数据行中的多版本数据构成的链式结构为例,该链式结构中的第1、2、3个节点可能已经被转储至第二子数据表,而第4个节点仍然存储在第一子数据表中。此时,第一子数据表中也就未存储第一个数据行中的全列数据,而仅存储了第二列数据,因此可以从第二子数据表中读取第一个数据行中的第一列数据和第三列数据(读取的是将第1、2、3个节点中的三个版本的数据合并得到的第一列数据和第三列数据),并将该第一列数据和该第三列数据加载到第一子数据表中;或者,可以从第二子数据表中读取第一个数据行中的全列数据(读取的是将第1、2、3个节点中的三个版本的数据合并得到的数据),并将该全列数据加载至第一子数据表。
在如图1所示的实施例的基础上,请参考图3,图3是本申请一示例性实施例示出的另一种关系型数据库的管理方法的流程图。
上述关系型数据库的管理方法可以包括以下步骤:
步骤302:接收客户端发送的用于在所述目标数据表中查询目标数据行的查询指令。
步骤304:响应于所述查询指令,确定所述第一子数据表中是否存储了所述目标数据行中与所述目标数据表中的数据列对应的全列数据。
步骤306:如果所述第一子数据表中未存储所述全列数据,则确定与所述目标数据行对应的访问次数是否大于所述第一阈值。
步骤308:如果所述访问次数大于所述第一阈值,则从所述第二子数据表中读取所述目标数据行中与所述第一子数据表中未存储的数据列对应的数据,并将读取到的所述数据加载到所述第一子数据表中;以及,将所述第一子数据表中原先存储的所述目标数据行中的数据,与读取到的所述数据进行合并,得到所述目标数据行中的最新数据,并将所述目标数据行中的最新数据返回给所述客户端。
在一些实施例中,除了可以定期从上述第二子数据表中读取上述候选数据行中与上述第一子数据表中未存储的数据列对应的数据,并将读取到的该数据加载到上述第一子数据表中之外,还可以在接收到客户端发送的用于在目标数据表中查询某一个数据行(称之为目标数据行)的查询指令的情况下,从第二子数据表中读取目标数据行中与第一子数据表中未存储的数据列对应的数据,并将读取到的该数据加载到第一子数据表中。其中,该客户端可以是与上述关系型数据库的使用用户对应的客户端,也可以是与该关系型数据库的管理用户对应的客户端,本申请对此不作限制。
在实际应用中,上述查询指令可以包括与上述目标数据表中的数据列对应的查询条件。以如上表1所示的上述目标数据表为例,假设目标数据表的表名为tmp_test,则该查询指令可以是如下所示的DDL语句:
select*from tmp_test where ID1=X1
该DDL语句表示在关系型数据库中的表名为tmp_test的数据表中,查询列名为ID的数据列中的数据为X1的数据行。在这种情况下,上述查询指令用于在上述目标数据表中查询第一个数据行,即第一个数据行为上述目标数据行。
具体地,可以响应于上述查询指令,先确定上述第一子数据表中是否存储了上述目标数据行中与上述目标数据表中的数据列对应的全列数据。如果第一子数据表中未存储该全列数据,则可以进一步地确定与目标数据行对应的访问次数是否大于上述第一阈值。如果与目标数据行对应的访问次数大于上述第一阈值,则可以从上述第二子数据表中读取目标数据行中与第一子数据表中未存储的数据列对应的数据,并将读取到的该数据加载到第一子数据表中。
与前述候选数据行同理,在一些实施例中,可以直接从上述第二子数据表中读取上述目标数据行中的上述全列数据,并将读取到的该全列数据加载到上述第一子数据表中。
此外,还可以在上述目标数据行满足以下示出的一个或多个条件的情况下,从上述第二子数据表中读取上述目标数据行中与第一子数据表中未存储的数据列对应的数据,并将读取到的该数据加载到第一子数据表中:数据行中存储的数据的数据量不超过上述第二阈值;与数据行中存储的数据对应的数据列的列数不超过上述第三阈值。
如图3所示的实施例中的其他部分的具体实现可以参考如图1所示的实施例,本申请在此不再赘述。
在上述技术方案中,针对基于LSM Tree的关系型数据库,可以定期遍历目标数据表包括的缓存在内存中的第一子数据表,并确定第一子数据表是否包括访问次数大于阈值的候选数据行,如果是,则可以确定第一子数据表中是否存储了候选数据行中与目标数据表中的数据列对应的全列数据,如果否,则可以从目标数据表包括的存储在磁盘等用于持久化存储数据的存储介质中的第二子数据表中,读取候选数据行中与第一子数据表中未存储的数据列对应的数据,并将读取到的该数据加载到第一子数据表中。
采用这种方式,在基于LSM Tree的关系型数据库中,对于数据表中访问次数较多的数据行而言,其中与该数据表中的数据列对应的全列数据,都可以存储在内存中的子数据表中,使得后续在查询该数据行时,可以直接在内存中的子数据表中进行数据查询,而无需再在磁盘等用于持久化存储数据的存储介质中的子数据表中进行数据查询,因此可以避免访问这类存储介质,提升读性能,提高数据查询效率;并且,此时从内存中的子数据表中读取的该数据行中的数据,就可以是该数据行中的最新数据,可以保证所读取的该数据行中的数据的正确性。
请参考图4,图4是本申请一示例性实施例示出的一种设备的硬件结构的示意图。
如图4所示,在硬件层面,上述设备包括处理器402、内部总线404、网络接口406、内存408以及非易失性存储器410,当然还可能包括其他业务所需要的硬件。本申请一个或多个实施例可以基于软件方式来实现,比如由处理器402从非易失性存储器410中读取对应的计算机程序到内存408中然后运.行。当然,除了软件实现方式之外,本申请一个或多个实施例并不排除其他实现方式,比如逻辑器件或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑模块,也可以是硬件或逻辑器件。
请参考图5,图5是本申请一示例性实施例示出的一种关系型数据库的管理装置的框图。
上述关系型数据库的管理装置可以应用于如图4所示的设备,以实现本申请的技术方案。其中,所述关系型数据库为基于LSM Tree的关系型数据库;所述关系型数据库中的目标数据表包括第一子数据表和第二子数据表;所述第一子数据表为缓存在内存中的数据表;所述第二子数据表为存储在用于持久化存储数据的存储介质中的数据表;所述装置包括:
遍历模块502,按照预设的第一时长周期,定期遍历所述第一子数据表,并确定所述第一子数据表是否包括访问次数大于预设的第一阈值的候选数据行;
确定模块504,如果所述第一子数据表包括所述候选数据行,则确定所述第一子数据表中是否存储了所述候选数据行中与所述目标数据表中的数据列对应的全列数据;
加载模块506,如果所述第一子数据表中未存储所述全列数据,则从所述第二子数据表中读取所述候选数据行中与所述第一子数据表中未存储的数据列对应的数据,并将读取到的所述数据加载到所述第一子数据表中。
可选地,所述遍历模块具体用于:
确定所述第一子数据表是否包括访问次数大于预设的第一阈值,并且满足以下示出的一个或多个条件的候选数据行:
数据行中存储的数据的数据量不超过预设的第二阈值;
与数据行中存储的数据对应的数据列的列数不超过预设的第三阈值。
可选地,所述装置还包括:
接收模块,接收客户端发送的用于在所述目标数据表中查询目标数据行的查询指令;
所述确定模块还用于响应于所述查询指令,确定所述第一子数据表中是否存储了所述目标数据行中与所述目标数据表中的数据列对应的全列数据;
比较模块,用于如果所述第一子数据表中未存储所述全列数据,则确定与所述目标数据行对应的访问次数是否大于所述第一阈值;
所述读取模块还用于如果所述访问次数大于所述第一阈值,则从所述第二子数据表中读取所述目标数据行中与所述第一子数据表中未存储的数据列对应的数据,并将读取到的所述数据加载到所述第一子数据表中;以及,将所述第一子数据表中原先存储的所述目标数据行中的数据,与读取到的所述数据进行合并,得到所述目标数据行中的最新数据,并将所述目标数据行中的最新数据返回给所述客户端。
可选地,所述装置还包括:
第一比较模块,确定所述第一子数据表中存储的数据的数据量是否达到预设的第四阈值;
转储模块,如果所述数据量达到所述第四阈值,则将所述第一子数据表中存储的数据转储至所述第二子数据表,并创建新的所述第一子数据表。
可选地,所述目标数据表中,数据行中的数据包括:基于MVCC机制的多版本数据。
可选地,所述装置还包括:
第二比较模块,确定所述第一子数据表中,目标数据行中的多版本数据的版本数是否达到预设的第五阈值;
合并模块,如果所述版本数达到所述第五阈值,将所述多版本数据进行合并。
可选地,所述加载模块具体用于:
从所述第二子数据表中读取所述全列数据,并将读取到的所述全列数据加载到所述第一子数据表中。
对于装置实施例而言,其基本对应于方法实施例,因此相关之处参见方法实施例的部分说明即可。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请的技术方案的目的。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本申请特定实施例进行了描述。其他实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本申请一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请一个或多个实施例。在本申请一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本申请一个或多个实施例的较佳实施例而已,并不用以限制本申请一个或多个实施例,凡在本申请一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请一个或多个实施例保护的范围之内。
Claims (10)
1.一种关系型数据库的管理方法;其中,所述关系型数据库为基于LSM Tree的关系型数据库;所述关系型数据库中的目标数据表包括第一子数据表和第二子数据表;所述第一子数据表为缓存在内存中的数据表;所述第二子数据表为存储在用于持久化存储数据的存储介质中的数据表;所述方法包括:
按照预设的第一时长周期,定期遍历所述第一子数据表,并确定所述第一子数据表是否包括访问次数大于预设的第一阈值的候选数据行;
如果所述第一子数据表包括所述候选数据行,则确定所述第一子数据表中是否存储了所述候选数据行中与所述目标数据表中的数据列对应的全列数据;
如果所述第一子数据表中未存储所述全列数据,则从所述第二子数据表中读取所述候选数据行中与所述第一子数据表中未存储的数据列对应的数据,并将读取到的所述数据加载到所述第一子数据表中。
2.根据权利要求1所述的方法,所述确定所述第一子数据表是否包括访问次数大于预设的第一阈值的候选数据行,包括:
确定所述第一子数据表是否包括访问次数大于预设的第一阈值,并且满足以下示出的一个或多个条件的候选数据行:
数据行中存储的数据的数据量不超过预设的第二阈值;
与数据行中存储的数据对应的数据列的列数不超过预设的第三阈值。
3.根据权利要求1所述的方法,所述方法还包括:
接收客户端发送的用于在所述目标数据表中查询目标数据行的查询指令;
响应于所述查询指令,确定所述第一子数据表中是否存储了所述目标数据行中与所述目标数据表中的数据列对应的全列数据;
如果所述第一子数据表中未存储所述全列数据,则确定与所述目标数据行对应的访问次数是否大于所述第一阈值;
如果所述访问次数大于所述第一阈值,则从所述第二子数据表中读取所述目标数据行中与所述第一子数据表中未存储的数据列对应的数据,并将读取到的所述数据加载到所述第一子数据表中;以及,将所述第一子数据表中原先存储的所述目标数据行中的数据,与读取到的所述数据进行合并,得到所述目标数据行中的最新数据,并将所述目标数据行中的最新数据返回给所述客户端。
4.根据权利要求1所述的方法,所述方法还包括:
确定所述第一子数据表中存储的数据的数据量是否达到预设的第四阈值;
如果所述数据量达到所述第四阈值,则将所述第一子数据表中存储的数据转储至所述第二子数据表,并创建新的所述第一子数据表。
5.根据权利要求1所述的方法,所述目标数据表中,数据行中的数据包括:基于MVCC机制的多版本数据。
6.根据权利要求5所述的方法,所述方法还包括:
确定所述第一子数据表中,目标数据行中的多版本数据的版本数是否达到预设的第五阈值;
如果所述版本数达到所述第五阈值,将所述多版本数据进行合并。
7.根据权利要求1所述的方法,所述从所述第二子数据表中读取所述候选数据行中与所述第一子数据表中未存储的数据列对应的数据,并将读取到的所述数据加载到所述第一子数据表中,包括:
从所述第二子数据表中读取所述全列数据,并将读取到的所述全列数据加载到所述第一子数据表中。
8.一种关系型数据库的管理装置;其中,所述关系型数据库为基于LSM Tree的关系型数据库;所述关系型数据库中的目标数据表包括第一子数据表和第二子数据表;所述第一子数据表为缓存在内存中的数据表;所述第二子数据表为存储在用于持久化存储数据的存储介质中的数据表;所述装置包括:
遍历模块,按照预设的第一时长周期,定期遍历所述第一子数据表,并确定所述第一子数据表是否包括访问次数大于预设的第一阈值的候选数据行;
确定模块,如果所述第一子数据表包括所述候选数据行,则确定所述第一子数据表中是否存储了所述候选数据行中与所述目标数据表中的数据列对应的全列数据;
加载模块,如果所述第一子数据表中未存储所述全列数据,则从所述第二子数据表中读取所述候选数据行中与所述第一子数据表中未存储的数据列对应的数据,并将读取到的所述数据加载到所述第一子数据表中。
9.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-7中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211358894.2A CN115794960A (zh) | 2022-11-01 | 2022-11-01 | 关系型数据库的管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211358894.2A CN115794960A (zh) | 2022-11-01 | 2022-11-01 | 关系型数据库的管理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115794960A true CN115794960A (zh) | 2023-03-14 |
Family
ID=85434879
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211358894.2A Pending CN115794960A (zh) | 2022-11-01 | 2022-11-01 | 关系型数据库的管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115794960A (zh) |
-
2022
- 2022-11-01 CN CN202211358894.2A patent/CN115794960A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11586629B2 (en) | Method and device of storing data object | |
US8700674B2 (en) | Database storage architecture | |
CN106484906B (zh) | 一种分布式对象存储系统闪回方法及装置 | |
US9390147B2 (en) | System and method for storing stream data in distributed relational tables with data provenance | |
CN107391544B (zh) | 列式存储数据的处理方法、装置、设备及计算机储存介质 | |
CN107665219B (zh) | 一种日志管理方法及装置 | |
US9245003B2 (en) | Method and system for memory efficient, update optimized, transactional full-text index view maintenance | |
CN112181902B (zh) | 数据库的存储方法、装置及电子设备 | |
CN103106286A (zh) | 元数据的管理方法和装置 | |
US11210281B2 (en) | Technique for log records management in database management system | |
CN110096509A (zh) | 大数据环境下实现历史数据拉链表存储建模处理的系统及方法 | |
US6745198B1 (en) | Parallel spatial join index | |
US10055442B2 (en) | Efficient updates in non-clustered column stores | |
US20180011897A1 (en) | Data processing method having structure of cache index specified to transaction in mobile environment dbms | |
CN113253932B (zh) | 一种分布式存储系统的读写控制方法和系统 | |
CN106874329A (zh) | 数据库表索引的实现方法和装置 | |
JP7120439B2 (ja) | データ一般化装置、データ一般化方法、プログラム | |
CN114625713A (zh) | 一种存储系统中元数据管理方法、装置及存储系统 | |
KR20120082176A (ko) | 데이터베이스 관리 시스템의 데이터 처리 방법 및 시스템 | |
CN115794960A (zh) | 关系型数据库的管理方法及装置 | |
CN118132598B (zh) | 基于多级缓存的数据库数据处理方法及设备 | |
CN114880322B (zh) | 一种金融数据列式存储方法、系统、设备及存储介质 | |
US20240193142A1 (en) | Method of processing data in a database | |
CN117806567A (zh) | 数据处理方法及装置 | |
CN117216059A (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 |