微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式内存数据库的研究与设计

嵌入式内存数据库的研究与设计

时间:02-07 来源:互联网 点击:

内存技术和日志处理技术的完美结合。其中, 新的事务模型和处理机制如下图3所示。

3.1 日志操作

对每一个事务Ti分配一个内存工作区WAi,兼做影子内存和日志两种功能。在事务进入 提交状态之前,将修改记录放入影子内存中,当Ti进入提交状态时,由提交处理根据WAi中 的记录对MDB作相应修改。我们称这种修改为“日志驱动修改”。当某一事务Tj由于某种原 因夭折时,只需释放其相应的影子内存工作区WAj即可, 而无需对数据库进行UNDO操作。因 此在本文中我们采用Redo日志。这样,不仅可以大大节省内存空间,同时也简化了Abort(夭 折)处理。同时,为了便于对影子内存工作区的管理,给每一个影子内存工作区WAi设置一时 间戳TWAi,用来表示对应事务提交过程结束的时间。在处理日志提交时,我们充分利用事务 预提交和组提交的优点来设计。具体过程如下,每一个已提交事务的WAi进行预提交,按时 间先后顺序组成链表LiST(WAi),其结构如下:

事务进入提交阶段,提交处理(COMMIteR)对MDB作“日志驱动修改”。当上述事务都完成时,进行一次组提交,将上述事务的处理结果和日志写入磁盘,这样可以减少磁盘I/O操作的次数。

3.1.1事务提交算法

事务提交具体算法如下:设WAi为活动事务Ti的影子内存工作区,则事务Ti在时刻t的提 交处理算法为COMMITER(WAi,t)[ 4 ]。

输入:WAi--事务Ti的影子工作区;t--某一个时间点。

输出:0--执行成功;1--执行失败。

步骤: ①依据WAi中的记录,对内存中所有要被事务Ti修改的数据块执行上锁操作;② 对已上锁的数据块, 根据WAi中的记录执行相应的更新操作;③在WAi中写入一个提交记录; ④用当前时间t为WAi设置时间戳TWAi;⑤将WAi加入到影子工作区队列的尾部;⑥将事务表 中该事务的状态标志位从运行状态改为提交状态;⑦对在步骤①中上锁了的数据块解锁。

3.1.2日志提交算法

在事务处理中,用于恢复的日志对WA的处理算法为LOGGER(WAq),日志提交算法如下:

输入:WAq--影子工作区队列。

输出:0--执行成功;1--执行失败。

步骤:①检查WAq 是否为空,若不空,则从队列头取出第一个影子工作区WAx;若为空, 则挂起;②将WAx中的记录写入外存的日志文件LOG中;③释放WAx;④将事务表中相应于WAx 的事务的状态标志位从提交改为撤销;⑤转步骤①循环执行。

3.2检查点操作

检查点操作包括静止检查点和非静止检查点。静止检查点要求操作过程中,数据库处于 静止状态,检查点结束后,开始新的事务。在嵌入式内存数据库对实时性要求很高静止检查 点很明显不能满足要求,因此我们采用非静止检查点。

在CHECKPOINT操作期间,由于采用的是Redo日志,提交事务所做的修改拷贝到磁盘的时 间可能比事务提交的时间晚得多,且采用预提交和组提交技术,我们要考虑检查点发生时的 活动事务,及在检查点进行前将影子内存工作区中,已提交的事务和日志刷新到磁盘中作为 备份。执行检查点的步骤如下[5 ]:

3.3重装与恢复

恢复涉及到两个步骤,首先是重装,将数据库备份装入MMDB 中;然后是恢复,根据日 志和检验点执行相应操作使数据库恢复到系统崩溃之前最近的一致性状态。检查点可以帮我 们缩小日志的范围,减少日志占用的空间资源,根据最后一个检查点记录是START还是END, 有以下两种情况。

4结束语

在嵌入式内存数据库领域,随着程序语言的发展,数据库理论的成熟,新的设计思想和 技术在不断涌现,各种产品应运而生。本文就是结合当今流行的java 语言和面向对象的思 想,结合嵌入式内存数据库本身的特征,充分利用java 的多线程机制与事务处理的结合来 提出新的事务模型,同时融合了影子技术和日志技术,提出了新的恢复处理方法。但是本文 在很多方面还有不足之处,尤其是重装与恢复算法方法,还有很多具体的工作要做。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top