TXSeries入門系列文章10

 

inShare 
Tweet

三單元 數據管理

第三部分 TDQ/TSQ

關於本部分

TXSeries中,有兩種類型的隊列——TDQ(暫存數據隊列)和TSQ(臨時存儲隊列),在其中可以存儲數據並以先進先出的順序讀取數據,也可以通過索引直接讀取。不同於使用文件存儲數據,隊列用於在交易間傳遞數據,甚至是在不同region的交易之間。隊列可以將信息記錄到純文本,而代替並不被推薦的”fprintf“。

本部分將介紹TDQTSQ,並將其進行對比,還會講解如何使用APIs去讀取、寫入和刪除隊列。

 
 

參閱:

關於隊列:

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/concepts/c_queues.html?lang=en

1. TDQ介紹

TDQ以先進先出的順序管理,無論何時從TDQ中讀取記錄,這條記錄將會被刪除,記錄的指針總會指向隊列中第一個(最舊的)記錄。換句話說,TDQ中的數據只能被讀取一次。應用程序在使用任何APIs管理TDQ之前, 必須在TDD類型中定義TDQ。根據不同的存儲目的,可以分為intrapartition TDQextrapartition TDQ

1intrapartition TDQ

在文件管理器(例如SFS)中進行管理,屬於指定的region。用於在同一region中的不同交易間傳遞數據。Intrapartition TDQ可以預定義一個觸發器和交易,當觸發條件達到時這個交易會自動啟動。

2extrapartition TDQ

在任何文件系統中進行管理,例如操作系統中的文本文檔。用於在不同region或不同設備的交易間傳遞數據,記錄日誌數據、統計數據和錯誤信息。Extrapartition TDQ不能被刪除。

 
 

參閱:

關於TDQ

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/concepts/c_abt_tdq.html?lang=en

關於intrapartition TDQ

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/concepts/c_intraprtition_trnsient_data.html?lang=en

關於extrapartition TDQ

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/concepts/c_extrprtition_dstinanations.html?lang=en

 
 

2. TSQ介紹

不同於TDQTSQ中的記錄可以被多次讀取和更新 。記錄是順序存儲在隊列中的,可以通過指定索引來檢索任何數據。TSQ會在第一次寫入隊列時自動被創建,所以不需要在region中預定義TSQTSQ也有兩種類型,一種是auxiliary TSQ,是存儲於文件管理器中的文件,當數據需要長久存儲時使用。另一個是main TSQ,存儲於內存,當少量數據需要短期存儲時使用。

 
 

參閱:

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/concepts/c_abt_tsq.html?lang=en

 
 

3. TDQ和TSQ的區別

下表中是TDQTSQ的主要區別:

TDQ

TSQ

在被應用程序使用前,TDQ必須在TDD中定義。

當第一條WRITEQ命令執行時TSQ被創建

記錄必須順序讀取,且每條記錄只能被讀取一次

如果沒有明確使用命令進行刪除,數據和隊列的生命周期一致

因為只能被讀取一次,所以記錄不能更改

記錄可以更改

只存儲在文件中

存儲在內存或輔存

可以在物理上和邏輯上被恢復

只有輔存的隊列可以被恢復

在intra和extra partition之間可以方便的進行切換,只需要修改TDD stanza而不必修改應用程序

不支持

 
 

4. TDQ的APIs

現在是時候學習操作隊列的APIs了。用戶可以通過APIs來對TDQ進行寫入、讀取和刪除的操作。但是要注意,在編程之前要定義一個TDD

1)添加TDD定義

這裡只介紹用戶所需要的最簡單的選項。TDD必須在region啟動之前定義。

a. intrapartition TDQ

語法

cicsadd -c tdd -r <regionName> <TDD entry> DestType=intrapartition RSLKey=public

TriggerLevel=<triggerLevel> TriggeredTransId=<triggeredTransId>

選項

<triggerLevel>             triggerLevel的範圍是032767。只對intrapartition TDQ有效。

<triggeredTransId> :       指定一個當triggerLevel達到時被觸發的交易。只對intrapartition TDQ有效。

 
 

b. extrapartition TDQ

語法

cicsadd -c tdd -r <regionName> <TDD entry> DestType=extrapartition RSLKey=public

ExtrapartitionFile=”<extrapartitionFilePath>” RecordType=<recordType> IOMode=<output/input>

選項

<extrapartitionFileName>      extrapartition文件的路徑和名稱。如果只指定了名稱,文件會在”/var/cics_regions/<regionName>/data“目錄下。

<recordType>              指定extrapartition文件的格式,包括fixed_lengthvariable_lengthline_orientednull_terminatedbyte_terminatedfixed_length是默認的,但是推薦使用variable_length。如果指定了fixed_length,同時也應該指定RecordLen

<output/input>       指定extrapartition文件是只能寫入(output,向這個文件寫入)還是只能讀取(input,從這個文件讀取)。”output“是默認值。

 
 

參閱:

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_transnt_data_defns.html?lang=en

 
 

2)向TDQ寫入

通過使用WRITEQ TD命令,數據會被追加到TDQ的末尾。對於extrapartition TDQ,一條記錄會被追加到extrapartition文件的末尾。

語法

WRITEQ TD QUEUE(“<TDD entry>”) FROM(<dataSet>)

LENGTH(<lengthVariable>)

選項

<TDD entry>    步驟1添加的TDD

<dataSet>       寫入TDQ的數據。例如,一個字符集”data“(char data[200])。

<lengthVariable>        指定數據長度的變量。如果正在寫入intrapartition TDQ(只適用C程序)或者沒有使用fixed_lengthextrapartition TDQ,這個選項必須存在。

如果在TDD中定義了TriggerLevelTriggeredTransId,例如TriggerLevel=4TriggeredTransId=ABCD“。那麼當向TDQ寫入第4次後(包括4次),當WRITED TD執行時交易ABCD會被觸發。

注意,在使用WRITEQ TD命令之前,必須為extrapartition TDQTDD定義指定IOMode=output(或使用默認值)。

 
 

參閱:

http://www-01.ibm.com/support/knowledgecenter/SSGMCP_5.1.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_writeqtd.html?lang=en

 
 

3)從 TDQ讀取

READQ TD命令從TDQ的頭部讀取記錄,每個記錄只能被讀取一次——當被讀取後記錄會從隊列中移除。

語法

READQ TD QUEUE(“<TDD entry>”) INTO(<dataSet>) LENGTH(<lengthVariable>)

選項

<dataSet>                   存儲從TDQ讀取的數據。

<lengthVariable>        當從intrapartition TDQ或者沒有使用fixed_lengthextrapartition TDQ讀取數據時,必須指定這個選項。謹慎地設置這個變量的值,否則可能會收到LENGERR

注意,在使用READQ TD命令之前,必須為extrapartition TDQTDD定義指定IOMode=input

 
 

參閱:

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_readq_td.html?lang=en

4)刪除TDQ

只能對intrapartition TDQ使用命令進行刪除,對於 extrapartition TDQ不適用。

語法

DELETEQ TD QUEUE(“<TDD entry>”)

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營