内存数据库(MMDB)与磁盘关系数据库(DRDB)比较
一、传统数据库与实时数据库
传统数据库系统(Traditional Database System,TDBS)处理对永久数据的管理,实现事务对永久数据的存取,同时维护其完整性、一致性。所以传统的数据库具有ACID(Atomicity,Consistency,Isolation,Durability)特征,即原子性、一致性、隔离性和永久性。传统数据库管理系统的典型代表是关系型数据库RDBMS(Relational Database Management System),我们平常用到的商用数据库管理系统如Oracle, Informix, Sybase, SQL Server等都是RDBMS。RDBMS已发展了很多年,其技术成熟度已广为人接受,其可靠性、可用性已被广泛验证,并在传统的商务和管理事务型的应用领域获得了极大成功,然而它们在现代的(非传统)工程和时间关键型应用面前却显得软弱无力,其主要原因是其数据存取服务的实时性很难得到保障,由此导致了实时数据库系统(Real-time DataBase System)的产生和发展。
实时数据库系统就是其事务和数据都可以具有定时特性或显式的定时限制的数据库系统,系统的正确性不仅依赖于逻辑结果,而且还依赖于逻辑结果产生的时间。近年来,实时数据库系统已发展成现代数据库系统研究的重要方向之一,在数据库研究领域受到极大关注。实时数据库系统通常简称为实时数据库(Real-time Database,RTDB)。
二、磁盘数据库与内存数据库
正如前面所述,我们平常用到的商业关系数据库系统,其主要目标是保证数据存取的ACID特征,为各类商务及事务应用提供强大的数据管理与存取服务。但它们的数据服务的实时性很难得到保障,其根本原因在于:
传统数据库是磁盘数据库(Disk Resident Database,DRDB),即数据的主拷贝(Primary DB)在磁盘上,数据库管理系统为了向应用系统提供存取服务,将用户需要访问的数据装入主存中,即对数据的管理是“基于磁盘的缓存技术”。而我们知道,磁盘相对于主存来说是极其低速的存储介质,且磁盘存取速度还和欲存取的数据的物理位置和当前磁头状态有关。另外,管理缓存(cache)或缓冲(buffer),无论是在操作系统(OS)层,还是数据库管理系统层,都需要付出较大的代价(时间和空间,尤以时间代价为甚)。因此,即使将磁盘数据全部缓存到主存,其管理代价仍较大,存取速度仍然无法满足多数实时性应用系统的要求。
为了实现实时数据库系统,人们自然想到了基于内存的数据库,即内存数据库(Main Memory Database,MMDB)。MMDB与DRDB的根本区别在于,在MMDB中,数据库的全部或活动事务存取的数据放于内存中(如图1所示),这样事务对盘的访问完全取消了。由于整个数据库放于内存,数据库则不再作为大量存储文件看待而作为内存中可寻址的大量数据,不同于DRDB中的缓存或缓冲区方式,它完全打破了传统磁盘数据库系统的设计宗旨,带来了其自身新的设计问题。如:传统磁盘数据库系统的数据组织、访问方法、查询处理算法的设计都针对减少磁盘访问次数与有效利用盘存储空间,甚至牺牲CPU时间来减少I/O次数(如查询处理有大量中间数据),而内存数据库的设计则主要考虑如何有效地利用CPU的时间和内存空间。对传统磁盘数据库系统相当有效的数据组织、访问方法、查询处理算法,对于内存数据库系统可能并不有效,相反,一些认为对传统磁盘数据库系统无用的办法,反而成为可行的。显然此方式可完全消除事务与盘打交道,且可避免与影响性能的缓冲区管理程序发生联系,故采用此方式使数据库系统性能极大提高。
图1 MMDB与DRDB比较
三、传统磁盘数据库与内存数据库的特点比较
- 传统磁盘数据库的优点
- 传统数据库的ACID机制成熟、可靠;
- 提供强大的数据定义语言(DDL)及数据操作语言(DML),提供SQL支持;
- 提供一定的主动机制(如触发器,Trigger)和后台数据处理能力(如存储过程,Stored Procedure)。
- 传统磁盘数据库的主要缺陷
- 占用、消耗的系统资源较多;
- 数据存取的速度慢;
- 数据存取时间不一致且难以预测
- 内存数据库的突出优势
- 存取速度快速、一致
- 存取时间易于预测
- 易于定制数据存取方式
- 内存数据库的主要特点
- 为了降低MMDB的内存开销,MMDB往往简化了对复杂事务处理的支持,如MMDB一般不提供事务的undo机制,代之以“补偿事务”的方式来实现事务处理的原子性和一致性。
- 由于MMDB中的数据库“主拷贝”在内存中,因此,MMDB对系统的故障恢复提出了更高的要求,实现起来难度更大。
- 通用性不强,由于不同的实时应用系统中的数据对象不同,对数据库的访问要求及访问方式不同。为了提高数据库的实时性,在设计MMDB时,需要根据应用特点,采取一些针对性的措施。因此,设计上往往有一定的特殊性。
四、自主开发面向交易系统内存数据库的必要性
国外目前有一些内存数据库系统的报道,如美国AT&T公司的Data Blitz(前身为Dali),韩国的Xmas,美国的Berkley DB, eXtreme DB等。但这些系统往往只适合某些类特定的应用,且基本上都不商品化,而只是为了满足特定的应用需求而开发的。而对于交易系统而言,其实时性要求较高,如果采用商业传统磁盘数据库系统,其实时性很难令人满意。而交易系统对数据的操作事务并不十分复杂,因此,开发面向交易系统的实时内存数据库系统是必要、可行的。
五、传统磁盘数据库与内存数据库并行工作的可能性
传统磁盘数据库和内存数据库可以并行工作,图2是我们为手机通讯行业提供的解决方案。其中,对实时性要求不是很高的数据可以放在Oracle中,这样可以减少内存数据库处理的数据量,提高效率。
图2 传统磁盘数据库与内存数据库并行工作
六、Oracle 与 MMDB 事务处理能力比较(仅供参考)
表一是我们为通讯行业开发的内存数据库与Oracle 8.0事务处理能力的比较:
大话务量测试结果
版本 | CPU负荷 | 平均事务处理能力(TPS) |
Oracle8.0 | 60% | 150 |
MMDB | 70% | 500 |
表1 Oracle 与 MMDB 事务处理能力比较
测试数据采用信令仪产生。手机通讯时每个事务所操作的数据库记录数要比交易系统少。可以看出,MMDB的简单事务处理能力远远高于Oracle。