嵌入式内存数据库引擎的研究与设计
扫描二维码
随时随地手机看文章
1 嵌入式内存数据库技术发展的现状
数据库理论与技术的发展极其迅速,其应用日益广泛,在当今的信息社会中,它几乎无所不在。以关系型为代表的三大经典(层次、网状、关系)型数据库在传统的(商务和管理的事务型)应用领域获得了极大成功,然而它们在现代的(非传统)工程和时间关键型应用面前却显得软弱无力,面临着新的严峻的挑战,由此而导致了嵌入式实时数据库的产生和发展。在实时应用中,事务在运行前的操作逻辑(操作类型、顺序等)、数据集及其结构、行为以及时间的相关性等都是可预分析的。然而,对磁盘数据库而言,数据的I/O 是造成事务执行时间不确定、预报不准确的关键因素。为此,要求以大内存作为实时数据库的主要存储介质,使一个事务在活动期间没有I/O, 以达到较准确的预报,从而满足实时事务的定时限制。但这要解决两个问题,就是适当的数据安置和适时的内外存交换。随着内存技术的高速发展,内存数据库技术日益成熟,在非实时系统中也得到了广泛的应用。
内存数据库(MMDB)把数据库的主拷贝(即“工作版本”)常驻在内存,使系统性能得到了极大的提高。但是,由于所有操作直接作用于内存中的数据库主拷贝上,数据库极易受到操作系统和应用软件错误造成的破坏,而且,数据库恢复所包含的I/O 操作(如做日志、备份等)在事务运行不需要I/O 操作的内存数据库系统中也显得极为突出。因此,内存数据库的恢复机制对系统性能有重要的影响作用,内存数据库的恢复较之传统的磁盘数据库的恢复要复杂得多,也关键得多。数据恢复是内存数据库可靠、实用的关键,恢复技术的研究已成为MMDB 研究领域最热门的课题。
2 内存数据库的定义
内存数据库的定义不应涉及内存的大小、存取数据所需I/O 的多少、数据何时进入及怎样才能留驻内存等这些具体的实现技术,而只包含数据库常驻内存(而不是磁盘)、事务(不是系统)的数据存取只涉及内存的意思。其本质特征是其“主拷贝”或“工作版本”常驻内存,即活动事务只与实时内存数据库的内存拷贝打交道。显然,它要求较大的内存量,但并不要求任何时刻整个数据库都能存放在内存,即内存数据库系统还是要处理I/O。传统的磁盘数据库即使缓冲区足够大,以致可以容纳所有数据也不能算是一个MMDB。因为它是针对磁盘特性、在数据库常驻磁盘的假定下设计的。例如,索引结构还是针对磁盘存取的,数据的存取仍必须经过缓冲区管理等。内存数据库的组织与管理要求新的适于内存特点的数据结构和算法,对于数据的组织与安置、数据库存取、内外存数据交换、查询处理及优化、并发控制及数据库恢复都需要研究新的策略与机制。
内存数据库是一个较新的研究领域,结合各方面参考,现给出如下定义:
定义:设有数据库DB,DBM(t)是t 时刻DB 在内存中的数据集,DBM(t)真包含于DB; T S 为所有事务的集合,A T(t)是t 时刻的活动事务集,A T(t)真包含于T S;D t(T)为T 在t 时刻的操作数据集,D t(T)真包含于DB;若在任一时刻t,均有:
对任一事务有T∈A T(t),D t(T)真包含于DBM(t)成立,则称DB 为一个内存数据库,简记为MMDB 。
按此定义,MMDB 的“工作版本”(当然也可以是整个数据库)常驻内存,任何一个事务在执行过程中没有内外存间的数据I/O。显然,它需要一定的内存容量,但并不要求整个数据库都必须常驻在内存。
3 内存数据库的特点
3.1 内存数据库数据存储的组织和管理一个MMDB的逻辑整体主要由两个部分构成,即内存版本与外存版本。 主存储器是易失内存,它存放MMDB的“工作版本”。它在逻辑上被划分为若干分区,一
个分区用来存放一个关系的数据。每个分区又物理地由若干相互链接的块组成。一块是一个固定长度的连续区域,它是内外存I/O的单位,也是内存分配、回收以及对MMDB进行恢复的单位。索引与数据记录分离存放。
NV-RAM(NO Vola tile RAM)兼有内存读写速度快和在后备电池维护的情况下非易失的特点,但价格昂贵,不便插拔,广泛用于嵌入式系统,并可与Flash-RAM配合使用,充当Flash-RAM 写缓冲区。NV-RAM是主存储器的拓延,目前可用UPS、固态磁盘或磁盘Cache等实现。主存数据与NV-RAM数据一起统称为MMDB的“内存版本”。
磁盘存储器用来存放未在内存的那一部分数据库数据,同时也用作数据库恢复的备份,我们称之为“外存版本”。为便于实现内外存间的数据交换,可将磁盘数据在逻辑上划分为与内存块同样长度的定长块,建立相同类型的索引。
3.2 事务处理
当内存数据库用于非实时系统时,除了日志和系统恢复的具体方式跟传统数据库差异比较大以外,事务处理过程与传统数据库的事务处理相似;然而,当内存数据库用于实时系统时,既实时内存数据库中,事务处理由于受到了时间上的限制,传统数据库的事务处理已经不再适用。传统的“ACID” 的事务概念及模型对实时事务不适合。实时事务表现出了许多不同的特征,如实时性和相关性。虽然实时事务的正确性与传统事务一样,也包括数据库状态正确性和事务执行正确性两个方面,但其含义与内容有很大的不同。在实时事务中,数据库状态正确性包含内部一致性和时间一致性,事务执行正确性则包含其结果正确性、行为正确性、结构正确性和时间正确性等。事务调度也要采取相关的实时调度算法。本文中讨论的内存数据库引擎针对非实时系统。
3. 3 系统恢复
数据库的备份是数据库的副本以及一些控制信息,在出现故障的情况下,可以随时用它进行恢复。数据库备份最小化了数据丢失,能够让您使用恢复过程,从备份副本中重新构造失败的数据库。有多种类型的失败导致需要恢复数据库。其中包括语句失败、用户错误、进程失败、数据库实例失败、媒介失败等。但不是所有类型的失败都需要进行人工交互。但是,在内存数据库系统中,由于所有操作都直接作用于内存中的数据库主拷贝上,数据库极易受到操作系统和应用软件错误造成的破坏,因此MMDB的恢复技术如备份、检验点(Checkpoint)和重启动(restart)等都较常规的磁盘数据库(DRDB)复杂。人们从体系结构、事务提交、日志系统到备份、检验点算法等各个方面进行了大量的研究和探索。日志管理是内存数据库恢复机制中至关重要的一环。由于内存有易失性,日志最好保存于另一稳妥的介质上(如磁盘、非易失内存等),而对日志的I/O操作又将在某种程度上影响MMDB的性能,可能成为瓶颈影响系统的事务吞吐量。为此,人们研究了各种各样的解决办法,比如构造非易失内存用于保存部分日志;采用“成组提交”的技术,使用影子内存技术等来解决日志瓶颈问题。在检验点方面,为了提高系统效率,通常力图使检验点操作和事务处理同时进行。为了提高速度指标和综合性能,MMDB系统往往利用附加的硬件设备如非易失内存、专用的日志处理器、检验点处理器等来支持高效、快速的数据恢复。
4 面向3G平台嵌入式内存数据库引擎的设计
4.1 3G平台中数据库子系统整体架构
4.1.1 数据库系统各功能模块在3G平台系统中的位置 3G软件平台包括图1所示的除OS和BSP外的6大软件子系统。
DataBase 子系统负责管理平台的物理资源和平台实现的信令、协议的配置信息,同时向其它子系统提供数据库访问接口。它工作于操作系统之上。 承载子系统向业务子系统、信令子系统、OAM和网管子系统提供ATM、IP、等方面的承载服务。它工作于操作系统和DataBase 子系统之上。 信令子系统实现窄带No.7 信令、宽带No.7 信令、IP信令、网关控制信令,向业务处理子系统提供服务。它工作于操作系统、DataBase子系统和承载子系统之上。 系统控制子系统负责对整个系统的监控、启动、版本下载等。它工作于操作系统和DataBase 子系统之上。
OAM 和网管子系统提供平台与网管后台的统一接口,负责对平台的协议、信令进行配置和管理,以及提供必要的统计数据。它工作于操作系统、承载子系统、DataBase子系统之上。
业务处理子系统实现系统提供的各种业务。它工作于操作系统、承载子系统、信令子系统、DataBase子系统之上。
数据库子系统分布在3G 平台各处理器上。从结构上看数据库子系统属于分布式数据库系统;主要为平台各个子系统提供数据支持,并为将来其上的扩展业务提供支持易扩充机制的数据库模型。
4.1.2 数据库子系统内部模块划分
数据库子系统内部划分五大功能模块,支持数据来源为RAM、FLASH、硬盘特定格式以及商用数据库等多种介质。五大功能模块分别是:输入输出模块、对象管理模块、业务处理模块、维护管理模块及平台系统工具包。
输入输出模块(I/O模块)负责完成整个平台所有与硬件介质相关的数据、装载、转储、存储空间管理等等相关功能。
对象管理模块是整个平台的核心模块(DBCORE),完成主体功能,即对内存数据、表、索引、锁等等系列对象的核心组织功能,对整个系统的性能高低有决定性的影响。提供简易的内部并发控制手段。
业务处理模块是针对数据库平台的用户提供的使用接口层,完成对内存数据库的访问服务。可以支持API 方式及类SQL 访问方式。支持分布式数据访问方式。 维护管理模块完成对整个平台系统的监控及管理,包括探针、告警、日志、实时业务跟
踪、远程网络访问等等系列功能的实施。 平台系统工具包针对各模块均有完善的工具支持,具体如下: 介质层工具:各类特定介质的数据存储文件检索、修改、生成。 对象管理模块工具:根据对象属性区别性选择生成主体程序框架,若无特殊要求,生成
的代码可直接用于对象管理。 I/O 模块工具:根据内存数据库分布模型,生成数据装载、转储及内存数据存储空间
管理等框架代码;业务处理子系统工具,常规API 代码生成。 维护管理模块工具:接口跟踪、日志等输出文件的检索、管理工具。 其他:各类对象(表、索引……)设计及相关说明文档生成。
4. 2 系统对象设计原理和处理流程 本子系统是按照面对对象的方法进行设计的,因此在叙述系统处理流程时以子系统的各个对象为主线,而同步流程和监控流程设计上有其自身特点,对它们的叙述以过程为主线。
本子系统的数据分为数据表、索引、队列、同步实例、监控实例、单向资源队列六大类。其中数据表为数据库组织的核心,然后为数据定位的方便建立索引,为资源管理的方便建立了队列,出于数据同步的需要建立了同步实例,出于资源监控的需要,建立了监控实例,而单向资源队列作为辅助数据表和同步实例的内存管理之用。
以上除单向资源队列外每一类数据都定义为系统的数据对象类,系统对于同一对象类的数据统一定义,统一管理。一个具体的数据对象称为某一数据对象类的数据实例。系统为表、索引、队列、同步、监控的所有数据实例统一分配唯一一个32 位整数加以标识,称为数据实例句柄。对数据实例的存取都是通过数据实例句柄进行的。采用这种方式的一个优点是数据管理的稳定性不随着数据实例的增加而变化,有利于系统的稳定。另一个优点是便于数据对象类的扩充,由于不同数据对象类别分别管理,数据对象类之间的独立性确保在扩充数据对象类后,不破坏原有数据的安全性。
单向资源队列作为在表对象和同步对象内部使用的对象。没有统一分配句柄,相关的表通过保存单向资源队列对象的指针实现操作。
5 小结:
本文作者创新点是本文首先介绍了嵌入式内存数据库技术现状,然后简单介绍了内存数据库技术的特点等并提出了一个适用于3G平台的嵌入式内存数据库引擎,随着计算机技术的高速发展和人们对信息处理速度不断增长的需求,大容量的内存数据库和经过精简的嵌入式内存数据库将会有越来越大的应用空间。目前,还没有比较好的通用的嵌入式内存数据库产品,进行这方面的开发和实现将会有很大的市场潜力和空间。