实时内存数据库的数据管理
日期:2006-11-12 荐:
实时数据安置
1.实时应用对数据安置的要求
在实时应用中,事务在运行前的操作逻辑(操作类型、顺序等)、数据集及其结构、行为以及时间的相关性等都是可预分析的。然而,对磁盘数据库而言,数据的I/O是造成事务执行时间不确定、预报不准确的关键因素。为此,要求 以大内存作为实时数据库的主要存储介质,使一个事务在活动期间没有I/O,以达到较准确的预报,从而满足实时事务 的定时限制。但这要解决两个问题,就是适当的数据安置和适时的内外存交换。
2.影响实时数据安置的因素及数据安置策略
数据在不同存储层上,其读、改、写所需的时间不同,影响数据安置策略的主要因素是数据和事务的特征。
(1)数据特征及其影响
实时性在实时应用环境中,与每一数据相联的有一"外部有效期",数据的安置必须考虑这种实时特性。实时数据又可分为"长时限"和"短时限",短时限实时数据必须保存在内存中。
存取频率高频数据应常驻内存。
永久性:永久数据是长期反复使用和长期有效的数据,临时或短暂的数据只存于内存直至过期。
关键性:关键性是指数据对事务处理的重要性。为了确保其事务的高性能要求(尤其是像实时事务的截止期这样的 要求),关键数据最好安置于内存。
(2)事务特征及其影响
事务类型的影响 "只写"事务就是现代过程控制或工程型应用中的"数据接收"事务,这种事务是很短的、周期的和 紧急的(不可阻塞和等待),因而它们的数据应置于内存中。"只读"事务在现代应用中一般就是"控制"事务,这种事务在提交以前就可能已物理地改变了外部环境状态,因而不能进行传统意义下的Undo恢复,而通过运行其"补偿"事务抵消它的影响,故其数据暂不能交换到外存。更新事务与一般事务无异。
事务优先级的影响事务优先级代表了事务的紧迫度,所以,高优先级事务的数据要常驻内存且不能交换出去。
事务恢复的考虑与数据类似,日志的特征及其安置策略是影响事务夭折-重启动进而影响其截止期满足的主要因素,对于实时数据库,必须设计"内存式"日志。
实时内存数据库技术
关于什么是内存数据库,说法不一,但我们认为,内存数据库的定义不应涉及内存的大小、存取数据所需I/O的多 少、数据何时进入及怎样才能留驻内存等这些具体的实现技术,而只包含数据库常驻内存(而不是磁盘)、事务(不是系统)的数据存取只涉及内存的意思。内存数据库是支持实时事务的最佳技术,其本质特征是其"主拷贝"或"工作版 本"常驻内存,即活动事务只与实时内存数据库的内存拷贝打交道。显然,它要求较大的内存量,但并不要求任何时刻 整个数据库都能存放在内存,即内存数据库系统还是要处理I/O。虽然如此,但它已不是传统磁盘数据库的概念,传统 数据库适用的数据结构、事务处理算法与优化、并发控制及恢复等技术对内存数据库不一定合适。
所以,实时内存数据库的设计应该打破传统磁盘数据库的设计观念,考虑内存直接快速存取的特点,以CPU和内存 空间的高效利用为目标来重新设计开发各种策略与算法、技术、方法及机制。
实时事务要求系统能较准确地预报事务的运行时间,但对磁盘数据库而言,由于磁盘存取、内外存的数据传递、缓冲区管理、排队等待及锁的延迟等使得事务实际平均执行时间与估算的最坏情况执行时间相差很大,如果将整个数据库或其主要的"工作"部分放入内存,使每个事务在执行过程中没有I/O,则为系统较准确估算和安排事务的运行时间,使之具有较好的动态可预报性提供了有力的支持,同时也为实现事务的定时限制打下了基础。
实时数据库的数据组织
1.数据库空间结构
采用内存数据库技术,数据库的存储空间是一个四层结构:易失的内存M1、不易失内存M2(Non-Volatile RAM)、磁盘存储器M3和档案式磁带存储器M4。
M1存放支持各事务的工作数据,故称为实时数据库的"工作版本"O-DB。它由事务直接存取,一般事务也只与它打交道。
M2是M1的拓延,用以存储一些活动的临时性数据,称为"临时版本"T-DB。O-DB和T-DB统称为实时数据库的"内存版 本"(M-DB)。
M3用来存放不在内存的数据库部分,当然还要存放用作恢复的数据库备份。这部分数据库统称为实时数据库的"外 存版本"(S-DB)。
M4一般是脱机磁带,用来存储以前数据库某时刻完整状态的映像,称为实时数据库的"后援版本"A- DB,仅是为了 安全保护的目的和作为档案长期保存。
这种实时数据库存储体系结构基于内存数据库技术,考虑了各种数据的应用语义与特征和系统功能实现,是合理可行的。
2.物理数据组织
实时内存数据库的物理组织是其总体设计目标实现的基础,其存储结构、索引结构、中间数据存储结构都必须考虑内存直接存取这一特征,这里介绍两种物理组织方法。
(1)区-段式
区-段式组织基于关系数据模型,它将存储空间逻辑地划分为"分区",每一分区存储一个关系,物理上由若干" 段" 组成。一个段是内存中一固定长度的连续区域,它相当于"页",是内外存I/O的单位,也是内存空间分配及内存数 据库恢复的单位。
(2)影子内存式
它将内存数据库空间划分成实时内存数据库的主拷贝PDB与"影子"拷贝SM两部分。在事务操作期间,每次查询总是先对SM试探,若不成功,再对PDB操作。所有的更新操作都在SM中进行,且都记录在活动日志中。每当一个事务提交时,由它所产生的在SM中的"后映像"就拷贝到PDB中。
3.索引结构
磁盘数据库有多种有效的索引结构,最有代表性的是AVL树、B-树和B+-树。
对实时内存数据库而言,它们都具有一个共同的关键的缺点,就是存储的有效使用和利用率很低,而查找性能已不像在磁盘中那样优越。为此,我们开发出一种兼有AVL树和B-树的优点且克服了不足的内存索引结构SB-树。它的查找类似于二叉树,其不同之处主要在于每一结点的比较不是针对其中的各个元素值,而是对其最大(即最右)者和最小(即最左)者。SB-树的维护操作类似于AVL树,但由于其独特的结点结构,故在具体的结点插入与删除时有所不 同。
实时内存数据库的数据装入与交换
1.影响数据装入与交换策略的主要因素
有两方面的因素影响M-DB数据的装入与交换策略,即数据本身及其事务的特征。
数据易变性指其变更速率。不同数据有不同的变化速率,易变数据要频繁更新。
数据活跃性指存取频率。应该保证活跃数据具有更大的可存取性。
数据流行性指更新的及时性。流行数据必须保持与现实世界当前真实状态一致。
数据相关性指多个数据经常被一起使用的程度。当装入或交换数据时,相关性强的数据应同时装入或交换。
事务的特征这里只考虑影响数据装入与交换的那些事务特征。首先是在嵌套事务中,父子事务的数据是共享的,故在进行内存装入和与外存交换时,必须注意到这一点。其次是实时事务, 数据装入的次序及时机必须有利于保证满 足其定时限制。再有,高优先级事务的数据显然应留驻内存,且不能交换出去。
2.初始装入
内存数据库初装时,首先考虑的是事务的优先级。优先级高的事务先装入内存,或者不分优先级而按调度策略,将先执行的事务先装入内存;其次是数据的流行性,流行数据对应的事务往往也是高优先事务;再次就是活跃性,存取频率高的数据一般还是先要被存取的数据;紧密相关的数据则随时要考虑被使用。
初装的基本思想是将数据库的全部属性的集合按其存取频率及相亲度划分成子集,然后求出每一子集的加权最高存取优先级,最后依内存容量,将相对加权存取优先级高的那些子集装入内存。
3.内外存数据交换
实时内存数据库没有要求整个数据都始终在内存,故系统仍要通过提供一种内外存数据交换策略来支持实时内存数据库的实现,数据交换策略必须考虑各种因 素:
高易变的实时数据必须常驻内存O-DB中且不能被交换出去。
活跃或高频数据应留驻内存O-DB中,一般不应交换出去。
立即流行的数据在第一个处理请求以前不能被交换出去。
高优先级事务的数据在事务的 动期不能被交换出去,尤其当事务是周期性事务时,其数据应尽可能常驻O-DB。
非永久数据和关键数据最好不要换出。非永久数据无需换出;关键数据至关重要,要保证对它的存取的及时性和有效性。
进行交换的数据单位通常是元组集(页或块)。
实时内存数据库的故障恢复
1.恢复机制
对实时内存数据库而言,恢复显得更为关键,它与传统的恢复技术差别也很大,主要表现在日志设施、检验点技术、数据重装策略等方面。一般恢复机制模型应基于以下原理:
恢复的焦点是内存而不是磁盘数据库。
恢复本身要求的满足不应以牺牲事务对M-DB的存取性能为代价,这意味着恢复与事务应尽可能进行异步/O。
恢复性能对整个系统的总体性能更为关键,因而要开发适合于实时数据库的恢复技术与工具。
实时内存数据库的记录日志可以设计为:
日志缓冲区与事务的工作区合一,以节省内存。
日志缓冲区中只记录"后映像",即只需Redo-only记录,不必Undo记录。
每个活动事务有各自的SLB(Stable Log Buffer),然后按数据库片聚簇成页,再一次一页地写入磁盘日志中。
做检验点的目的是为了减小恢复的工作量,它限制恢复活动仅对那些自上次检验点以来开始的事务进行,其任务 就是将这些事务对数据库所作的变更进行备份。做备份(检验点)的策略有三种:
事务一致性备份(检验点)它原子地反映一个事务活动,故备份或者全是后映像(事务提交)或者全是前映像(事务夭 折)。
活动一致性备份它原子地反映每一活动(不是整个事务),故备份可能既有前映像也有后映像,但不会有反映部分变更状态的记录。
模糊备份(检验点)它不保证事务或活动的原子性。
前面两种一致性检验点要保证在检验点期间,被备份的数据不同时被活动的事务修改,达到这个目的的算法有多 种,有代表性的是静止检验点、黑白检验点与更新时复制检验点。
2.数据库的重装入恢复
重装就是由数据库外存版本S-DB和日志恢复数据库内存版本M-DB的过程。重装有完全重装和部分重装两种类型。完全重装是针对掉电等系统故障的,初装策略在这里可以适用。部分重装是针对内存介质故障或内存不能存储整个数据库的,所以,交换策略适用这里的情况, 只是这里考虑的是如何选择要换入的数据。
一种带优先级的顺序重装法对实时数据库比较有效,它考虑事务优先级,先装立即所需数据,使系统尽快地重启动运行,然后按需要逐步装入数据。
标签: