TimesTen的名字在前面的帖子已经说过,就是 Ten Times,意思就是比传统的数据库要快一个数量级,为什么同是数据库,TimesTen要快这么多?如果把传统的数据库中的数据全部先load到内存中是否能达到相同的效果?下面我们对它们做一个比较分析。
- 第一,传统的数据库和应用程序是两个不同的应用系统,它们之间的通讯是通过IPC连接来实现的。而TimesTen则是直接把数据库的内存映射到应用程序的地址空间中,简单来说,这时候TimesTen访问数据库中的数据,就象访问应用程序自己的数组、字符串变量一样,只不过TimesTen有一套完善的机制来实现数据的一致性和完整性。这种直接嵌入到应用程序的运行地址空间机制比IPC要高效很多。
- 第二,传统的数据库都是 Disk-based 的,即预先假定数据主要是放在磁盘中的,所以它的所有优化、查询算法都是以磁盘存储为主的。举个简单的例子,比如说要查找一行记录,传统的数据库要先查找索引,通过索引查找该记录所在的页面,然后通过查找该页是已经在内存中,还是要从磁盘的数据文件中读取出来。而TimesTen是预先就把所有的数据Load到内存中,它知道所有的数据一定在内存里面,不会再通过其它的调用去决定数据在哪儿,这其中就少走了很多的弯路,基本没有磁盘的IO,而且都在内存中,效率也就高了很多。所以即使传统的数据库把数据都预先Load的内存中,也是达不到TimesTen的效果的。因为传统数据库的索引机制、优化算法、复杂的数据结构、数据的获取机制等等因素限制了它的性能。
- 第三,由于TimesTen启动的时候预先将所有的数据 Load 到内存中,所以它没有页进页出,而且也不需要类似与Oracle中的SGA缓冲区的管理。
总之,TimesTen只用 1/10 的CPU指令完成了传统数据库同样的任务,从而使得性能和吞吐量提升了一个数量级。
下图说明了其中的不同之处:

文章 (RSS)
December 27th, 2008于7:21 pm
[...] TimesTen特性 [...]