队列(Queue)是一种以先进先出方式存取的数据集,是CICS可以管理的数据集之一。
队列是连续的存储设施,由于事务处理的动态特性,所以通常它们本质上是静态的。它们通常用于处理请求或者将数据从一个事务传递到另一个事务,如图2.11所示。例如,作为事务的一部分所生成的数据通常在任务完成后才打印;数据在队列中等待打印程序在没有更紧急任务的情况下再来处理它。
队列分为瞬时数据队列(TDQ)和临时存储队列(TSQ)。瞬时数据队列提供常规的队列功能;临时存储队列通常用于在多个事务之间共享读写和更新,如作为共享数据的暂存区。
一:瞬时数据队列(Transient Data Queue,TDQ)具有以下特点:
(1)数据在瞬时数据队列中以先进先出(FIFO)的模式进行管理;
(2)数据从TDQ读出后,将自动被删除;
(3)数据指针始终指向TDQ的第一条数据;
(4)瞬时数据队列必须预先在CICS中定义,其名字为4个字节以内的字母和数字组合。
根据瞬时数据队列数据存在的位置不同,瞬时数据队列可以分为三种类型的瞬时数据队列:Intrapartition TDQ、Extrapartition TDQ、Indirect TDQ。
二: 临时存储队列
临时存储队列(Temporary Storage Queue,TSQ)是CICS中另外一个重要的临时数据存储的队列
根据临时存储队列数据存在的位置不同,可以分为如下两种类型。
(1)Main TSQ:又称主存临时存储队列,所有数据将临时存储在CICS的内存中,由WRITEQ TS的参数MAIN决定,默认为Auxiliary,如果为Main,则写入CICS内存中。该类TSQ通常用于存储只需短时间保存的少量数据。
(2)Auxiliary TSQ:又称辅助临时存储队列,所有数据将存储在CICS定义的一个VSAM文件中,该文件在CICS的启动作业流中由DD DFHTEMP指定,由WriteQ TS的参数Auxiliary决定,默认为Auxiliary。该类TSQ通常用于存储需长时间保存的数据。
临时存储队列具有以下的特点:
(1)数据按先后顺序写入临时存储队列,并分配到一个Item数。
(2)可以通过指定Item数直接读取对应的数据,默认为读取下一条数据记录。
(3)数据从TSQ读出后,数据不会被删除,数据指针始终指向TSQ的下一条数据。
(4)队列中的数据可以被更新。
(5)直到队列被删除,TSQ 中的数据都不变,可以被读取任意次,即使写入TSQ的TASK结束了,其他TASK的程序仍然能够读取它写入的数据。
(6)TSQ中的记录是变长的。
(7)TSQ的数据是不可恢复的数据,当CICS 再次启动时,原来在TSQ里面的数据将全部丢失。
(8)TSQ 数据可以存储在内存或辅存中,这依赖于系统初始化时的定义和WRITEQ TS时的指定。
(9)TSQ不需要预先在CICS中定义,在应用程序对其写操作时自动创建,其名字为4个字节以内的字母和数字等字符组合。
三:TSQ与TDQ相比,有如表2.4所示区别。
TDQ | TSQ |
需要预先定义 | 无须预先定义,需要使用时自动创建,直至被删除 |
数据存储在物理文件中 | 数据存储在CICS内存或辅存中 |
先进先出 | 顺序写入(每个数据分配到一个ITEM数) |
数据读出后自动删除 | 数据读出后不删除 |
指针始终指向TDQ的第一条数据 | 指针可以调整为任意ITEM数 |