CN112181902A - 数据库的存储方法、装置及电子设备 - Google Patents
数据库的存储方法、装置及电子设备 Download PDFInfo
- Publication number
- CN112181902A CN112181902A CN202011373498.8A CN202011373498A CN112181902A CN 112181902 A CN112181902 A CN 112181902A CN 202011373498 A CN202011373498 A CN 202011373498A CN 112181902 A CN112181902 A CN 112181902A
- Authority
- CN
- China
- Prior art keywords
- database
- log
- redo log
- target
- data modification
- 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.)
- Granted
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/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1734—Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs
-
- 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/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书一个或多个实施例提供一种数据库的存储方法、装置及电子设备,应用于数据库的存储引擎;所述存储引擎维护了与所述数据库对应的重做日志文件,所述重做日志文件包括多个重做日志子文件;所述方法包括:获取与所述数据库对应的多条数据修改语句;基于与所述多条数据修改语句对应的数据修改结果,对与所述数据库对应的缓存区域进行更新;基于与所述多个重做日志子文件对应的多个日志写入线程,将所述多条数据修改语句记录至所述多个重做日志子文件;其中,所述多个日志写入线程为并行执行的多个线程;在完成针对所述多个重做日志子文件的日志写入之后,基于所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新。
Description
技术领域
本说明书一个或多个实施例涉及计算机应用技术领域,尤其涉及一种数据库的存储方法、装置及电子设备。
背景技术
现如今,数据库的应用越来越广泛。数据库可以用于存储不同种类的数据之间的对应关系,例如:在用户身份验证的场景下,可以使用数据库存储账号和密码之间的对应关系,从而可以根据该关系数据库中存储的该对应关系,验证用户输入的账号和密码是否正确,以实现对用户的身份验证。针对数据库的数据存储和读取,通常是通过该数据库的存储引擎来实现的,而如何提高数据库的存储引擎的性能,也就成为了关注度较高的问题。
发明内容
本说明书提出一种数据库的存储方法,所述方法应用于数据库的存储引擎;其中,所述存储引擎维护了与所述数据库对应的重做日志文件,所述重做日志文件包括多个重做日志子文件;所述方法包括:
获取与所述数据库对应的多条数据修改语句;
基于与所述多条数据修改语句对应的数据修改结果,对与所述数据库对应的缓存区域进行更新;
基于与所述多个重做日志子文件对应的多个日志写入线程,将所述多条数据修改语句记录至所述多个重做日志子文件;其中,所述多个日志写入线程为并行执行的多个线程;
在完成针对所述多个重做日志子文件的日志写入之后,基于所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新。
可选地,所述基于与所述多个重做日志子文件对应的多个日志写入线程,将所述多条数据修改语句记录至所述多个重做日志子文件,包括:
针对所述多条数据修改语句中的任意一条目标数据修改语句,确定与所述目标数据修改语句对应的目标数据页;
基于与所述多个重做日志子文件对应的多个日志写入线程中,与所述目标数据页对应的目标日志写入线程,将所述目标数据修改语句记录至所述多个重做日志子文件中与所述目标数据页对应的目标重做日志子文件。
可选地,所述基于所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新,包括:
基于与所述数据库的数据页对应的数据页刷新线程,以及所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新。
可选地,所述方法还包括:
针对所述多个重做日志子文件中的任意一个目标重做日志子文件,基于所述目标重做日志子文件的存储地址,为与所述目标重做日志子文件对应的目标日志写入线程分配目标寄存器,以由所述目标写入线程基于所述目标寄存器对所述目标重做日志子文件进行日志写入处理。
可选地,所述数据库为分布式存储的数据库。
可选地,所述数据库索引为BTree索引。
本说明书还提出一种数据库的存储装置,所述装置应用于数据库的存储引擎;其中,所述存储引擎维护了与所述数据库对应的重做日志文件,所述重做日志文件包括多个重做日志子文件;所述装置包括:
获取模块,用于获取与所述数据库对应的多条数据修改语句;
缓存更新模块,用于基于与所述多条数据修改语句对应的数据修改结果,对与所述数据库对应的缓存区域进行更新;
日志写入模块,用于基于与所述多个重做日志子文件对应的多个日志写入线程,将所述多条数据修改语句记录至所述多个重做日志子文件;其中,所述多个日志写入线程为并行执行的多个线程;
索引更新模块,用于在完成针对所述多个重做日志子文件的日志写入之后,基于所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新。
可选地,所述日志写入模块具体用于:
针对所述多条数据修改语句中的任意一条目标数据修改语句,确定与所述目标数据修改语句对应的目标数据页;
基于与所述多个重做日志子文件对应的多个日志写入线程中,与所述目标数据页对应的目标日志写入线程,将所述目标数据修改语句记录至所述多个重做日志子文件中与所述目标数据页对应的目标重做日志子文件。
可选地,所述索引更新模块具体用于:
基于与所述数据库的数据页对应的数据页刷新线程,以及所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新。
可选地,所述装置还包括:
分配模块,用于针对所述多个重做日志子文件中的任意一个目标重做日志子文件,基于所述目标重做日志子文件的存储地址,为与所述目标重做日志子文件对应的目标日志写入线程分配目标寄存器,以由所述目标写入线程基于所述目标寄存器对所述目标重做日志子文件进行日志写入处理。
可选地,所述数据库为分布式存储的数据库。
可选地,所述数据库索引为BTree索引。
本说明书还提出一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现上述方法的步骤。
本说明书还提出一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现上述方法的步骤。
在上述技术方案中,可以在获取到与数据库对应的多条数据修改语句时,一方面基于与这多条数据修改语句对应的数据修改结果更新与该数据库对应的buffer pool,另一方面基于多个日志写入线程并行地将这多条数据修改语句记录至多个redo log子文件,并在完成这多个redo log子文件的日志写入之后,基于该buffer pool中的该数据修改结果更新与该数据库对应的数据库索引。与相关技术中顺序地将数据修改语句记录至一个redo log文件的方式相比,由于与多个redo log子文件对应的多个日志写入线程可以并行执行,因此采用这样的方式,可以优化针对redo log文件的日志写入,从而可以提高数据库的存储引擎的性能。
附图说明
图1是相关技术中的数据库的存储引擎的架构示意图;
图2是本说明书一示例性实施例示出的一种数据库的存储引擎的架构示意图;
图3是本说明书一示例性实施例示出的一种数据库的存储方法的流程图;
图4是本说明书一示例性实施例示出的另一种数据库的存储引擎的架构示意图;
图5是本说明书一示例性实施例示出的一种数据库的存储装置所在电子设备的硬件结构图;
图6是本说明书一示例性实施例示出的一种数据库的存储装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
请参考图1,图1是相关技术中的数据库的存储引擎的架构示意图。
相关技术中,用户可以在由数据库的存储引擎提供的用户界面中,输入用于指示对该数据库中存储的数据所进行的修改的数据修改语句,从而使该数据库的存储引擎可以基于该数据修改语句,对该数据库中存储的数据进行修改。
举例来说,假设该数据库为MySQL数据库,则可以先由用户在需要对该MySQL数据库中存储的数据进行修改时,在由该MySQL数据库的存储引擎提供的与该MySQL数据库对应的用户界面中,输入用于指示对该MySQL数据库中存储的数据所进行的修改的SQL(Structured Query Language,结构化查询语言)语句;其中,该SQL语句可以包括分别对该MySQL数据库中存储的数据进行一次修改的多条子语句。后续,该MySQL数据库的存储引擎可以基于该SQL语句,对该MySQL数据库中存储的数据进行相应的修改。
具体地,可以基于上述SQL语句构造与上述MySQL数据库对应的事务(transaction),并将构造的该事务提交(commit)给该MySQL数据库的存储引擎。该MySQL数据库的存储引擎在接收到提交的该事务时,可以基于该数据修改事务中的SQL语句,对该MySQL数据库中存储的数据进行相应的修改。
在实际应用中,为了便于在数据库中进行数据查询,通常可以由数据库的存储引擎维护满足特定的查找算法的数据结构。其中,该数据结构以与该查找算法对应的方式引用该数据库中存储的数据,从而使该数据库的存储引擎可以在该数据结构中,基于该查找算法进行针对该数据库的数据查询;该数据结构即为该数据库的数据库索引。
举例来说,对于MySQL数据库而言,该MySQL数据库的数据库索引可以是BTree索引、哈希索引或全文索引等。
如图1所示,上述数据库的存储引擎在基于接收到的上述数据修改语句,对该数据库中存储的数据进行修改时,一方面,可以将该数据修改语句指示的数据修改结果(即对该数据库中存储的数据所进行的修改)存储至buffer pool(称为缓存区域),以对该bufferpool进行更新;另一方面,可以将该数据修改语句记录至redo log(称为重做日志)文件;具体地,可以使用与该redo log文件对应的寄存器对该redo log子文件进行日志写入处理。在完成针对该redo log文件的日志写入(即将该数据修改语句记录至该redo log文件)之后,可以根据该buffer pool中的该数据修改结果,对该数据库的数据库索引引用的该数据库中存储的数据进行相应的修改。
需要说明的是,上述数据库的存储引擎在基于多条数据修改语句,对该数据库中存储的数据进行修改时,需要按照顺序写入的方式,将这多条数据修改语句依次记录至上述redo log文件。其中,记录的顺序具体可以是该数据库的存储引擎获取到这多条数据修改语句的顺序。
举例来说,假设该数据库的存储引擎获取到三条数据修改语句,这三条数据修改语句按照获取到的顺序排序为:数据修改语句1、数据修改语句2和数据修改语句3,则可以先将数据修改语句1记录至该redo log文件,再在完成数据修改语句1的记录之后将数据修改语句2记录至该redo log文件,最后在完成数据修改语句2的记录之后将数据修改语句3记录至该redo log文件;并且,数据修改语句1、数据修改语句2、数据修改语句3在该redolog文件中的记录位置也是顺序排列的。
在实际应用中,上述buffer pool存储在上述数据库的存储引擎的内存(易失性存储器)中;上述redo log文件存储在该数据库的存储引擎的磁盘(非易失性存储器)中。其中,在该数据库发生宕机重启之后,该数据库的存储引擎可以通过在磁盘中维护的redolog文件进行数据恢复。
由于与将数据写入内存相比,将数据写入磁盘通常需要消耗更多的硬件资源,且耗时更长,因此针对redo log文件的日志写入也就和数据库的存储引擎的性能息息相关。
本说明书旨在提供一种在获取到与数据库对应的多条数据修改语句时,一方面基于与这多条数据修改语句对应的数据修改结果更新与该数据库对应的buffer pool,另一方面基于多个日志写入线程并行地将这多条数据修改语句记录至多个redo log子文件,并在完成这多个redo log子文件的日志写入之后,基于该buffer pool中的该数据修改结果更新与该数据库对应的数据库索引的技术方案,以优化针对redo log文件的日志写入,从而提高数据库的存储引擎的性能。
在具体实现时,可以将上述数据库的存储引擎维护的redo log(称为重做日志)文件划分为多个redo log子文件。
针对这多个redo log子文件,可以为每个redo log子文件设置与该redo log子文件对应的日志写入线程(即log write线程)。在这种情况下,针对这多个redo log子文件中的任意一个redo log子文件,可以基于为该redo log子文件设置的日志写入线程,实现针对该redo log子文件的日志写入。其中,为这多个redo log子文件设置的多个日志写入线程可以并行。
上述数据库的存储引擎首先可以获取与该数据库对应的多条数据修改语句。
在获取到与上述数据库对应的多条数据修改语句的情况下,一方面,可以基于与这多条数据修改语句对应的数据修改结果,对与该数据库对应的buffer pool(称为缓存区域)进行更新;也即,可以将与这多条数据修改语句对应的数据修改结果存储至与该数据库对应的buffer pool,以对该buffer pool进行更新。
另一方面,可以基于与上述多个redo log(重做日志)子文件对应的多个日志写入线程,将这多条数据修改语句记录至这多个redo log子文件。具体地,针对这多个redo log子文件中的任意一个redo log子文件,可以基于与该redo log子文件对应的日志写入线程,将这多条数据修改语句中与该redo log子文件相关的数据修改语句记录至该redo log子文件。
在完成针对上述多个redo log子文件的日志写入之后,可以基于上述bufferpool中的上述数据修改结果,对与上述数据库对应的数据库索引进行更新;也即,可以根据该buffer pool中的该数据修改结果,对该数据库的数据库索引引用的该数据库中存储的数据进行相应的修改。
在上述技术方案中,可以在获取到与数据库对应的多条数据修改语句时,一方面基于与这多条数据修改语句对应的数据修改结果更新与该数据库对应的buffer pool,另一方面基于多个日志写入线程并行地将这多条数据修改语句记录至多个redo log子文件,并在完成这多个redo log子文件的日志写入之后,基于该buffer pool中的该数据修改结果更新与该数据库对应的数据库索引。与相关技术中顺序地将数据修改语句记录至一个redo log文件的方式相比,由于与多个redo log子文件对应的多个日志写入线程可以并行执行,因此采用这样的方式,可以优化针对redo log文件的日志写入,从而可以提高数据库的存储引擎的性能。
请参考图2,图2是本说明书一示例性实施例示出的一种数据库的存储引擎的架构示意图。请结合图2,参考图3,图3是本说明书一示例性实施例示出的一种数据库的存储方法的流程图。该数据库的存储方法可以应用于如图2所示的数据库的存储引擎;该数据库的存储方法可以包括以下步骤:
步骤301,获取与所述数据库对应的多条数据修改语句;
步骤302,基于与所述多条数据修改语句对应的数据修改结果,对与所述数据库对应的缓存区域进行更新;
步骤303,基于与所述多个重做日志子文件对应的多个日志写入线程,将所述多条数据修改语句记录至所述多个重做日志子文件;其中,所述多个日志写入线程为并行执行的多个线程;
步骤304,在完成针对所述多个重做日志子文件的日志写入之后,基于所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新。
需要说明的是,上述数据库具体可以是分布式存储的数据库;该数据库的索引具体可以是BTree索引。
在本实施例中,可以将上述数据库的存储引擎维护的redo log(称为重做日志)文件划分为多个redo log子文件。
针对这多个redo log子文件,可以为每个redo log子文件设置与该redo log子文件对应的日志写入线程(即log write线程)。在这种情况下,针对这多个redo log子文件中的任意一个redo log子文件,可以基于为该redo log子文件设置的日志写入线程,实现针对该redo log子文件的日志写入;也即,可以由为该redo log子文件设置的日志写入线程,对该redo log子文件进行日志写入处理。
需要说明的是,为上述多个redo log子文件设置的多个日志写入线程可以并行。
在示出的一种实施方式中,针对上述多个redo log子文件,还可以为每个redolog子文件分配与该redo log子文件对应的寄存器。在这种情况下,针对这多个redo log子文件中的任意一个redo log子文件,可以由与该redo log子文件对应的日志写入线程,使用该寄存器对该redo log子文件进行日志写入处理。
具体地,针对这多个redo log子文件中的任意一个redo log子文件(称为目标redo log子文件),可以基于目标redo log子文件在磁盘中占用的存储地址,为目标redolog子文件分配寄存器(称为目标寄存器);也即,目标寄存器用于根据目标redo log子文件所占用的存储地址,对目标redo log子文件中的数据进行快速读写。
在实际应用中,对于分布式存储的数据库而言,该数据库中存储的数据可以分散存储在多台独立的设备上。在这种情况下,由于这多台独立的设备可以并行,因此使用部署在这多台设备上的寄存器,对上述多个redo log子文件进行日志写入处理的多个日志写入线程也可以并行。
在本实施例中,上述数据库的存储引擎首先可以获取与该数据库对应的多条数据修改语句。
具体地,用户可以在由该数据库的存储引擎提供的用户界面中,输入用于指示对该数据库中存储的数据所进行的修改的多条数据修改语句。该数据库的存储引擎在获取到用户输入的与该数据库对应的多条数据修改语句的情况下,可以先将这多条数据修改语句存储至与上述redo log文件对应的log buffer(称为日志缓存);后续,可以从该logbuffer中读取与该数据库对应的多条数据修改语句,并基于这多条数据修改语句,对该数据库中存储的数据进行相应的修改。
在本实施例中,在获取到与上述数据库对应的多条数据修改语句的情况下,一方面,可以基于与这多条数据修改语句对应的数据修改结果,对与该数据库对应的bufferpool(称为缓存区域)进行更新;也即,可以将与这多条数据修改语句对应的数据修改结果存储至与该数据库对应的buffer pool,以对该buffer pool进行更新。
另一方面,可以基于与上述多个redo log(重做日志)子文件对应的多个日志写入线程,将这多条数据修改语句记录至这多个redo log子文件。
具体地,针对这多个redo log子文件中的任意一个redo log子文件,可以基于与该redo log子文件对应的日志写入线程,将这多条数据修改语句中与该redo log子文件相关的数据修改语句记录至该redo log子文件。
在示出的一种实施方式中,请参考图4,图4是本说明书一示例性实施例示出的另一种数据库的存储引擎的架构示意图。针对上述多个redo log子文件,还可以为每个redolog子文件设置与该redo log子文件对应的上述数据库的page(称为数据页)。在这种情况下,针对这多个redo log子文件中的任意一个redo log子文件,可以由该redo log子文件对用于指示对与该redo log子文件对应的page中存储的数据所进行的修改的数据修改语句进行记录。
在实际应用中,可以通过设置redo log子文件与page ID(称为数据页标识)之间的对应关系,实现为每个redo log子文件设置与该redo log子文件对应的上述数据库的page;或者,也可以通过设置日志写入程序与page ID之间的对应关系,实现为每个redolog子文件设置与该redo log子文件对应的上述数据库的page。也即,redo log子文件、日志写入程序和page ID三者之间存在对应关系。
为了将上述多条数据修改语句记录至上述多个redo log子文件,针对这多条数据修改语句中的任意一条数据修改语句(称为目标数据修改语句),可以先确定与该目标数据修改语句对应的page(称为目标page);后续,可以基于上述多个日志写入线程中与目标page对应的日志写入线程(称为目标日志写入线程),将目标数据修改语句记录至这多个redo log子文件中与目标page对应的redo log子文件(称为目标redo log子文件)。
具体地,可以先根据目标数据修改语句指示的对上述数据库中存储的数据所进行的修改,确定需要修改的该数据所属的该数据库的page;后续,可以根据该page的page ID,从这多个日志写入线程中确定与目标page对应的目标日志写入线程,并从这多个redo log子文件中确定与目标page对应的目标redo log子文件,从而可以基于目标日志写入线程,将目标数据修改语句记录至目标redo log子文件。
举例来说,假设该数据库的存储引擎获取到三条数据修改语句,这三条数据修改语句分别为:数据修改语句1、数据修改语句2和数据修改语句3;进一步假设数据修改语句1指示对该数据库的page 1中的数据进行修改,数据修改语句2指示对该数据库的page 2中的数据进行修改,数据修改语句3指示对该数据库的page 3中的数据进行修改,则可以基于日志写入线程1将数据修改语句1记录至redo log子文件1(page 1、redo log子文件1和日志写入线程1三者之间两两对应),并基于日志写入线程2将数据修改语句2记录至redo log子文件2(page 2、redo log子文件2和日志写入线程2三者之间两两对应),以及基于日志写入线程3将数据修改语句3记录至redo log子文件3(page 3、redo log子文件3和日志写入线程3三者之间两两对应);其中,日志写入线程1、日志写入线程2和日志写入线程3三者可以并行。
在另一个例子中,假设该数据库的存储引擎获取到三条数据修改语句,这三条数据修改语句分别为:数据修改语句1、数据修改语句2和数据修改语句3;进一步假设数据修改语句1指示对该数据库的page 1中的数据进行修改,数据修改语句2也指示对该数据库的page 1中的数据进行修改,数据修改语句3指示对该数据库的page 3中的数据进行修改,则在这种情况下,可以按照顺序写入的方式,基于日志写入线程1将数据修改语句1和数据修改语句2记录至redo log子文件1(page 1、redo log子文件1和日志写入线程1三者之间两两对应),并基于日志写入线程3将数据修改语句3记录至redo log子文件3(page 3、redolog子文件3和日志写入线程3三者之间两两对应);其中,日志写入线程1和日志写入线程3两者可以并行。
在本实施例中,在完成针对上述多个redo log子文件的日志写入之后(即完成将上述多条数据修改语句记录至上述多个redo log子文件),可以基于上述buffer pool中的上述数据修改结果,对与上述数据库对应的数据库索引进行更新;也即,可以根据该bufferpool中的该数据修改结果,对该数据库的数据库索引引用的该数据库中存储的数据进行相应的修改。
具体地,在完成针对上述多个redo log子文件的日志写入之后,可以生成用于指示对数据库索引进行更新的通知。在监听到该通知时,可以认为针对上述多个redo log子文件的日志写入已经完成,从而可以根据该buffer pool中的该数据修改结果,对该数据库的数据库索引引用的该数据库中存储的数据进行相应的修改。
在示出的一种实施方式中,可以基于与上述数据库的page对应的数据页刷新线程(即page flush线程),根据上述buffer pool中的上述数据修改结果,对该数据库的数据库索引引用的该数据库的page中的数据进行相应的修改。
在实际应用中,可以设置多个数据页刷新线程;其中,这多个数据页刷新线程可以并行。针对这多个数据页刷新线程,可以为每个数据页刷新线程设置与该数据页刷新线程对应的数据页,以由该数据页刷新线程根据该buffer pool中的该数据修改结果,对该数据库的数据库索引引用的与该数据页刷新线程对应的page中的数据进行相应的修改。
需要说明的是,在上述数据库发生宕机重启之后,该数据库的存储引擎可以通过在磁盘中维护的各个redo log子文件进行数据恢复。
具体地,可以由多个数据恢复进程分别对各个redo log子文件进行扫描,并对扫描到的数据进行解析,以根据各个redo log子文件中记录的数据修改语句,对该数据库中存储的数据进行相应的修改。其中,这多个数据恢复进程可以并行。
在上述技术方案中,可以在获取到与数据库对应的多条数据修改语句时,一方面基于与这多条数据修改语句对应的数据修改结果更新与该数据库对应的buffer pool,另一方面基于多个日志写入线程并行地将这多条数据修改语句记录至多个redo log子文件,并在完成这多个redo log子文件的日志写入之后,基于该buffer pool中的该数据修改结果更新与该数据库对应的数据库索引。与相关技术中顺序地将数据修改语句记录至一个redo log文件的方式相比,由于与多个redo log子文件对应的多个日志写入线程可以并行执行,因此采用这样的方式,可以优化针对redo log文件的日志写入,从而可以提高数据库的存储引擎的性能。
与前述数据库的存储方法的实施例相对应,本说明书还提供了数据库的存储装置的实施例。
本说明书数据库的存储装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图5所示,为本说明书数据库的存储装置所在电子设备的一种硬件结构图,除了图5所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该数据库的存储的实际功能,还可以包括其他硬件,对此不再赘述。
请参考图6,图6是本说明书一示例性实施例示出的一种数据库的存储装置的框图。该数据库的存储装置60可以应用于如图5所示的电子设备,该电子设备上可以部署数据库的存储引擎;其中,所述存储引擎维护了与所述数据库对应的重做日志文件,所述重做日志文件包括多个重做日志子文件;该数据库的存储装置60可以包括:
获取模块601,用于获取与所述数据库对应的多条数据修改语句;
缓存更新模块602,用于基于与所述多条数据修改语句对应的数据修改结果,对与所述数据库对应的缓存区域进行更新;
日志写入模块603,用于基于与所述多个重做日志子文件对应的多个日志写入线程,将所述多条数据修改语句记录至所述多个重做日志子文件;其中,所述多个日志写入线程为并行执行的多个线程;
索引更新模块604,用于在完成针对所述多个重做日志子文件的日志写入之后,基于所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新。
在本实施例中,所述日志写入模块603具体用于:
针对所述多条数据修改语句中的任意一条目标数据修改语句,确定与所述目标数据修改语句对应的目标数据页;
基于与所述多个重做日志子文件对应的多个日志写入线程中,与所述目标数据页对应的目标日志写入线程,将所述目标数据修改语句记录至所述多个重做日志子文件中与所述目标数据页对应的目标重做日志子文件。
在本实施例中,所述索引更新模块604具体用于:
基于与所述数据库的数据页对应的数据页刷新线程,以及所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新。
在本实施例中,所述装置60还包括:
分配模块605,用于针对所述多个重做日志子文件中的任意一个目标重做日志子文件,基于所述目标重做日志子文件的存储地址,为与所述目标重做日志子文件对应的目标日志写入线程分配目标寄存器,以由所述目标写入线程基于所述目标寄存器对所述目标重做日志子文件进行日志写入处理。
在本实施例中,所述数据库为分布式存储的数据库。
在本实施例中,所述数据库索引为BTree索引。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
Claims (14)
1.一种数据库的存储方法,所述方法应用于数据库的存储引擎;其中,所述存储引擎维护了与所述数据库对应的重做日志文件,所述重做日志文件包括多个重做日志子文件;所述方法包括:
获取与所述数据库对应的多条数据修改语句;
基于与所述多条数据修改语句对应的数据修改结果,对与所述数据库对应的缓存区域进行更新;
基于与所述多个重做日志子文件对应的多个日志写入线程,将所述多条数据修改语句记录至所述多个重做日志子文件;其中,所述多个日志写入线程为并行执行的多个线程;
在完成针对所述多个重做日志子文件的日志写入之后,基于所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新。
2.根据权利要求1所述的方法,所述基于与所述多个重做日志子文件对应的多个日志写入线程,将所述多条数据修改语句记录至所述多个重做日志子文件,包括:
针对所述多条数据修改语句中的任意一条目标数据修改语句,确定与所述目标数据修改语句对应的目标数据页;
基于与所述多个重做日志子文件对应的多个日志写入线程中,与所述目标数据页对应的目标日志写入线程,将所述目标数据修改语句记录至所述多个重做日志子文件中与所述目标数据页对应的目标重做日志子文件。
3.根据权利要求1所述的方法,所述基于所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新,包括:
基于与所述数据库的数据页对应的数据页刷新线程,以及所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新。
4.根据权利要求1所述的方法,所述方法还包括:
针对所述多个重做日志子文件中的任意一个目标重做日志子文件,基于所述目标重做日志子文件的存储地址,为与所述目标重做日志子文件对应的目标日志写入线程分配目标寄存器,以由所述目标写入线程基于所述目标寄存器对所述目标重做日志子文件进行日志写入处理。
5.根据权利要求1所述的方法,所述数据库为分布式存储的数据库。
6.根据权利要求1所述的方法,所述数据库索引为BTree索引。
7.一种数据库的存储装置,所述装置应用于数据库的存储引擎;其中,所述存储引擎维护了与所述数据库对应的重做日志文件,所述重做日志文件包括多个重做日志子文件;所述装置包括:
获取模块,用于获取与所述数据库对应的多条数据修改语句;
缓存更新模块,用于基于与所述多条数据修改语句对应的数据修改结果,对与所述数据库对应的缓存区域进行更新;
日志写入模块,用于基于与所述多个重做日志子文件对应的多个日志写入线程,将所述多条数据修改语句记录至所述多个重做日志子文件;其中,所述多个日志写入线程为并行执行的多个线程;
索引更新模块,用于在完成针对所述多个重做日志子文件的日志写入之后,基于所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新。
8.根据权利要求7所述的装置,所述日志写入模块具体用于:
针对所述多条数据修改语句中的任意一条目标数据修改语句,确定与所述目标数据修改语句对应的目标数据页;
基于与所述多个重做日志子文件对应的多个日志写入线程中,与所述目标数据页对应的目标日志写入线程,将所述目标数据修改语句记录至所述多个重做日志子文件中与所述目标数据页对应的目标重做日志子文件。
9.根据权利要求7所述的装置,所述索引更新模块具体用于:
基于与所述数据库的数据页对应的数据页刷新线程,以及所述缓存区域中的所述数据修改结果,对与所述数据库对应的数据库索引进行更新。
10.根据权利要求7所述的装置,所述装置还包括:
分配模块,用于针对所述多个重做日志子文件中的任意一个目标重做日志子文件,基于所述目标重做日志子文件的存储地址,为与所述目标重做日志子文件对应的目标日志写入线程分配目标寄存器,以由所述目标写入线程基于所述目标寄存器对所述目标重做日志子文件进行日志写入处理。
11.根据权利要求7所述的装置,所述数据库为分布式存储的数据库。
12.根据权利要求7所述的装置,所述数据库索引为BTree索引。
13.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1至6中任一项所述的方法。
14.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1至6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011373498.8A CN112181902B (zh) | 2020-11-30 | 2020-11-30 | 数据库的存储方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011373498.8A CN112181902B (zh) | 2020-11-30 | 2020-11-30 | 数据库的存储方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112181902A true CN112181902A (zh) | 2021-01-05 |
CN112181902B CN112181902B (zh) | 2021-08-31 |
Family
ID=73918233
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011373498.8A Active CN112181902B (zh) | 2020-11-30 | 2020-11-30 | 数据库的存储方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112181902B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113448968A (zh) * | 2021-07-21 | 2021-09-28 | 浪潮软件科技有限公司 | 一种海量轨迹数据的读写方法及系统 |
CN113704213A (zh) * | 2021-08-20 | 2021-11-26 | 辽宁振兴银行股份有限公司 | 一种基于sqlldr2和ogg数据同步的实现方法 |
CN114783485A (zh) * | 2022-06-21 | 2022-07-22 | 阿里云计算有限公司 | 用于刷新相变存储器的方法及相变存储设备 |
WO2024087777A1 (zh) * | 2022-10-26 | 2024-05-02 | 北京奥星贝斯科技有限公司 | 数据库表的数据重整方法和装置、介质和计算机设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103150149A (zh) * | 2013-03-26 | 2013-06-12 | 华为技术有限公司 | 处理数据库重做数据的方法和装置 |
CN103729442A (zh) * | 2013-12-30 | 2014-04-16 | 华为技术有限公司 | 记录事务日志的方法和数据库引擎 |
CN103927338A (zh) * | 2014-03-26 | 2014-07-16 | 网神信息技术(北京)股份有限公司 | 日志信息入库处理方法和装置 |
CN111125040A (zh) * | 2018-10-31 | 2020-05-08 | 华为技术有限公司 | 管理重做日志的方法、装置及存储介质 |
CN111338893A (zh) * | 2020-02-20 | 2020-06-26 | 深圳市腾讯计算机系统有限公司 | 进程日志处理方法、装置、计算机设备以及存储介质 |
-
2020
- 2020-11-30 CN CN202011373498.8A patent/CN112181902B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103150149A (zh) * | 2013-03-26 | 2013-06-12 | 华为技术有限公司 | 处理数据库重做数据的方法和装置 |
CN103729442A (zh) * | 2013-12-30 | 2014-04-16 | 华为技术有限公司 | 记录事务日志的方法和数据库引擎 |
CN103927338A (zh) * | 2014-03-26 | 2014-07-16 | 网神信息技术(北京)股份有限公司 | 日志信息入库处理方法和装置 |
CN111125040A (zh) * | 2018-10-31 | 2020-05-08 | 华为技术有限公司 | 管理重做日志的方法、装置及存储介质 |
CN111338893A (zh) * | 2020-02-20 | 2020-06-26 | 深圳市腾讯计算机系统有限公司 | 进程日志处理方法、装置、计算机设备以及存储介质 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113448968A (zh) * | 2021-07-21 | 2021-09-28 | 浪潮软件科技有限公司 | 一种海量轨迹数据的读写方法及系统 |
CN113704213A (zh) * | 2021-08-20 | 2021-11-26 | 辽宁振兴银行股份有限公司 | 一种基于sqlldr2和ogg数据同步的实现方法 |
CN114783485A (zh) * | 2022-06-21 | 2022-07-22 | 阿里云计算有限公司 | 用于刷新相变存储器的方法及相变存储设备 |
CN114783485B (zh) * | 2022-06-21 | 2022-10-18 | 阿里云计算有限公司 | 用于刷新相变存储器的方法及相变存储设备 |
WO2024087777A1 (zh) * | 2022-10-26 | 2024-05-02 | 北京奥星贝斯科技有限公司 | 数据库表的数据重整方法和装置、介质和计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112181902B (zh) | 2021-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112181902B (zh) | 数据库的存储方法、装置及电子设备 | |
CN111737265B (zh) | 区块数据访问方法、区块数据存储方法及装置 | |
US9298389B2 (en) | Operating a memory management controller | |
KR20200059318A (ko) | 커맨드 선택 폴리시 | |
CN107391544B (zh) | 列式存储数据的处理方法、装置、设备及计算机储存介质 | |
US9245003B2 (en) | Method and system for memory efficient, update optimized, transactional full-text index view maintenance | |
US11288287B2 (en) | Methods and apparatus to partition a database | |
CN110597663A (zh) | 一种事务处理方法及装置 | |
US20180121487A1 (en) | Method and system for committing transactions in a semi-distributed manner | |
CN111737266B (zh) | 区块数据访问方法、区块数据存储方法及装置 | |
US8332595B2 (en) | Techniques for improving parallel scan operations | |
US10901971B2 (en) | Random walking and cluster-based random walking method, apparatus and device | |
KR20190123819A (ko) | 데이터 저장장치의 주소 맵핑 테이블 운용 방법 | |
KR20120082176A (ko) | 데이터베이스 관리 시스템의 데이터 처리 방법 및 시스템 | |
US11132351B2 (en) | Executing transactions based on success or failure of the transactions | |
CN111221814B (zh) | 二级索引的构建方法、装置及设备 | |
CN115934583B (zh) | 分级缓存方法、装置及系统 | |
US20160292168A1 (en) | File retention | |
CN114356912A (zh) | 一种向数据库写入数据的方法及计算机设备 | |
CN107436918B (zh) | 数据库实现方法、装置和设备 | |
CN118132598B (zh) | 基于多级缓存的数据库数据处理方法及设备 | |
CN116126546B (zh) | 一种性能调优的方法、装置、电子设备及介质 | |
CN111367836B (zh) | 一种针对数据库的处理方法及装置 | |
CN109271277A (zh) | 数据库宕机后的访问方法、装置和系统 | |
CN117271513A (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 |