(一)数据库处理速度之痛
最近发现数据库系统的书上很多内容还是基于以辅助存储器作为主要读写阵地,以内存作为缓存来辅助数据库的读写。我们在学习计算机组成原理的时候知道:内存和辅助存储器的读写速度是不匹配的,内存远远快于辅助存储器的读写速度。在主要基于辅助存储器的数据库系统中,我们通过各种算法优化不断的提高数据库处理数据的能力,然而无论速度如何提高,数据库的处理速度始终无法逾越内存与辅助存储器I/O操作速度的瓶颈。虽然经过若干年的发展,辅助存储器从磁带到机械硬盘到固态硬盘在容量、性价比、读写速度等方面都有不小的提升,但与内存在速度上还是难以匹配。幸运的是,计算机硬件的发展中内存的发展是遵循“摩尔定律”的。内存如今越来越大、价格也越来越便宜,使得我们应该重新审视基于辅助存储器的数据库。
(二)数据库发展阶段
如果将数据库发展按照内存和外存(辅助存储器)来进行划分,目前可以将数据库的发展分为如下三个主要阶段。
一、外部存储器磁盘为主的阶段:数据库的大部分内容都只是放在辅助存储器上,内存一般作为缓存来加快数据读写速度。我们的数据库实现书籍大多都是叙述这一阶段的数据库。但在这一阶段中外部存储机械式磁盘读写速度与内存悬殊很大,磁盘的I/O操作对数据库性能的影响很大。
二、外部存储器固态硬盘(SSD)为主的阶段:随着技术的发展,固态硬盘在市场中的份额越来越多,并且它的容量性价比是符合摩尔定律的,带宽提升也非常快(如PCIE接口)。所以开始有一部分公司尝鲜,把数据库中部分或全部转移到固态硬盘上。这也确实提高了外部存储器的I/O操作的速度。但仍然未根本解决内存与外存之间速度的矛盾。
三、内存为主的阶段:这一阶段中因为内存价格持续下降、速度持续增加,数据库的主阵地变为内存,而辅助存储器只是起到辅助作用了。这一阶段有VoltDB、HANA、MemSQL等一系列内存数据库。它们都有一个相同的特点,就是将内存作为数据库的主阵地,并针对内存与CPU之间的存取进行算法设计、优化。除了共同点外,每个数据库又有自己所专注的方面,VoltDB就对原有数据库设计理论进行了颠覆,为了避免锁等开销,提升数据库性能,应用全局时钟和预编译进行并发控制;HANA则是通过内存存储以及内存中数据更高程度的压缩来换取对大数据分析任务的速度;为了使数据库更加贴合内存,MemSQL在Mysql的基础上对存储引擎重新进行了设计。从上面的三个方面来看,与传统数据库相比,内存数据库不失为一个提高数据库整体性能的、值得探索的新途径!
(三)内存数据库发展阶段
追本溯源,内存数据库的想法萌芽可追溯到上世纪六十年代。IBM公司在1969年研制的数据库管理系统IMS就是世界上最早的基于层次模型的数据库管理系统,IBM公司将IMS作为软件商品投放市场。IBM设计IMS时考虑到基于内存的数据管理方法,相应推出了IMS/VS Fast Path。Fast Path是一个支持内存驻留数据同时也可以很好地支持磁盘驻留数据的商业化数据库。Fast Path将需要频繁访问、高响应速度的数据直接存放在主存中进行读取管理,主存数据库的主要设计思想在该产品上已经开始得到体现。后来,D J DeWitt等人于1984年在《主存数据库系统的实现技术》中首次明确了主存数据库(Main Memory Database)的概念。他们已经能够预见,当时相当昂贵的主存价格会在将来不断下降,预测未来人们可能有能力将数据库全部放到主存中进行管理,并针对主存数据库的构想提出了哈希算法、AVL树、主存数据库恢复机制等关键理论,为如今主存数据库的发展起到了很大的推动作用。IBM在1985年推出了于IBM 370系统之上运行的主存数据库OBE。随后,检查点技术在1986年的RB Hagman应用,以实现主存数据库的恢复。解决主存数据库中并发控制问题的新方法——按区双向锁定模式,在威斯康星大学也被首次提出,并在MM-DBMS主存数据库上得以实现。以堆文件(HEAP FILE)的数据存储结构作为主存数据库存储结构的构想在1987年的ACM SIGMOD会议中被提出。1988年,TPK主存数据库在普林斯顿大学设计成功。1990年,System M主存数据库在普林斯顿大学设计完成。各种主存数据库模型像雨后春笋般不断产生,也为今天的主存数据库理论打下坚实的基础。
随着互联网的发展,越来越多的网络应用系统对数据库系统在并发访问量和响应速度上提出了前所未有的高要求。好在半导体技术也发展迅猛,半导体内存的生产规模不断提升,动态随机存取存储器(DRAM)的容量越来越大,而价格越来越低。主存硬件的发展直接推动着主存数据库市场的发展,主存数据库技术的可行性也开始逐渐成熟。Polyhedra便是美国的OSE公司在1994年推出的第一个商业化的、投放市场并实际应用的主存数据库产品。德国SoftwareAG于1998年推出了自己的主存数据库Tamino Database。日本UBIT会社1999年开发出XDB主存数据库产品。韩国Altibase推出Altibase。奥地利的QuiLogic公司2000年推出了SQL-IMDB主存数据库。美国的McObject于2001年推出eXtremeDB。加拿大Empress公司推出EmpressDB。SAP公司于2011年推出基于内存计算技术的SAP HANA(High-Performance Analytic Appliance),面向企业分析性应用的产品。在2013年OpenWorld上甲骨文推出BI Machine Exalytics也是使用的内存数据库技术。
(四)内存数据库认知
虽然在现代传统数据库技术也通过加大了内存容量,以此使缓冲区增大,最终将频繁访问的数据缓存到缓冲区以达到加快存取速度的目的。但这种方法与磁盘数据库无任何区别,只是缓冲区很大而己。数据的存取要通过缓冲区,最小化磁盘I/O仍然是算法设计的主要目标。内存数据库不仅仅只是比传统数据库加大了内存,而且因为数据库全部放到了主存,完全没有磁盘的I/O操作的系统瓶颈。既然内存数据库的主要阵地转移到了主存,所以传统数据库中主要针对磁盘I/O操作的大多数算法不再适用于内存数据库。为了更好的、高效的使用CPU和内存空间,内存数据库的数据结构、查询处理、并发控制、恢复等都必须重新设计。目前,己有大量的对内存数据库的研发,包括了内存数据库的并发控制技术、事务提交处理技术、数据访问技术、查询处理和查询优化技术、恢复处理技术、数据迁移技术、负载均衡技术等各个方面。虽然目前的理论比较丰富,但是稳定的、适用性广的产品并不多,大多数还处于实验室研究阶段,工业化应用也只局限于几个领域,比如电信和金融领域,并且多为平台相关的、应用相关的数据库系统,无法适应广泛的应用要求。
内存数据库系统的数据永久驻留在内存中,而常规的磁盘数据库系统的数据是驻留在磁盘中。因而,在访问数据时,内存数据库拥有比磁盘数据库更高的访问效率。对于需要在严格要求的时间段内完成事务请求的实时应用系统,和需要支持大数据量并发访问的高性能事务处理平台来讲,内存数据库都是一个理想的选择。
从内存数据库的发展历史来看,内存数据库产生已有三十余年。虽然早期人们对内存数据库的定义并没有形成完全的标准统一,但人们对内存数据库已经达到的共识是:内存数据库不应涉及内存大小、次数、数据何时进入及怎样留驻内存等具体的实现技术,而只包含数据库永久留驻内存,事务的数据存取只涉及内存。后来人们慢慢对内存数据库形成普遍的理解,数据库运行期间所需的数据环境不应有I/O,常驻内存是内存数据库充分必要的条件。
本文在撰写过程中,得到贵州大学李晖教授的指导,在此感谢!
参考文献:
- 王晨,内存数据库若干关键技术研究。
- 袁培森,内存数据库的设计与实现。
- 宋毅,缓存敏感T树的设计与实现。
- 史习一,在数据清洗过程中基于MMDB的数据匹配技术。
- 靳若冰,基于商业数据库的实时数据库开发研究。
- 石英伟,分布式实时内存数据库关键技术研究与实现。
- 梁智兴,内存数据库恢复技术研究。
- 张效尉,王大羽,内存数据库故障恢复策略研究。