内存数据库之Oracle TimesTen

2022-04-07 00:00:00 索引 数据库 磁盘 应用程序 内存

内存数据库的目标是通过使用内存实现数据存储来提高吞吐量和降低延迟。这与使用磁盘存储的传统数据库管理系统不同。由于内部优化算法更简单,而且执行的 CPU 指令较少,所以内存内数据的速度比基于磁盘的数据库快。访问内存数据可以提高响应速度。 ——Mich Talebzadeh


内存数据库 Oracle TimesTen


随着Oracle Exalytics以及SAP HANA等内存分析设备的推出,业界的目光再一次聚焦在内存数据库产品上。内存数据库(IMDB)可以是一个独立的数据库管理系统(DBMS),如Oracle的TimesTen,或者从属于DBMS的一个特殊数据库,如SAP Sybase Adaptive Server Enterprise (ASE)。


IMDB的目标是通过使用计算机内存实现数据存储来提高吞吏量和降低延迟。这不使用磁盘存储的传统数据库管理系统不同。由于内部优化算法更简单,而且执行的CPU指令较少,所以内存内数据的速度比基于磁盘的数据库快。访问内存数据可以提高响应速度。对于一些响应时间要求较高的应用程序,如交易、电信和国防系统,一般都会使用IMDB。由于IMDB的这种特性,这些数据库使用内存要多于磁盘数据库产品。


Oracle TimesTen和Sybase ASE-IMDB是目前为主流的内存数据库。它们实现了SQL的完整支持,支持一些特殊语言、安全性和数据库管理,具有一些磁盘数据库产品的特性。


TimesTen、 ASE-IMDB及现有的所有商业内存数据库都基于所谓的基于行的关系存储模型。这些产品很适合OLTP应用程序使用。


Oracle TimesTen是一个全新设计的内存数据库


它使用基于行的关系模型(表、列、数据类型、索引等)实现数据存储,并使用SQL作为访问语言。它提供了许多API,并且支持Oracle PL/SQL。应用程序的访问方式与其他关系数据库完全相同。


TimesTen与传统数据库的主要区别在于它的性能要远远高于传统数据库。虽然TimesTen完全运行在内存中,但是它也能够在磁盘中创建数据库副本,支持数据库重启和恢复。通过检查点和事务日志,这种副本能够保持更新,因此能够从任何故障中恢复。 TimesTen支持一种用于实现高可用性的复制机制。它的 Cache Connect 功能可以作为后台Oracle数据库数据子集的高速缓存。在这种情况中,它就成为Oracle数据库的内存数据库缓存。


在 C/S 模式中,客户端 API 库通常使用 TCP/IP(但是有时也会使用 UNIX 域套接字戒本地共享内存连接)与TimesTen服务器迚程交换请求和响应,以执行实际的数据库访问。这正是在 TimesTen数据库主机之外运行应用程序的常用模式。除了网络回程所造成的延迟,各个数据库访问造成的代码增加、环境切换等问题也会对性能造成影响。叧有当应用程序和TimesTen运行在同一台主机上时,才会使用直接模式。在这种模式下,数据管理器API库基本上就是充当TimesTen 数据库引擎的作用。API调用是进程内函数调用,而TimesTen数据库(共享内存片段)会映射到应用程序的地址空间。这样可以消除数据库访问路径的切换竞争,实现高的性能和低的延迟,从而保持稳定的输出。


TimesTen数据库也经常采用混合模式的并发访问,即不同的应用程序进程/线程会通过直接模式和客户端/服务器模式并发访问数据库。单个数据库可以支持高 2000 个用户连接。如果 TimesTen具有一个实例(管理多个TimesTen数据库),那么用户连接数限制为 2500。


这两种模式在API层叧有极少的差别,所以在一般的应用程序代码中,不需要知道或者关心所使用的模式——它实际上只是一个在编译时或者运行时的配置选择。直接模式是TimesTen的特殊特性之一。大多数TimesTen生产部署都采用独立或直接模式。然而,在一些情况下也会使用客户端/服务器模式。

TimesTen缓存不能通过一般的关系工具访问。如果应用程序拥有以数据库为中心的数据访问方式——
即,使用SQL和JDBS访问数据,那么 TimesTen是佳的选择。然而,TimesTen本身不支持与非Oracle数据库进行互操作,所以应用程序代码必须自行管理TimesTen与Sybase或其他数据库的数据传输。


TimesTen内存结构


TimesTen内存结构比Oracle数据库简单很多。与Oracle不同,TimesTen并没有数据库缓冲区、保存池戒丢弃池的概念。传统数据库系统都会通过使用一些减少磁盘I/O的策略。这种设计策略源于磁盘I/O对数据库性能的影响。相反,内存数据库从一开始就不存在磁盘I/O问题。它们的高优化目标就是减少内存和CPU需求。


TimesTen目前支持两种索引方式:散列索引和T树索引。散列索引仅支持全键-值查找,但是速度非常快,而且执行过程与底层表的数量无关(叧要它们的大小合适并且忽略小型表的硬件L1/L2/L3 缓存效果)。这些索引具有很高的读取扩展性和很好的并发性。 T树索引的读取效率很高,但是散列索引效率不高。如果支持范围查找,那么它们会更灵活。但是,其中有一个弱点是在繁重写操作时并发性较差,因为每个索引修改都必须锁住整个索引。然而,在低延迟条件下,T树索引的写性能非常好。


TimesTen的应用


TimesTen的主要价值在于响应时间,而吞吐量和高可用性则是第二位。TimesTen一般更有利于OLTP风格的工作负载,因为这些负载要求极低且极稳定的响应时间。此外,同样重要的是冗余性。通常,一个数据库服务器上会运行多个应用程序。在这些应用程序服务器上使用TimesTen 可以减少数据库的负载,因此能够减少网络延迟和磁盘 I/O。


例如,有一些交易系统会在网页上显示价格信息。如果不使用TimesTen,那么应用程序服务器就需要不停地从磁盘数据库查询价格信息。在达到每秒100,000次的查询水平时,数据库性能就会急剧下降。 


TimesTen与应用层关系密切,而典型的DBMS则具有更广泛的用途。在实时响应与适度容量方面,使用TimesTen具有任何经典DBMS无法实现的压倒性优势。在一些数据快速变化的领域,如交易和销售数据管理,TimesTen极有明显的优势,因为数据是实时传输的,而计算也必须以接近实时的速度完成,并且只会对执行引擎产生很小的影响。另一些应用领域包括电信、国防和情报等机构。


来自:https://mp.weixin.qq.com/s/Z-IueMlFUeEEvfvf_rswBg


相关文章