前言
内存计算是利用内存来加速数据访问和应用的性能,并降低应用开发复杂度的技术。近十年来,随着软硬件技术的发展和用户需求的成熟,内存计算技术已经得到了广泛地应用。
Oracle在内存计算领域具有非常重要的地位,这主要得益于Oracle在技术领域的长期耕耘和深厚积累。Oracle在内存计算领域的产品和解决方案包括:Oracle TimesTen,Oracle Database In-Memory和Oracle True Cache。
按照时间顺序。TimesTen 1996年成立,2005年6月被Oracle收购,在电信和金融行业得到广泛应用。Database In-Memory作为数据库选件,于2014年7月首次发布,极大增强了Oracle数据库的分析能力。True Cache 于2023年9月推出,包含在即将发布的Oracle 23c数据库中,极大简化了只读缓存的管理和应用开发。
来看一下官网对这3种内存计算技术的介绍:
-
TimesTen:超快速、超高可用且弹性可扩展的 OLTP 数据库。Oracle TimesTen In-Memory Database 是一个功能全面、内存优化的关系型数据库,可助力众多行业的任务关键型应用实现微秒级响应和超高的吞吐量性能。
-
Oracle Database In-Memory:将列功能引入 Oracle Database,透明地加快分析查询速度高达数个量级。它支持企业基于实时数据制定明智决策,降低成本、提高工作效率和竞争力。
-
Oracle True Cache :是一项只读的内存中高性能 SQL 和键值缓存服务,它支持自动化管理,可确保数据一致。Oracle True Cache 能够在改善应用响应速度的同时降低数据库服务器负担。此外,得益于自动化管理和数据一致性,它还能简化应用开发,降低开发人员工作量和成本。
基于以上3种技术,下面我们将对Oracle主要的内存计算应用模式进行简要地介绍。
模式1:TimesTen作为Oracle数据库只读缓存
将内存作为缓存,是一种非常流行的内存计算应用模式。使用缓存的好处包括:
-
降低延迟:内存的高性能
-
更高的吞吐量:内存的高性能
-
可扩展性:缓存比数据库更容易扩展
-
数据库减压:可以将数据库任务卸载到缓存执行
-
高可用性:如果数据库宕机,缓存仍可对外服务
使用Redis,Memcached作为缓存是一种非常普遍的做法,但这一类缓存为Key/Value模式,而Oracle数据库是关系型,因此需要额外的开发在两种模式间做转换。如果使用TimesTen,由于都是关系型数据库,加之作为同一家公司的产品,Oracle和TimesTen之间做了深度集成,因此缓存的管理会更简单,包括定义,配置更改,刷新等,这些都不需要编程来实现。应用程序只需要将连接指向TimesTen即可,之前在Oracle运行的SQL也可以在TimesTen上运行,可以无需修改或经过很少的修改。
也就是说,使用TimesTen实现的只读缓存,不仅运行得快,而且开发也快,管理更简单。
关于此模式,可参考eBay使用TimesTen满足每日服务1400亿调用并满足延迟要求的案例[1]。
模式2:TimesTen作为Oracle数据库写缓存
TimesTen也可以作为Oracle数据库的写缓存。在这种模式中,数据的流向和模式1是相反的,也就是数据先进入TimesTen,然后再自动同步到后端的Oracle数据库中,这特别适合于数据采集和数据汇聚类的应用,如IoT。
这种模式可以极大减轻后端数据库的压力,提升整体架构的稳定性和高可用性。另外,和模式1一样,缓存管理简单,开发快也是其差异化优势。
TimesTen作为写缓存还支持一种滑动窗口模式,可以按照用户的业务需要在内存中自动保留指定时间窗口期内的数据,如一周,半个月或一个月的数据,从而可以更精准地满足业务需求,也可以将更多后端Oracle的负载转移到写缓存中来运行。
关于此模式,可参考Oracle官网的美国邮政服务使用TimesTen实现防欺诈的案例[2]。
模式3:TimesTen替换中小型数据库
这里说的中小型数据库是指数据量相对较小,并发访问相对较少。
TimesTen本身就是一个关系型数据库,只不过数据全部在内存中。因此对于数据量不大(如