CN114048153A - 一种通过影子内存页实现内存数据库的事务的方法 - Google Patents
一种通过影子内存页实现内存数据库的事务的方法 Download PDFInfo
- Publication number
- CN114048153A CN114048153A CN202111218399.7A CN202111218399A CN114048153A CN 114048153 A CN114048153 A CN 114048153A CN 202111218399 A CN202111218399 A CN 202111218399A CN 114048153 A CN114048153 A CN 114048153A
- Authority
- CN
- China
- Prior art keywords
- memory
- transaction
- page
- persistent
- shadow
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种通过影子内存页实现内存数据库的事务的方法,包括步骤如下:A,服务器启动;B,初始化持久内存;C,开启事务;D,修改内存状态;E,中止事务并丢弃对内存的修改;F,提交事务并持久化内存。其中本发明的有益效果是:采用持久化内存来实现数据库的功能,并使用类似影子文件的方法,通过影子内存页实现内存数据库的事务。
Description
技术领域
本发明涉及计算机软件领域,特别涉及数据库设计实现方式,以及数据库事务的实现方式。
背景技术
传统的数据库分为关系型和非关系型两种。关系型数据库使用关系模型来组织并存储数据,非关系型数据库以键值对的形式组织并存储数据。但复杂的数据关系,无法通过关系模型或者键值对来描述。在这种情况下,使用传统数据库会变得尤为复杂。
此外,传统的数据库的数据存放在文件中,对数据的操作都要通过文件I/O,速度较慢。传统的数据库往往配备一系列数据管理程序,操作数据需要通过这些管理程序,使用起来较为复杂。
实现事务的方式通常有两种,一种是通过影子文件来实现,一种是通过日志实现。两种方式各有利弊:影子文件实现事务的方法比日志实现方法简单,但没有日志的性能优秀。
本发明是在内存数据库的基础上,通过mmap直接将文件映射到内存,对内存的修改将会直接反映到这个文件中。这时,对数据的持久化无需再进行额外的写日志操作,持久化的文件中包含一整块内存的内容,恢复数据库时只需要再次将这个文件mmap到相应地址空间即可。数据的持久化和恢复将得到极大的简化。
此外,本发明还在上述方案的基础上,增加了对事务的支持。
发明内容
为了解决上述技术问题,本发明中披露了一种通过影子内存页实现内存数据库的事务的方法,本发明的技术方案是这样实施的:一种通过影子内存页实现内存数据库的事务的方法,包括步骤如下:
A,服务器启动;
B,初始化持久内存;
C,开启事务;
D,修改内存状态;
E,中止事务并丢弃对内存的修改;
F,提交事务并持久化内存。
优选地,所述初始化持久内存步骤中,包括初始化持久化内存的存储空间和初始化持久化内存的管理程序。
优选地,包括步骤如下:
A,服务器启动;
A1,恢复持久内存状态;
B,初始化持久内存;
C,开启事务;
D,修改内存状态;
E,中止事务并丢弃对内存的修改;
F,提交事务并持久化内存。
优选地,所述初始化持久内存是文件到一段内存的映射。
优选地,所述C步骤包括,
C1,开始事务会为整个持久内存创造一份可以读写的拷贝;对持久内存的修改将会在这个拷贝上进行;
C2,开始事务后,对某个内存页的修改将会触发写时拷贝。
优选地,所述F步骤包括,
F1,提交事务并持久内存步骤包括要将修改后的内存持久化,使用rename()使拷贝文件替换原本的内存文件,并调用msync()将修改持久化到文件中;
F2,文件中所有页通过指针连接;对某一内存页的修改会产生一个复制的新的内存页,修改将会应用于这个新的内存页中;在提交事务时,更新内存页的指针。
优选地,所述F2步骤包括,
F2.1,修改某一内存页触发Copy on write,并产生一个新的内存页;
F2.2,修改新的内存页指针;将新的内存页的指针指向下一内存页;
F2.3,更新指针:将上一内存页的指针指向新的内存页。
实施本发明的技术方案可解决现有技术中实现事务的两种方式均存在弊端的技术问题;实施本发明的技术方案,通过持久化内存来实现数据库的功能,并使用类似影子文件的方法,通过影子内存页实现内存数据库的事务。。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一种实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
其中相同的零部件用相同的附图标记表示。需要说明的是,下面描述中使用的词语“前”、“后”、“左”、“右”、“上”和“下”指的是附图中的方向,词语“底面”和“顶面”、“内”和“外”分别指的是朝向或远离特定部件几何中心的方向。
图1为实施例1的流程图;
图2为实施例2的流程图;
图3为实施例2提交事务并持久化内存的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
在一种具体的实施例中,如图1和图3所示,一种通过影子内存页实现内存数据库的事务的方法,包括步骤如下:
A,服务器启动;服务器启动,开始工作。
B,初始化持久内存;将持久内存初始化,包括持久化内存的存储空间和管理程序。
持久内存是文件到一段内存的映射,通过mmap()将持久内存文件映射到内存中,持久化内存的修改会保存到该文件中。
C,开启事务;开启事务,持久内存变为可修改状态。
D,修改内存状态;运行的程序修改了持久内存的状态。
E,中止事务并丢弃对内存的修改;中止事务并丢弃修改,恢复到开始事务之前的状态。
F,提交事务并持久化内存。提交事务并将修改后的内存状态持久化到文件中。
本实施例中,E和F为两个分支。
实施例2
在一种优选的实施例中,如图2和图3所示,一种通过影子内存页实现内存数据库的事务的方法,包括步骤如下:
A,服务器启动;服务器启动,开始工作。
A1,恢复持久内存状态;恢复服务器上次运行留下的持久内存状态。
B,初始化持久内存;将持久内存初始化,包括持久化内存的存储空间和管理程序。
持久内存是文件到一段内存的映射,通过mmap()将持久内存文件映射到内存中,持久化内存的修改会保存到该文件中。
B,开启事务;开启事务,持久内存变为可修改状态。
在开始事务前,持久内存是只读状态,任何修改都会触发错误。
一个事务中的所有操作应该是原子性的,即要么全部成功且事务对内存的操作被持久化到磁盘中,要么事务中所有操作对内存的修改都无效,不会被持久化到磁盘上。
对于事务的实现有以下两个方案:
C1,开始事务会为整个持久内存创造一份可以读写的拷贝;对持久内存的修改将会在这个拷贝上进行;
C2,开始事务后,对某个内存页的修改将会触发写时拷贝,即在内存中创建一个新的页用于保存修改。
D,修改内存状态;运行的程序修改了持久内存的状态。
E,中止事务并丢弃对内存的修改;中止事务并丢弃修改,恢复到开始事务之前的状态。
在中止事务同时,丢弃对持久内存的修改,删除修改后的内存拷贝即可。
F,提交事务并持久化内存。提交事务并将修改后的内存状态持久化到文件中。
在提交事务时,对应C步骤中事务实现的两个方案:
F1,提交事务并持久内存步骤包括要将修改后的内存持久化,使用rename()使拷贝文件替换原本的内存文件,并调用msync()将修改持久化到文件中;
F2,文件中所有页通过指针连接;对某一内存页的修改会产生一个复制的新的内存页,修改将会应用于这个新的内存页中;在提交事务时,更新内存页的指针。
F2.1,修改某一内存页;修改某一内存页时会触发Copy on write(写时拷贝),然后产生一个新的内存页,修改会暂时在这个新的内存页上进行。
F2.2,修改新的内存页指针;将新的内存页的指针指向下一内存页;
F2.3,更新指针:将上一内存页的指针指向新的内存页。
在本实施例中,通过mmap映射文件到内存,使得每次对内存的修改都能反映到文件中,简化了内存数据库的数据持久化流程。此外,mmap比普通的文件I/O更快,一般性能是文件I/O的二十倍。
图3为链表结构,为了体现节点的变化,复制内存页和新的内存页实际上为同一个内存页。
通过影子文件的方式,实现本内存数据库对事务的支持。在提交事务之前,所有对数据的修改都不会持久化到文件中。为了保护数据的一致性,所有对数据的操作都只能在事务中进行。
本发明中,E和F为两个分支。
需要指出的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种通过影子内存页实现内存数据库的事务的方法,其特征在于:包括步骤如下:
A,服务器启动;
B,初始化持久内存;
C,开启事务;
D,修改内存状态;
E,中止事务并丢弃对内存的修改;
F,提交事务并持久化内存。
2.根据权利要求1所述的一种通过影子内存页实现内存数据库的事务的方法,其特征在于:所述初始化持久内存步骤中,包括初始化持久化内存的存储空间和初始化持久化内存的管理程序。
3.根据权利要求2所述的一种通过影子内存页实现内存数据库的事务的方法,其特征在于:包括步骤如下:
A,服务器启动;
A1,恢复持久内存状态;
B,初始化持久内存;
C,开启事务;
D,修改内存状态;
E,中止事务并丢弃对内存的修改;
F,提交事务并持久化内存。
4.根据权利要求3所述的一种通过影子内存页实现内存数据库的事务的方法,其特征在于:所述初始化持久内存是文件到一段内存的映射。
5.根据权利要求4所述的一种通过影子内存页实现内存数据库的事务的方法,其特征在于:所述C步骤包括,
C1,开始事务会为整个持久内存创造一份可以读写的拷贝;对持久内存的修改将会在这个拷贝上进行;
C2,开始事务后,对某个内存页的修改将会触发写时拷贝。
6.根据权利要求5所述的一种通过影子内存页实现内存数据库的事务的方法,其特征在于:所述F步骤包括,
F1,提交事务并持久内存步骤包括要将修改后的内存持久化,使用rename()使拷贝文件替换原本的内存文件,并调用msync()将修改持久化到文件中;
F2,文件中所有页通过指针连接;对某一内存页的修改会产生一个复制的新的内存页,修改将会应用于这个新的内存页中;在提交事务时,更新内存页的指针。
7.根据权利要求6所述的一种通过影子内存页实现内存数据库的事务的方法,其特征在于:所述F2步骤包括,
F2.1,修改某一内存页触发Copy on write,并产生一个新的内存页;
F2.2,修改新的内存页指针;将新的内存页的指针指向下一内存页;
F2.3,更新指针:将上一内存页的指针指向新的内存页。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111218399.7A CN114048153A (zh) | 2021-10-20 | 2021-10-20 | 一种通过影子内存页实现内存数据库的事务的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111218399.7A CN114048153A (zh) | 2021-10-20 | 2021-10-20 | 一种通过影子内存页实现内存数据库的事务的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114048153A true CN114048153A (zh) | 2022-02-15 |
Family
ID=80205521
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111218399.7A Pending CN114048153A (zh) | 2021-10-20 | 2021-10-20 | 一种通过影子内存页实现内存数据库的事务的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114048153A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115827651A (zh) * | 2022-11-22 | 2023-03-21 | 中国科学院软件研究所 | 一种低能耗的机载嵌入式数据库内存事务管理方法及系统 |
-
2021
- 2021-10-20 CN CN202111218399.7A patent/CN114048153A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115827651A (zh) * | 2022-11-22 | 2023-03-21 | 中国科学院软件研究所 | 一种低能耗的机载嵌入式数据库内存事务管理方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110447021B (zh) | 用于在数据中心之间维持元数据和数据的一致性的方法、装置和系统 | |
US8046334B2 (en) | Dual access to concurrent data in a database management system | |
JP6629407B2 (ja) | 更新されたファイルにアクセスする方法及びシステム並びにソフトウェア製品 | |
US20190073277A1 (en) | Transaction Recovery Method in Database System, and Database Management System | |
US8156165B2 (en) | Transaction-safe FAT files system | |
US8112607B2 (en) | Method and system for managing large write-once tables in shadow page databases | |
US20170060703A1 (en) | Recovery processing for database in persistent system | |
Birrell et al. | A simple and efficient implementation of a small database | |
US20050010592A1 (en) | Method and system for taking a data snapshot | |
EP2590078B1 (en) | Shadow paging based log segment directory | |
US8108356B2 (en) | Method for recovering data in a storage system | |
Hu et al. | TxFS: Leveraging file-system crash consistency to provide ACID transactions | |
CN102541691B (zh) | 面向内存数据库oltp应用的日志检查点恢复方法 | |
US20190050444A1 (en) | Database recovery using persistent address spaces | |
KR20200060220A (ko) | 비휘발성 메모리 기반 파일 시스템 및 이를 이용한 데이터 갱신 방법 | |
JP2002501258A (ja) | ファイル・システムにおけるネーティブ・データ署名 | |
CN114048153A (zh) | 一种通过影子内存页实现内存数据库的事务的方法 | |
CN113821382B (zh) | 一种实时数据库数据处理方法、系统和设备 | |
US20160085796A1 (en) | Swat command and api for atomic swap and trim of logical pages | |
US8745005B1 (en) | Checkpoint recovery using a B-tree intent log with syncpoints | |
Gray et al. | The recovery manager of a data management system | |
CN111429140A (zh) | 一种实现多层级智能合约栈的原子性的方法和装置 | |
WO2016122699A1 (en) | Failure atomic update of application data files | |
KR102316198B1 (ko) | 파일 액세스 방법, 컴퓨터, 및 컴퓨터-읽기 가능한 매체에 실행 가능한 소프트웨어 제품 | |
JP2022098495A (ja) | データベースを保存するためのハイブリッドシャドウページング |
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 |