一種海量數據采集的方法
【技術領域】
[0001]本發明涉及大數據的數據采集技術領域,具體地說是一種實用性強、海量數據采集的方法。
【背景技術】
[0002]生產企業常常需要通過相關經銷商的流向數據來了解產品銷售情況,或者通過相關數據進行業務分析和開展。目前的情況是,不同生產企業在經銷商那采集數據的工具種類繁多,且采集的數據格式不夠統一,容易造成經銷商的重復勞動,耗費交流溝通時間,并且由業務員上報的數據準確性也無法保證,可能對后續分析造成影響。
[0003]基于此,現提供一種可解決上述問題、海量數據采集的方法。使用本方法的數據采集后,可以從公司委托發起,節省溝通成本,客戶端自動對經銷商進銷存的數據進行采集、壓縮上傳到集團服務器、然后再把數據根據不同的分發規則分發至集團下屬各生產或銷售企業中,經過清洗流程將采集上來的數據轉換為可供分析的模式,提高了數據質量和安全性。
【發明內容】
[0004]本發明的技術任務是針對以上不足之處,提供一種實用性強、海量數據采集的方法。
[0005]—種海量數據采集的方法,其具體實現過程為:
首先在子數據庫安裝采集客戶端,該采集客戶端與數據采集web服務、windows服務組成異步處理采集系統;
母數據庫通過該異步處理采集系統采集子數據庫數據并按規則下發數據給子數據庫的采集客戶端。
[0006]所述采集客戶端支持的數據庫類型包括:SQL SERVER、Oracle、Mysql、Sybase。
[0007]安裝有采集客戶端的計算機通過數據庫配置接口連接到安裝母數據庫的后臺服務器,采集客戶端對數據采集成功后,將該數據使用文件處理,這里的文件處理使用壓縮文件的方式,每個壓縮文件中均包含一個文本文件和一個數據描述xml文件,其中文本文件為實際采集數據,數據描述xml文件為文本文件中數據的規則;服務器將兩個文件一起讀取解析后再轉換為可使用數據。
[0008]安裝有母數據庫的后臺服務器通過異步排隊機制支持采集客戶端的并發請求操作,母數據庫采集端對所有采集客戶端上傳的文件首先匯總到服務器的某個文件夾下,然后定期將文件更新到數據處理隊列中,數據處理完畢后會將原數據包轉移到另一個備份文件夾中。
[0009]上述后臺服務器采用異步排隊處理模式進行數據傳輸,且該異步處理使用以下多線程完成:
數據上傳線程,檢查客戶端的數據文件夾中是否有已采集完畢的數據,有則加入上傳隊列;調用采集上傳服務進行token驗證,如果驗證通過則將數據文件包分解成若干個24K的文件包進行傳輸;在傳輸的過程中,當遇到網絡問題時,進行多次傳輸嘗試,如果多次后仍失敗,則在線程下次執行時繼續嘗試傳輸;
米集線程,檢查米集任務隊列中是否有待執行的米集任務;根據米集任務中的?目息執行采集動作,并將采集的數據進行壓縮打包,放到待上傳的數據文件夾中;
自動采集時間判斷線程,根據客戶端設置的自動采集頻率和時間,檢查當前是否需要執行自動采集;如果需要執行數據采集,則在采集任務隊列中增加自動采集的任務;
與服務器自動更新線程,與采集服務通信,下載最新數據采集定義、往服務器上報包括客戶端版本號和經銷商采集時間點的信息;
規則日志線程,線程啟動時,創建全局緩存對象,構造對象時讀取LOG.XML文件,將里面的dLog對象存在在_logList對象列表中;規則日志線程10秒檢查一次緩存中日志對象列表有沒有變化,有變化就重新生成Log.XML ;
文本日志線程,線程啟動時,創建全局緩存對象,線程10秒鐘循環一次,聲明一個StringBuild,將生成的日志信息增加到里面,寫入以日期命名的Txt日志文件中;
版本自動檢查線程,執行時調用采集服務,自動比對客戶單文件的版本與服務端的版本;當客戶端需要升級時,則調用升級程序對需要升級的文件進行下載,解壓,覆蓋。
[0010]在數據采集過程中,數據文件傳輸時使用AES加密,加密的秘鑰為采集服務對每個客戶端生成的一個36位GUID字符串,使得每個客戶端的秘鑰均不一樣,保證數據傳輸中的安全性,具體為:
所有需要與服務器通信的客戶端賬號,均被分配一個唯一的密鑰,每次申請通信時均需要使用唯一密鑰、賬號、密碼驗證,通過后才可進行文件傳輸,在數據文件傳輸過程中使用AES動態加密數據片段,且每次傳輸文件大小為24K,只有文件全部傳輸成功后,文件才可被使用。
[0011]后臺服務器接收采集客戶端的壓縮文件上傳,所有正在傳輸的文件均以.dat的后綴保存在傳輸目錄中;當文件完成上傳時,由客戶端發起文件的改名操作,數據采集服務把文件后綴從.dat修改成.rar,并移動文件至文件導入工作目錄中,同時通知文件導入功會K。
[0012]本發明的一種海量數據采集的方法,具有以下優點:
該發明的一種海量數據采集的方法能夠在企業總部采集全國下屬經銷商進銷存數據,并按規則下發數據至下屬分公司中。本系統通過已維護好的各類采集對象與方案定義,通過數據直連采集客戶端與數據采集web服務、windows服務組成的整個異步處理采集系統,每天可處理千萬條集團數據的采集和分發,從而節省溝通成本,提高數據質量和安全性,實用性強,適用范圍廣泛,易于推廣。
【附圖說明】
[0013]附圖1為本發明的整體實現流程圖。
[0014]附圖2為本發明的采集客戶端采集流程圖。
[0015]附圖3為本發明的后臺服務器采集流程圖。
【具體實施方式】
[0016]下面結合附圖和具體實施例對本發明作進一步說明。
[0017]本發明的提供一種海量數據采集的方法,通過數據采集客戶端進行海量數據采集的方式進行數據采集。
[0018]其實現過程為:
首先在子數據庫安裝采集客戶端,該采集客戶端與數據采集web服務、windows服務組成異步處理采集系統;
母數據庫通過該異步處理采集系統采集子數據庫數據并按規則下發數據給子數據庫的采集客戶端。
[0019]采集客戶端能夠支持經銷商運行的復雜多樣性的系統,能夠支持多種數據庫的類型,如 SQL SERVER、Oracle、Mysql、Sybase 等;。
[0020]采集客戶端支持靈活部署模式,滿足同一客戶可向多家供貨商提供數據的要求,在實際部署時支持多種那個部署模式:
全集中架構:采集客戶端集中采集經銷商的數據,不區分集團下屬單位,進行集中抓取和數據上傳。數據集中到集團后,再從集團數據庫中進行數據的分發。
[0021]部分集中架構:客戶端在采集經銷商的數據時區分委托公司,數據進行集中抓取和上傳;通過集團數據采集服務進行數據分發。
[0022]分散架構:客戶端在采集經銷商的數據時區分委托公司,數據進行抓取后分別上傳至不同的委托公司服務器中。
[0023]數據采集服務器通過異步排隊機制支持數據直連客戶端的大并發請求操作,提高采集服務的可用性:采集服務端對所有客戶端上傳的文件首先匯總到服務器的某個文件夾下,然后定期將文件更新到數據處理隊列中,數據處理完畢后會將原數據包轉移到另一個備份文件夾中,減少大并發上傳文件時對數據處理線程的影響,保證數據處理時的穩定性。
[0024]客戶端在進行采集和文件上傳時,如果發生錯誤,則會進行多次嘗試,體現了系統高容錯性支持。
[0025]數據文件在進行傳輸時,將文件分成多個24K大小的文件包進行傳輸,文件傳輸完畢,采集服務會將文件合并成原數據文件并使用;以24K大小傳輸是考慮到對兩端網絡的壓力,對企業采集服務器CPU、1等硬件的影響而設定的。
[0026]數據文件在傳輸過程中使用AES加密,加密的秘鑰為采集服務對每個客戶端生成的一個36位GUID字符串,使得每個客戶端的秘鑰均不一樣,進一步保證了數據傳輸中的安全性。
[0027]集團模式下的數據采集支持根據系統內預制的標準規則(如:客戶對應關系、產品對應關系等)自動智能下發到下級企業帳套,不需要人為干預。
[0028]更為具體的,如附圖1、圖2、圖3所示,
安裝有采集客戶端的計算機通過數據庫配置接口連接到安裝母數據庫的后臺服務器,采集客戶端對數據采集成功后,將該數據使用文件處理,這里的文件處理使用壓縮文件的方式,每個壓縮文件中均包含一個文本文件和一個數據描述xml文件,其中文本文件為實際采集數據,數據描述xml文件為文本文件中數據的規則;服務器將兩個文件一起讀取解析后再轉換為可使用數據,壓縮文件大大降低了網絡帶寬占用,同時極大增強系統處理能力;
按照特殊格式生成txt文件部分代碼:
txtbuffer.SaveTxt(String.Format(〃{0}\0〃,
onvert.ToDateTime(drResult[k]).ToString("yyyyMMdd")));
將XML文件和txt文件生成壓縮包部分代碼: public static string DataEntryName = 〃data.txt〃; public static string DataFormatEntryName = "format, xml〃; public static int ZipBufferSize = 1024 * 24;
Il使用采集客戶端設置的文件參數生成壓縮文件
byte [] buffer = new byte[DCSZipConfig.ZipBufferSize];
System.1nt32 sizeRead = 0;
while ((sizeRead = StreamToZip.Read(buffer, 0, buffer.Length)) > 0)
{
Write (buffer, 0, sizeRead);
}
采集后臺服務系統采用異步排隊處理模式:程序使用多線程的異步處理,不同的線程處理不同的任務,如:采集數據壓縮成文件、文件上傳、文件導入數據庫、數據分發等均可同時進行,平滑降低服務器的壓力峰值;、
數據上傳線程SendDataThread,檢查客戶端的數據文件夾中是否有已采集完畢的數據,有則加入上傳隊列;調用采集上傳服務進行token驗證,如果驗證通過則將數據文件包分解成若干個24K的文件包進行傳輸;在傳輸的過程中,當遇到網絡問題時,進行多次傳輸嘗試,如果多次后仍失敗,則在線程下次執行時繼續嘗試傳輸;其執行頻率設置為3分鐘。
[0029]采集線程Collect1nThread,檢查采集任務隊列中是否有待執行的采集任務;根據采集任務中的信息執行采集動作,并將采集的數據進行壓縮打包,放