内存数据库学习笔记(一)

  • Timesten 基本概念

Timesten

  • TimesTen通常部署在使用行级锁读已提交数据隔离的多用户和多线程应用程序中。

  • TimseTen支持JDBC、ODBC、ODP.NET、PL/SQL

  • Timesten与传统数据库相比,具有更高的吞吐率

  • TimesTen数据库具有持久性和可恢复性。持久性是通过事务日志和指向磁盘的数据库检查点的组合实现的。

    日志文件:一般存放在与检查点文件不同的目录之下,也不要放在一个盘上。

    检查点文件:确保数据一致性、使数据库能快速恢复

    一般来说有一个检查点文件,多个日志文件来配合保持数据的一致性,他们均存放在磁盘上。

  • Timesten具有高可用性:使用Timesten Replication可以实时复制TimesTen数据库。

  • Timesten应用程序具有mission-critical的性质。大多数企业部署都添加了TimesTen复制来实现可用性和灾难恢复。

  • Timesten粗粒度

TimestenReplication

  • TimesTen Replication使用内存优化的、基于事务日志的复制技术,通过高效的网络和基于流的协议实现高性能、可靠性和健壮性。
  • 主要功能:
    1. 异步复制,提供最大的性能,并完全将应用程序与复制元素的订阅者接收过程解耦;
    2. 同步复制,为活动数据库和备用数据库之间的数据一致性提供更高的可信度;应用程序被阻塞,直到在备用数据库上接收和提交了复制的事务;
    3. 备用数据库的热读可用性;通过配置额外的只读订阅程序,可以提供额外的读取容量;
    4. 为需要高事务吞吐量的应用程序进行并行复制;
    5. 在线升级,允许单个服务器离线进行软件升级,而其他服务器继续不间断地运行。

Timesten Cache

  • 使用TimesTen构建,并部署在应用程序层中,用于多用户和多线程应用程序。

  • 支持JDBC、ODBC、ODP.NET、PL/SQL

  • 缓存选项:

    1. 只读缓存

      事务在Oracle数据库中执行,更改被刷新到TimesTen缓存数据库。

    2. 读写缓存

      事务在TimesTen缓存数据库中执行,然后传播到Oracle数据库。

    3. 按需和预加载缓存(on-demand and preloaded cached)

  • 即使在Oracle数据库服务器/网络连接丢失后仍能继续运行,提交到缓存数据库的事务将被跟踪和持久化

    1. 一旦恢复Oracle数据库的连接,事务就会传到Oracle数据库。

    2. 一旦重新建立了数据库之间的连接,就会跟踪Oracle数据库中源表上提交的事务,并将其刷新到TimesTen数据库。

  • 通过内存缓存网格提供性能和容量方面的水平可伸缩性,内存缓存网格由一组用于应用程序缓存数据的TimesTen缓存组成。

    1. 缓存的数据分布在网格成员之间

    2. 缓存对具有位置透明性事务一致性的应用程序可用。

    3. 可以实时添加和删除缓存网格成员,而不会中断应用程序的服务。

    4. 根据数据访问模式性能需求,应用程序可以选择将特定的数据分区分配给某些网格成员以进行位置优化,或者将所有数据提供给所有网格成员以实现位置透明性。

    5. 缓存网格软件管理跨网格成员的缓存一致性和事务一致性。

  • TimesTen缓存同样为事务复制提供内置机制,为缓存数据库提供高可用性。

三种连接模式

  1. Direct Driver
    • 没有协议转换的开销,效率最高
    • 应用程序需要与Timesten数据库位于同一台服务器
    • JDBC Application——ODBC’s direct driver
    • 共享模式——减少TCP/IP、IPC方面的开销
  2. Client/Server
    • 应用程序与Timesten位于不同服务器
    • 使用TCP/IP通信协议
    • 速度慢于Direct Driver但是仍比传统方式性能高
  3. Driver Manager
    • 应用程序通过ODBC驱动管理器连接到Timesten
    • 驱动管理器由第三方提供

TimesTen和TimesTen缓存特性概述

  • TimesTen API支持
  • 访问控制
  • 数据库连接
  • 耐用性
  • 通过查询优化实现性能
  • 并发
  • 数据库字符集和全球化支持
  • 内存中的柱状压缩
  • 服务器之间的数据复制
  • 使用TimesTen缓存缓存数据
  • 将Oracle数据库中的数据加载到TimesTen表中
  • 商业智能和在线分析处理
  • 大型对象
  • 自动数据老化
  • 系统监控
  • 行政和公用事业

索引类型

  1. T-tree索引
  2. Hash索引
  3. 位图索引

内存数据库相关

瓶颈

  1. 预写日志是内存事务处理的性能瓶颈
  2. CPU和内存,多级cache、内存的带宽通道

应用

  1. 实时响应性要求较高OLTP 缓存组实现数据的一致
  2. 密集型的联机分析处理OLAP (更新的实时性需求步高)

磁盘的角色

  1. 磁盘为内存数据库的后背存储来保证数据的==持久性==
  2. 磁盘数据库缓冲区的优化为==核心==
  3. 表、索引、临时文件等全部驻留于==内存==,内存数据库的并行控制优于磁盘数据库
  4. 内存数据库不等同于cached磁盘数据库;

检查点更新时间

  • 太长——丢失数据
  • 太短——多次读写磁盘效率降低

存储方式分析

  • 列存储->分析处理

  • 行存储->事务处理

  • Key/value->社交网站

查询优化的角度

  1. 索引(有/无)
  2. 表的结构
  3. PL/SQL编程
  4. 隔离级别(可串行化、可重复度、已提交读、读未提交的数据)的使用

TimesTen

使能实时业务需求

  1. 快速响应
  2. 高可扩展
  3. 不中断
  4. 非分析类