1.3.1 Oracle TimesTen

TimesTen是一种关系型内存数据库产品,也是第一个商用的关系型内存数据库。TimesTen最初来自惠普实验室的内存驻留数据库项目Smallbase。1995年,TimesTen被嵌入到惠普的电信产品OpenCall中,这是其第一次正式的商业应用。1996年,TimesTen从惠普分拆并在加利福尼亚州成立独立公司。1998年,TimesTen发布第一个商用的关系型内存数据库,产品在电信和金融行业得到广泛应用。2005年6月,TimesTen被Oracle正式收购,成为其旗下实时数据管理产品家族中的一员。

图1-2为TimesTen数据库的发展简史,从中可以看出,在被Oracle收购之后,TimesTen与Oracle数据库的集成更加紧密,在应用开发、产品管理、数据库功能方面都吸收和借鉴了Oracle数据库的很多特性,这大大降低了TimesTen数据库的学习、管理和应用的成本,例如TimesTen支持ANSI SQL和PL/SQL,支持Oracle Clusterware,支持JDBC、ODBC、OCI、Pro*C开发接口,兼容Oracle数据类型,支持SQL Developer开发以及Enterprise Manager管理等。

图1-2 TimesTen数据库的发展简史

TimesTen支持基于SQL的数据访问以及事务的原子性、一致性、隔离性和持久化。除了标准的客户端服务器驱动,TimesTen还支持性能优化的直连驱动访问TimesTen数据库。使用直连驱动时,TimesTen数据库可以直接关联到应用程序的进程内存空间,应用可以直接访问内存数据,避免了进程间通信,从而极大提升了应用访问的性能。TimesTen通过检查点文件和日志机制保证事务完整性和数据持久化。当事务提交时,事务日志可以按同步或异步的方式写入日志文件,同时后台进程定期将内存数据库完整写入检查点文件,检查点和日志文件结合可以保证数据库的可恢复性。

如图1-3所示,典型的TimesTen应用模式可分为3类,即传统模式、应用层缓存模式和网格模式。传统模式下的TimesTen为保证事务一致性的关系型内存数据库,同时可通过单向或双向数据库复制提供高可用性。应用层缓存模式下的TimesTen为Oracle数据库企业版的选件,可以用来缓存Oracle数据库的数据子集,以提高应用层的响应时间。缓存的数据可以是只读的,如频繁访问的热点数据;也可以是可修改的,如物联网应用中的高速数据摄入。同一份数据可以缓存到多个TimesTen数据库用于读取,也可以从多个TimesTen数据库采集数据然后最终汇入后端Oracle数据库。应用程序使用标准SQL读取和更新缓存,并自动执行缓存和Oracle数据库之间的数据同步。

图1-3 典型的TimesTen应用模式

网格模式下的TimesTen即18.1版本推出的TimesTen Scaleout,是一个由运行TimesTen Scaleout实例的互连主机组成的网格,这些实例共同提供内存中数据的快速访问、容错和高可用性。一个网格中可以创建多个数据库,这些数据库相互独立。数据库中的数据可以创建1~2个副本,从而在实例失效时仍可以保证数据可用性。TimesTen Scaleout的最大好处在于,内存容量和处理能力可随实例的增加而横向扩展,从而可以满足更大规模内存计算应用的需求。

除以上集中典型的应用模式外,利用TimesTen的内存计算速度和SQL处理能力,还可以构建提供实时响应的数据集成中心(Data Integration Hub)。如利用Oracle GoldenGate等实时数据集成工具将Oracle或其他数据库中的数据实时复制到TimesTen,利用API将应用数据写入TimesTen,然后基于这些内存中的数据对外提供服务。这不仅可以提供实时的数据响应以提升用户体验,同时可以减轻后端数据库或应用的压力,让后端释放出更多的能力来处理其他任务。