ETL工具狀態轉換流程

2021-09-29 04:15:21 字數 4331 閱讀 2832

零、

一、複製myself.indata到myself.outdata

備註out\in

準備中1

準備完畢0

已被消費-1

異常-2

系統初始時,

in=1,out=1

準備中1

禁止複製資料

可以複製資料,

複製後,in=-1,out=0

準備完畢0

禁止複製資料

禁止複製資料,

因為outdata還沒有被next.indata消費

已被消費-1

禁止複製資料

可以複製資料,

複製後,in=-1,out=0

異常-2

禁止複製資料

禁止複製資料

二、 複製pre.outdata到myself.indata

備註in\out

準備中1

準備完畢0

已被消費-1

異常-2

系統初始時,

in=1,out=1

準備中1

禁止複製資料

可以複製資料,

複製後,in=-1,out=0

準備完畢0

禁止複製資料

禁止複製資料,

因為outdata還沒有被next.indata消費

已被消費-1

禁止複製資料

可以複製資料,

複製後,in=-1,out=0

異常-2

禁止複製資料

禁止複製資料

三、正常流程

正常流程

(1)系統初始化時, r.out=1 && t.in=1 && t.out=1 && w.in=1

(2)r從mysql讀取資料,將資料放入r.outdata,並設定r.out=0,那麼 r.out=0 && t.in=1 && t.out=1 && w.in=1

(3)t從r複製資料,將r.outdata複製到t.indata,並設定r.out=-1&&t.in=0,那麼r.out=-1 && t.in=0 && t.out=1 && w.in=1

(4)t將t.indata資料進行計算為newdata,然後將newdata複製到t.outdata,並設定t.in=-1&&t.out=0,那麼r.out=-1 && t.in=-1 && t.out=0 && w.in=1

(5)w從t複製資料,將t.outdata複製到w.indata,並設定t.out=-1&&w.in=0,那麼r.out=-1 && t.in=-1 && t.out=-1 && w.in=0

(6)w將w.indata資料進行計算為newdata,然後將newdata寫入mysql,並設定w.in=-1,那麼r.out=-1 && t.in=-1 && t.out=-1 && w.in=0

r的迴圈流程 

r的迴圈流程

(1)獲取r.out狀態

(2.1)r.out=1,代表r.outdata中還沒有資料,然後從mysql讀取資料,然後複製到r.outdata,並設定r.out=0

(2.2)r.out=0,代表r.outdata中資料已經準備完畢,但是還沒有被w消費,禁止從mysql讀取資料

(2.3)r.out=-1,代表r.outdata中資料已經被w消費了,然後從mysql讀取資料,然後複製到r.outdata,並設定r.out=0

t的迴圈流程

t的迴圈流程

(1)獲取t.in狀態

(2.1)t.in=1,代表t.indata還沒有資料,

(2.1.1)判斷r.out=1,代表r.outdata中還沒有資料,禁止後續執行

(2.1.2)判斷r.out=0,代表r.outdata中重新整理了資料,直接將r.outdata複製到t.indata,後續執行(3)

(2.1.2)判斷r.out=-1,代表r.outdata中是老資料,直接將r.outdata複製到t.indata,後續執行(3)

(2.2)t.in=0,代表t.indata中剛剛有資料,後續執行(3)

(2.3)t.in=-1,代表t.indata資料已經被t.outdata消費過了

(2.3.1)判斷r.out=1,代表r.outdata還沒有資料,禁止後續執行

(2.3.2)判斷r.out=0,代表r.outdata重新整理了,直接將r.outdata複製到t.indata,後續執行(3)

(2.3.3)判斷r.out=-1,代表r.outdata是老資料,禁止後續執行

(3)將t.indata取出來,並轉化為newdata,後續執行(4)

(4)獲取t.out狀態

(4.1)t.out=1,代表t.outdata還沒有資料,直接將newdata複製到t.outdata

(4.2)t.out=0,代表t.outdata中資料還沒有被w消費,禁止後續執行

(4.3)t.out=-1,代表t.outdata中資料已經被w.indata消費過了

(4.3.1)判斷t.in=1,代表t.indata還沒有資料,執行(2.1),然後直接將newdata複製到t.outdata

(4.3.2)判斷t.in=0,代表t.indata是重新整理的資料,直接將newdata複製到t.outdata

(4.3.3)判斷t.in=-1,代表t.indata是老資料,禁止後續執行

w的迴圈流程

w的迴圈流程

(1)獲取w.in狀態

(2.1)w.in=1,代表t.indata資料還沒有準備完畢

(2.1.1)判斷t.out=1,代表t.outdata沒有資料,禁止後續執行

(2.1.2)判斷t.out=0,代表t.outdata更新了資料,直接複製t.outdata到w.indata,後續執行(3)

(2.1.3)判斷t.out=-1,代表t.outdata的資料是老資料,直接複製t.outdata到w.indata,後續執行(3)

(2.2)w.in=0,代表t.indata準備好了,還沒有被消費,後續執行(3)

(2.3)w.in=-1,代表t.indata已經被消費過了

(2.3.1)判斷t.out=1,代表t.outdata沒有資料,禁止後續執行

(2.3.2)判斷t.out=0,代表t.outdata更新了資料,後續執行(3)

(2.3.2)判斷t.out=-1,代表t.outdata的資料是老資料,禁止後續執行

(3)將w.indata的資料存放到mysql

w的迴圈流程的補充1

w的迴圈流程的補充1

當w.in=1,代表w.indata.t1.outdata已經複製成功了,但是w.indata.t2.outdata還沒有複製成功。

我們去判斷t2.out:

如果t2.out=1,代表t2.outdata還沒有準備完畢,w需要阻塞

如果t2.out=0,代表t2.outdata準備完畢了,將t2.outdata複製到w.indata.t2.outdata,繼續執行

如果t2.out=-1,代表t2.outdata是老資料,將t2.outdata複製到w.indata.t2.outdata,繼續執行

w的迴圈流程的補充2

w的迴圈流程的補充2

w.in=-1,代表t.indata已經被消費過了,代表w.indata.t1.outdata已經複製成功了,代表w.indata.t1.outdata已經複製成功了

我們去判斷tx.out,

如果任何乙個tx.out=0,代表tx.outdata準備完畢了,則將tx.outdata複製到w.indata,然後繼續執行

如果所有的tx.out=-1,代表tx.outdata都是老資料,阻塞執行

轉換流 緩衝流

輸入 輸出流體系中提供了兩個轉換流,這兩個轉換流用於實現將位元組流轉換為字元流。1.1outputstreamwriter outputstreamwriter 是字元流通向位元組流的橋梁 可使用指定的字元編碼表,將要寫入流中的字元編碼成位元組。它的作用的就是,將字串按照指定的編碼表轉成位元組,在使...

I O流(轉換流)

轉換流其實聽名字就不是很難理解 比如位元組流轉字元流 這裡我就不再演示輸出結果了,這一篇部落格我沒有驗證我寫的 不過一般是沒有多大問題的,就算有自己花點時間除錯一下就好了,不要太懶。還有就是記得包含上指定的包,要不然肯定會報錯的。這裡建議大家還是不要偷懶自己弄幾個檔案敲一下 執行下。這裡我們可能只會...

轉換流,Properties 集合

轉換流 outputstreamwriter 寫入轉碼 字元流通向位元組流的橋梁,可使用指定的字元編碼表,將要寫入流中的字元編碼成位元組。格式 明確目的地 fileoutputstream fos newfileoutputstream d text c.txt true outputstreamw...