程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SSIS:理解Data Flow Task 中的同步與異步等概念

SSIS:理解Data Flow Task 中的同步與異步等概念

編輯:關於SqlServer

理解Data Flow Task 中的同步與異步, 阻塞,半阻塞和全阻塞以及Buffer 緩存概念

在 SSIS Dataflow 數據流中的組件可以分為 Synchronous 同步和 Asynchronous 異步這兩種類型。

Synchronous 同步組件

同步組件有一個非常重要的特征 - 同步組件的輸出和它的輸入共享同一個緩存,即輸入多少行數據 輸出就多少行數據。在同步轉換的過程中,輸入一行,輸出一行,輸入與輸出同步,它們同時發生。

Asynchronous 異步組件

異步組件的特征就是它的輸出使用的是一個新的緩存,它不會重用輸入的緩存,輸出的記錄有可能比 輸入多,也有可能比輸入少。在異步轉換的過程中,異步組件會要求新的緩存區才會執行處理,比如向 Sort 組件,它必須要在一個操作中處理整個行集。還有像 Merge, Merge Join 等合並操作,組件要先 檢查各個輸入的多個行,然後按照排序好的順序來合並輸入行。包括 Aggregate 組件,它需要新添加一 行來保存計算好的聚合值。

所以這樣對比下來,通常情況下同步組件因為可以重用輸入的緩存因此要比異步組件要快一些,因為 異步組件需要一塊新的緩存來完成輸出內容。

觀察所有的數據源組件,它們都是異步類型,因為它們需要創建兩個緩存,一個是成功的輸出一個是 錯誤輸出,所有的目標 Destination 組件都是同步的。

除了上面的兩種分類之外,還可以將它們分為這三種類型:Non-blocking 非阻塞, semi-blocking 半阻塞和 Fully-blocking 全阻塞。

Non-blocking 非阻塞轉換

非阻塞轉換也被稱為行轉換,也屬於同步轉換組件。組件接收到一行數據,對這一行數據處理後再輸 出。在組件的整個輸出處理過程中不新建也不刪除數據行。比如從上游 Source 中加載1000條數據,經 過非阻塞轉換組件的時候,每接收一行數據就處理一行,處理完畢後就直接將這一行數據傳遞給下游組 件,不會等到所有的1000條數據處理完才交給下一個組件。

Semi-blocking 半阻塞轉換

半阻塞的意思就是轉換組件會控制輸入行一段時間,比如組件接收到上游的1000行數據,有可能接收 到了10行或者100行數據就匯總一次,最後輸出這10行或者100行數據,或者輸出一行匯總的數據,所以 每次接到一行數據並不會立即處理輸出。處理完這批數據輸出之後,就可以繼續接受其它行數據並處理 再輸出,半阻塞轉換也屬於異步轉換組件。

Fully-blocking 全阻塞轉換

與半阻塞轉換相同,都是屬於異步轉換組件。但是全阻塞轉換組件會控制全部數據,上游來了1000行 數據,全阻塞組件需要接受完全部的1000行數據之後才會處理輸出。比如像 Sort 或者 Aggregate 組件 ,它們需要接受了所有數據之後才會排序或者聚合,這個是很容易理解的。

SSIS 數據流 Data Flow 組件中的分類

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved