内容


solidDB 和速度的奥秘

IBM 内存中数据库重新定义高性能

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分:

敬请期待该系列的后续内容。

此内容是该系列的一部分:

敬请期待该系列的后续内容。

阅读本文的交互式数字版格式!(英文)

作为一种内存中关系数据库,IBM solidDB 受到全球的追捧,因为它能够提供超快的速度和超高的可用性。 顾名思义,内存中数据库完全驻留在主存中,而不是磁盘上,这使得数据访问比传统的基于磁盘的数据块要快一个数量级。这种飞跃一定程度上是由于 RAM 能够比硬盘驱动器提供更快的数据访问。

但是,solidDB 还有专为存储、搜索和处理主存中数据而设计的数据结构和访问方法。因此,即使普通的基于 磁盘的数据库将数据完全缓存在内存中,solidDB 仍可以胜出一筹。有些数据库可以提供较短的延时,但是不能处理大量的事务或并发会话。IBM solidDB 可以提供每秒数万至数十万事务的吞吐率,并且始终可以获得微秒级的响应时间(或延时)。本文探索内存中数据库与基于磁盘的数据库在结构上的差别,以及 solidDB 如何提供超快的速度。

RDBMS 的历史

当 20 世纪 60 年代数据管理系统刚刚出现时,磁盘驱动器是唯一可以在合理时间内存储和访问大量数据的地方 。RDBMS 设计者的精力主要集中于优化 I/O 和设法用驱动器的块结构来安排数据访问模式。设计策略常常围绕着共享缓冲池,数据块存放在共享缓冲池中以便重用。随着访问方法的发展,出现了像著名的 B+ 树(一种块优化索引)之类的解决方案。

与此同时,查询优化策略注重尽可能减少页面读取。在对性能的激烈争夺中,磁盘 I/O 常常是最致命的敌人,为了避免磁盘访问,往往需要牺牲处理效率。例如,对于典型的 8 KB 或 16 KB 的页面,页内处理天性是连续的,CPU 效率低于随机数据访问。然而,它仍是减少磁盘访问的流行方法。

当内存富足时代到来时,很多 DBA 不断增加缓冲池,直到缓冲池大到足以容纳整个数据库 ,这便产生了全缓存数据库(fully cached database)的概念。但是,在 RAM 缓冲池中, DBMS 仍受累于效率低下的、结构化的、面向块的 I/O 策略,这种策略原本是为处理硬盘驱动器 而创建的。

将块抛开

内存中数据库系统一个最值得注意的不同之处在于没有大数据块结构。 IBM solidDB 消除了这种块。表行和索引节点独立地存储在内存中, 所以可以直接添加数据,而不必重新组织大块结构。 内存中数据库还放弃使用大块索引(有时也称丛生树),以利于 精简结构,增加索引层数,将索引节点最小化,以避免节点内处理的成本。 最常见的内存中数据库索引策略是 T-树。然而,IBM solidDB 却使用 一种称作 trie(或前缀树)的索引,这种索引最初是为文本搜索而创建的, 但是最终成为极佳的内存中索引策略。trie(此名源于单词 retrieval) 由一系列的节点组成,其中,一个给定节点的后代具有与该节点关联的相同的 字符串前缀。例如,如果单词 “dog” 被存储为 trie 中的一个节点,它将是 包含 “do” 的节点的后代,而后者又是包含 “d” 的节点的后代。

Trie 索引可以减少键值比较,并且几乎可以消除节点内处理,从而能够提高性能。 索引包含一个节点,该节点是一个小型的指针数组,这些指针又指向更低的层。 在此,不必使用整个键值通过遍历树来进行比较,键值被分割为一些小块,每个块包含 数个比特位。每个小块便是相应层的指针数组的直接索引: 最左边的小块指向第一层节点,第二个小块指向第二层的节点,依此类推。 因此,只需进行几次数组元素的检索,便可完成整个搜索。而且,每个索引节点 是一个小数据块(在 solidDB 中大约为 256 字节),这可以带来好处, 因为这种数据块正好适合现代处理器缓存,从而可以通过有效促进缓存的使用 提高处理器的效率。这些小型数据数组是现代处理器中最有效的数据结构, solidDB 经常使用它们来最大化性能。

检查点和耐久性:提速之路

IBM solidDB 还使用其他一些技术来加快数据处理,首先便是一种获得专利的检查点(checkpointing)方法, 这种方法产生一个快照一致性检查点,同时并不阻塞正常的事务处理。 快照一致性检查点使数据库只需从一个检查点重新启动。 其他数据库产品通常不允许那样,而必须使用事务日志文件来重新计算一致状态(而 solidDB 则允许必要时关闭事务日志记录)。solidDB 解决方案之所以能够实现, 是因为做到了分配行镜像和行影子镜像(相同行的不同版本),而不必使用低效的 块结构。只有那些与一致性快照相符的镜像被写到检查点文件,行影子使当前执行的事务 可以在检查点创建期间不受限制地运行。

 图 1: IBM solidDB 可以部署为记录数据库(左边)也可以部署为高速数据库缓存(右边)
图 1: IBM solidDB 可以部署为记录数据库(左边)也可以部署为高速数据库缓存(右边)

而且,solidDB 查询优化器通过以一种新的方式估计执行成本,判别内存 中的表的不同性质。查询优化集中于 CPU 密集型(CPUbound)执行路径,而全缓存数据库 将仍然集中于优化取页到大容量存储器的操作,而这已不再是问题。

IBM solidDB 使用的另一种技术是放宽事务持久性(durability)。在过去, 数据库总是支持完全持久性,以保证事务提交时写的数据持久不变。 问题是,这种完全持久性会造成同步日志写,因而需要消耗资源,降低 响应速度。在很多情况下,为取得更快的响应速度,对于某些任务接受 较短的持久性,这是非常值得的。对于 solidDB,可以为给定的数据库会话乃至整个事务在运行时放宽事务持久性。

IBM solidDB 还通过帮助开发人员避免客户端/服务器交互中的进程上下文切换, 提高数据库性能。通过使用 solidDB 提供的、包含完整查询执行代码的数据库访问驱动程序, 开发人员可以有效地将应用程序与 DBMS 代码链接起来,并使用共享内存在应用程序之间共享数据。

一旦应用了所有这些措施,当应用程序负载大到使传统数据库中需要产生大量 I/O 时, 使用 solidDB 将使吞吐率有数量级的提高。而且,响应速度的提高甚至更加惊人: 查询事务的延时通常是 10 到 20 微秒,更新事务的延时通常少于 100 微秒。 在传统的基于磁盘的数据库中,对应的时间通常是以毫秒计算的。

solidDB 的速度和威力

除了这些性能优点外,solidDB 还带来其他好处。 它将一个完全事务性的内存中数据库和一个强大的、基于磁盘的数据库 组合到一个紧凑的解决方案中,并且可以透明地将同一个数据库的一部分 留在内存中,一部分留在磁盘上。而且,IBM solidDB 是市场上唯一一个 可以作为几乎任何其他基于磁盘的关系数据库的前端高速缓存来部署的产品(见图 1)。 最后,solidDB 还提供超高的可用性,将可用时间由通常的 5 个 9 提高到 99.9999%。 换句话说,如果您要寻求超快的速度,那么将会找到 IBM solidDB,但这只是 IBM solidDB 的开端。


相关主题

  • 通过访问 developerWorks 中国 Information Management 专区的 DB2 9 技术资源中心 获得更多 DB2 9 相关的文章、教程和多媒体课件等学习资源。
  • 通过访问 IBM SolidDB 产品专题, 获得更多 IBM 内存数据库产品相关的文章、教程和多媒体课件等学习资源。
  • 通过访问 DB2 V9.7 信息中心 ,了解 DB2 V9.7 的基本概述。
  • 通过访问 DB2 最佳实践专题,了解 DB2 全方位的管理、开发相关的最佳技术资源。
  • 现在可以免费使用 DB2 。下载 DB2 Express-C,这是为社区提供的 DB2 Express Edition 的免费版本,它提供了与 DB2 Express Edition 相同的核心数据特性,为构建和部署应用程序奠定了坚实的基础。
  • 下载 IM 软件试用版,体验信息管理软件强大的功能。

评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=477631
ArticleTitle=solidDB 和速度的奥秘
publish-date=03252010