国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Neptune任務構建系統的實例

2019-11-18 11:57:19
字體:
來源:轉載
供稿:網友

最近公司有一個需求發現用neptune實現起來非常清新爽潔不緊繃。

需求是這樣:

  • 需要從某公司下載大量的數據文件。
  • 一共有十八種不同的文件,比如Customer,Company, StockIndex等等。
  • 從2003年4月一直到現在,每個工作日都有數據文件下載。周末沒有。
  • 對某一天,比如2005/1/3的Customer文件,url的格式是:http://river.com/repos/2005/01/03/Customer.zipNeptune任務構建系統的實例

  • 開始需要把所有歷史文件下載下來。
  • 然后天天都持續下載新文件。
  • 在給定的某一天,不一定每個文件都有。有時候Customer沒有,或者Company沒有。理論上,可以每個文件都沒有。
  • 下載下來的文件需要unzip。unzip出來的會是一個csv文件。
  • 這個csv文件需要被輸入到數據庫中的對應表中。這一天的日期也要存在這個表里,作為一個列。也就是說Customer, Company這些表除了有這些數據文件里面的每一個field之外,還有一個date列,來表示這個紀錄是哪一天的。

下面是一些思考:

  1. 因為一個文件可能也可能不存在,所以這個文件不存在不能讓整個流程停下來。文件不存在我們需要停止接下來的對這個文件的解壓和導入數據庫。但是不能中斷其他文件的下載。
  2. 因為從別的公司下載,也無法保證敵人給我們的文件永遠格式正確。假如萬一解壓失敗,或者導入數據庫失敗,也能終端整個任務。
  3. 文件需要下載到本地目錄里面,因為不同日期的文件名字一樣,所以我們本地也可以構建一個yyyy/mm/dd格式的目錄樹。
  4. 一個一個文件下載,解壓,導入,非常沒有效率。也許敵人的網絡很慢,這樣整個任務就會持續太長時間。最好的辦法是能夠并行同時處理多個文件。
  5. 持續更新的時候,不能簡單地只使用當前日期。因為也許因為某些原因前一天的某個文件沒有及時更新或者下載失敗了之類的。為了保證程序的健壯性,我們最好是從數據庫讀取最新日期,那一天的下一天就是我們要開始處理的日期。
  6. 下載,解壓,調用數據庫這些基本動作都可以用ant的任務來實現。
  7. 導入數據庫我們用一個存儲過程實現。

好,下面讓我們從頭構建這個任務。

下載:

download srcfile zipfile = ant.get{src=srcfile,dest=zipfile,username="myuser",
passWord="mypwd",usetimestamp=true,verbose=false};

解壓:

unzip zipfile destdir = ant.unzip{src=zipfile, dest=destdir};

導入數據庫:

importFile date name = ant.sql(db_connection).with[    "exec loadDataFile '${destdir}', '${datestr}', '${name}'"]where  datestr = datepath date;  destdir = "$csvroot/$datestr";end;

導入數據庫這一步用到了幾個輔助函數和變量。

  • datepath函數負責把一個java.util.Date對象轉換成"yyyy/MM/dd"格式的字符串。它使用jaskell的內建函數format:
    datepath date = jaskell.dates.format{pattern="yyyy/MM/dd"} date;
  • db_connection是一個儲存著所有數據庫連接相關信息的對象。
  • csvroot是儲存所有csv文件的根目錄。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宝坻区| 泽州县| 宜阳县| 卢湾区| 江西省| 称多县| 台前县| 九龙坡区| 乡城县| 麻江县| 灌南县| 即墨市| 新野县| 铁岭县| 盐山县| 柳州市| 金乡县| 监利县| 桂阳县| 冀州市| 岳阳县| 高阳县| 灌南县| 博白县| 锡林浩特市| 修武县| 通榆县| 襄汾县| 洛阳市| 昌平区| 盈江县| 马公市| 安泽县| 浏阳市| 章丘市| 乐都县| 天门市| 三河市| 永和县| 万全县| 阿克苏市|