Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1398852
  • 博文数量: 556
  • 博客积分: 12626
  • 博客等级: 上将
  • 技术积分: 5799
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-11 15:56
个人简介

从事IT基础架构多年,发现自己原来更合适去当老师……喜欢关注新鲜事物,不仅限于IT领域。

文章分类

全部博文(556)

文章存档

2019年(6)

2018年(15)

2017年(17)

2016年(11)

2015年(2)

2014年(2)

2013年(36)

2012年(54)

2011年(100)

2010年(41)

2009年(72)

2008年(14)

2007年(82)

2006年(104)

分类:

2007-11-01 11:58:12

    cache connect to oracle简单的说就是实现TT跟oracle数据库之间数据交互。oracle中的表可以被cache到TT的Cache groups中,应用可以通过访问cache groups的数据来进行读写操作,同时oracle数据库的数据可以刷新到TT,TT中的数据库也可以发送给oracle数据库。
    TT中有个Cache instances的概念,我的理解Cache instances就是一些通过外键想关联的表中记录的集合。简单的说,在cache groups中都会有一张包含了主键的root表,而根据每一个主键都是可以定义一系列数据的,这些数据就从属于一个Cache instances了,换句话说,每个主键值都就定了一个Cache instances。Cache instances可以通过cache groups一样作为装载和卸载的单元。因此,在TT中的没一条记录都只属于一个Cache instances,而且只能有一个父数据。
 
   oracle数据库向TT刷新数据分下面几种情况:
1、完全刷新,在执行CREATE CACHE GROUP语句时加上AUTOREFRESH MODE FULL子句就可以实现,TT会在指定间隔时间内自动刷新整个cache group中的数据。这种方法不需要做跟踪和触发器,但它会刷新所有cache的内容,这种方式适合那种一天内只对表更新一次并且更新的数据很多的那种应用。
2、增量刷新,在执行CREATE CACHE GROUP语句时加上AUTOREFRESH MODE INCREMENTAL子句就可以实现,TT可以在指定间隔时间内自动刷新数据时,只刷新最近一次刷新以来变化过的数据。但这种方式需要用触发器来对更新进行跟踪,会增加更新的开销。这种方式适合那种更新次数频繁,但更新的数据并不多的应用。
3、手动刷新,顾名思义,用户可以直接通过REFRESH CACHE GROUP语句来刷新整个cache group或cache instance,这个动作等同于unload cache group后再load cache group。这种方式在了解应用逻辑情况的时候可以使用。
4、透明装载,在指定TransparentLoad属性后,当执行select语句没有在TT的cache group中找到相关数据就会自动从oracle数据库中装载相关的数据。这种方式对于cache内容出于动态变化时是有用的。
 
    TT向oracle数据库更新数据的机制有两种:复制(Propagate)和刷新(flush)。
1、对于复制有下面几种方法:
1)、在CREATE USERMANAGED CACHE GROUP语句中使用PROPAGATE选项。
2)、用CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP语句来创建一个同步写线程(SWT)的cache group
3)、用CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP语句来创建一个异步写线程(AWT)的cache group
当使用PROPAGATE选项时,它允许将cache group的所有的修改自动复制到oracle中。当应用完成了对一个或多个使用了PROPAGATE选项或者使用SWT的cache group的修改事务时,TT的首先在oracle上进行提交,然后才在TT本地进行提交,这个技术保证了oracle总是拥有数据的最后镜像。因此,如果必要要保证cache和oracle数据同步的话,就必须使用PROPAGATE选项或者SWT cache group。
AWT cache group的提交就不需要等待修改在oracle上完成,这个技术可以提供最好的响应速度和性能,但无法保证cache与oracle的内容一致,因为它们的变化时异步的。
2、刷新实际上是一种手动方式,使用FLUSH CACHE GROUP语句就可完成。这个操作主要用于当在某个时间内事务频繁被更新,它可以将所有的修改一次刷新到oracle数据库,这要比每个事务分别复制要高效。需要注意的是使用FLUSH需要将PROPAGATE关闭,而且它不能复制delete操作。
 
    下面说说TT的老化(aging)特性,当cache instance被load进TT中是,它可以被自动的老化退出。老化分为基于使用老化(usage-based aging)和基于时间老化(time-based aging)两种类型。前者是对LRU(least recently used)数据的移出,后者与指定生命周期和老化处理周期有关系。老化只能在root表中定义,因为老化都是基于cacha instance的。两种老化类型可以在同一系统中并存,但每个cache group只能定义一种老化类型。
 
    TT还有一个被成为Passthrough的特性(不知道应该翻成什么比较准确,姑且叫转移吧)。这个特性大概的意思是这样,当应用发出语句后,通过一个对TT数据库的单一连接可以发送到TT cache group或oracle数据库,而这个单一连接的性能是由passthrough来激活的。sql语句在TT中cache表里被本地处理
还是必须要重定义路径转到oracle去处理就是由passthrough来决定的。数据库的PassThrough属性是用来控制这个行为的。
 
   对于cache group的管理分为System-managed和Usermanaged两种方式:
当使用system-managed cache group时,操作都是被cache agent自动管理的,它有两种基本类型:
1、READONLY,在这种类型里cache group中的数据是只读的,不能够更改,更改可以通过直接访问oracle完成,或通过TT的passthrough来转移路径到oracle来完成。
2、WRITETHROUGH(又一个不知道怎么翻译的),这种类型中,cache中的表数据首先在被创建时要从oracle数据库里load一次,之后所有cache group中的更新数据库会自动复制到oracle数据库中。Writethrough cache groups可以时SWT的也可以是AWT的。
Usermanaged cache groups更加灵活,在这种类型中用户对cached数据有完整的控制权,控制数据如何被装载,复制,移出等待。
 
以上是TT数据库cache connect to oracle功能的简单介绍,之后还会做一些测试来看看这个功能的实用性到底如何。
阅读(4366) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-04-30 15:38:04

很好哦,支持你,不过TT的文章太少