在那些开口闭口就是多少TPS(Transaction per Second)的系统里,Oracle TimesTen内存数据库与BEA的Weblogic RealTime算是两支奇兵。
在那些开口闭口就是多少TPS(Transaction per Second)的系统里,Oracle TimesTen内存数据库与BEA的Weblogic RealTime算是两支奇兵。
一、Oracle TimesTen Oracle TimesTen是Oracle收购的一款内存数据库。Oracle的SQL无论如何打生打死的优化,始终逃不开两个性能的瓶颈:
1.读取硬盘。
虽然大家一般都开了几G内存作缓存,但你毕竟不能编程控制把哪些数据载入缓存,更重要是数据库的基本算法设计是按读取硬盘为前提。而内存数据库是天生就完全基于内存的。
2. C/S模式的进程间通信。
无论是管道,本地Socket还是远程Socket形式的进程间通信(IPC),性能消耗都不能无视,所以我们经常要注意数据库交互的往返次数。而TimesTen直接开在共享内存中,Client通过Driver直接读取共享内存,快呀。
以上两点天然优势是众多内存数据库都拥有的,如做了好多电信生意的Altibase,如ExtremeDB,但Oracle TimesTen好在被Oracle收购了,与Oracle能够很好的互联。
内存数据库可以将自己持久化到硬盘文件,但在很多场景中,它只负责部分数据的读缓存,实际的整体业务数据仍在统一的大数据库里。这时候TimesTen就显示出无比的社会主义优越性:
1. 启动时快速的从Oracle载入部分表的部分数据(用SQL配置)到TimesTen,速度比自己用程序手工查询再放入内存数据库要快得多。
2. 当Oracle的数据发生变化,会自动增量同步到TimesTen,这个解放了好多生产力阿。以往处理同步只有两条路子走:
一是业务系统在更改数据的同时发送JMS消息,由负责维护内存数据库的进程侦听这条消息。
二是利用Oracle SQLJ功能,设Trigger调度由Java写的存储过程,将变动的消息发出去。
二、Weblogic Real Time Core Edition Weblogic 提供实时环境所要求的快速、可预测的响应时间与无暂停的应用平台,benchmark 应用最多只有30ms的延迟。
所谓实时其实分两种
1:硬实时:定义了一个系统,其中所有可调度和不可调度的实体的执行都要遵守规定的完成时间约束。其它时间约束(也称为“上界”)可能也必须满足。实体的行为和运行时间是可预测的、确定的。
2:软实时:表示不属于硬实时的所有其它实时情况。所有时间约束都是软性的。基本上,这就意味着所有可调度和不可调度的实体都可能被优化以便以最佳状态执行,但是执行时间不可预测。
WLRT明显属于软实时,它由几个部分组成:
1. Weblogic Express Basic
A webserver with JDBC, JSP, Servlets, and RMI, but not EJB, JCA, JMS, or XA Transactions。
2. JRocket
使用确定性垃圾收集(DetGC)的高性能JVM。DetGC是整个WLRT的核心卖点。垃圾收集对Java性能有着很大的影响。在full垃圾收集期间,Java进程会完全停止。确定性垃圾收集避免了其他虚拟机中无法预测的暂停时间,从而支持最短的事务延迟。
3. Weblogic Spring Framework
不要笑啊,就是Spring了,使用POJO作为EJB的替代方案。配合Weblogic Basic Express,不知道Tomcat+Spring与它的差距有多大。
另外,看这篇WebLogic Real Time 1.0“Trader”应用程序性能分析
http://dev2dev.bea.com.cn/techdoc/20060620820.html,可以看到金融实时系统里全用JMS,而不是Corba,EJB或者Web Service,即使是Request/Response的形式,而不是那种典型的异步调用,照样JMS不误。其中询价这种操作还取消了持久化消息的步骤。
查看本文来源