Oracle In-Memory Database Cache 概述


Oracle In-Memory Database Cache (IMDB Cache) 是一个 Oracle Database 产品选件,非常适于将 Oracle 数据库中对性能影响极大的数据子集缓存在应用层中,以提高应用响应速度。借助该解决方案,应用使用 SQL 和 PL/SQL 语句在缓存表上执行读/写操作时,将能够维持自动持久性、事务一致性,并与 Oracle 数据库保持数据同步。(产品介绍

对于许多企业应用而言,企业数据库中的大部分数据都是不经常访问的历史数据。然而,这些数据中却夹杂着必须能够立即访问的信息.例如,当前活跃客户/用户、未结订单、近期交易、产品目录等;将这些数据缓存到内存中可以显著提高应用响应速度。

Oracle In-Memory Database Cache 基于 Oracle TimesTen In-Memory Database (TimesTen) 构建而成,部署在应用层,用于多用户和多线程应用。应用使用标准的 SQL,通过 JDBC、ODBC、ADO.NET、Oracle Call Interface (OCI)、Pro*C/C++ 以及 Oracle PL/SQL 编程接口连接到缓存数据库并访问缓存表。缓存表在 TimesTen 数据库中的操作与常规关系表并无不同,并且它们是可持久存在且可恢复的。

使用 IMDB Cache 的应用可以选择配置多种缓存选项组合:

  • 只读缓存:在 Oracle 数据库中执行事务,然后将更改刷新至 TimesTen 缓存数据库。
  • 读写(或直写)缓存:在 TimesTen 缓存数据库中执行事务,然后传播至 Oracle 数据库。
  • 按需加载和预加载缓存:数据可以按需加载或预先加载,也可以在缓存网络成员之间共享,或仅保存在特定的缓存节点中。

自动与 Oracle 数据库保持数据同步

  • 异步直写缓存将首先利用 TimesTen 的一流速度将事务本地提交至缓存数据库,然后异步发送更新至 Oracle 数据库。异步直写缓存组有助于提高应用响应速度和事务吞吐量。
  • 当 Oracle 数据库无法接受更新时,同步直写缓存将确保从缓存数据库回滚事务;使用同步直写,应用必须等待 Oracle 数据库和 TimesTen 数据库中的提交工作完成。
  • 对于只读缓存,Oracle 数据库中的增量式更新将按用户指定的间隔异步刷新至应用层的内存中缓存表。

IMDB Cache 的设计目标是,即使 Oracle 数据库服务器或网络连接中断后,自身仍能继续运行。系统将追踪并持久存储提交至缓存数据库的事务;一旦恢复与 Oracle 数据库的连接,这些事务便会传播至 Oracle 数据库中。同样,系统还将追踪 Oracle 数据库中源表上已提交的事务,一旦两个数据库之间重新建立连接,便将其刷新至 TimesTen 数据库。

IMDB Cache 通过内存中缓存网络实现性能和容量上的水平可扩展性,而缓存网络是由一组用于共同管理应用缓存数据的 IMDB Cache 构成。缓存数据分布在网格成员之间,可供应用使用,同时维持位置透明性和事务一致性。您无需中断应用服务即可联机添加和删除缓存网格成员。

根据数据访问模式和性能要求,应用可以选择将特定的数据分区分配给某些网格成员以实现局部性优化,也可以选择将所有数据提供给所有网格成员以实现位置透明性。缓存网格软件管理在网格成员之间的缓存一致性和事务一致性。

与独立 TimesTen 数据库类似,IMDB Cache 提供内置的事务复制机制,以便为缓存数据库提供高可用性。大多数企业都无法承担应用停止服务导致的后果,因此大多数部署都会选择添加 IMDB Cache 复制来实现高可用性和负载平衡。