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指令完成了传统数据库同样的任务,从而使得性能和吞吐量提升了一个数量级。
下图说明了其中的不同之处:
http://www.ttisql.com/faq/whyfast.html