Oracle中Timesten的应用
Timesten作为一款纯内存数据库,由于比常规意义的数据库快10倍,在被Oracle收购前,主要用于交易非常高的场合,如交易撮合、电子商务等。在被Oracle收购后,理所当然要配合Oracle数据库使用。昨天上午参加了Oracle 11g的一个研讨会,终于清楚了Timesten的主要使用场景。
Timesten为什么能比普通的数据库快10倍,主要是两个原因。(1)由于所有数据全部在内存,不需要从硬盘上取数据,当然速度大大加快。(2)应用和Timesten之间可以在同一台机器上直接访问,不需要通过网络TCP/IP。同时,由于Timesten全部数据在内存中,一定要和常规数据库配合,最终把数据变化写回常规数据库,把数据永久保留在磁盘上。Oracle是用Trigger方式来保持Oracle数据和Timesten数据一致的,当然Trigger是很消耗资源的,必须合理使用。
明白了上述的几点,就可以明白Timesten的主要场景或使用方法。Timesten最好和Application server如Weblogic装在同一台服务器上,让APP server本机直接访问Timesten,以获得最佳性能。Timesten启动后,将Oracle数据中的常用表同步到Timesten中,APP Server要访问这些数据时,直接从Timesten中获得。比如电子商务中的产品SKU、价格、其他特性等。每一台中间件服务器上都装APP Server和Timesten,由于只读,各机器中的Timesten互相独立,互不影响。利用这种价格,可以大规模地扩展架构,提升交易的并发性。Sybase的ASE Server在11版时,就可以在数据库内存中专门配置特定cache来绑定某些热点数据表,而不会由于内存不足而又要从硬盘访问大量数据时,将这些热点数据swap回硬盘,原理和Timesten的这种使用方式是一致的。不过当时的硬件技术不像现在,服务器可以轻易达到512G~几TB内存,所以能绑定的数据表容量是有限的,限制了应用的使用。不过即使到现在,这种用法和Timesten比起来还是要慢一些的,因为APP Server还是要访问DB Server内存的数据,还是要通过网络TCP/IP的。