複製鏈接
請複製以下鏈接發送給好友

DeferredJob

鎖定
DeferredJob是SAE為開發者提供的分佈式的離線任務執行隊列,是由系統級語言執行的,沒有執行時間限制的執行隊列。 [1] 
外文名
DeferredJob
特    點
系統級語言執行
操作類型
只支持用户的數據庫大文件導入
開發者
SAE

DeferredJob隊列簡介

DeferredJob只支持用户的數據庫大文件導入/導出、數據庫批量操作,將來會支持更多種的任務類型。

DeferredJob調用方式

使用手冊
使用方法
DeferredJob支持兩種方式添加任務。1:通過應用的服務管理頁面添加任務,優點是比較簡單。2:通過SaeDeferredJob Api 添加任務,優點是參數豐富,可設置更多的任務參數。DeferredJob限制每天只能添加10個任務。
準備事項
DeferredJob服務依賴Storage來存儲導入導出的文件,使用DeferredJob前,請確保MySQL服務、Storage服務已初始化,且未被禁 用。
DeferredJob服務管理頁面使用介紹
數據庫導入步驟
1、創建Storage的Domain。
2、上傳數據庫文件到Storage。小文件可在應用的Storage服務面板上傳; 大於10MB的文件需使用cyberduck上傳至Storage存儲中,然後通過在線平台管理。(SAE已不再支持SDK方式上傳。)
3、在DeferredJob服務管理頁面添加新的導入任務。添加任務成功後,可以在DeferredJob服務管理頁面收到任務添加成功通知。
4、導入成功後,可以在DeferredJob服務面板收到任務執行成功通知。
注:導入任務不一定立刻執行,但一般會在第二天凌晨1點~7點間完成。導入壓縮文件時,請保證解壓後只有一個解壓文件,且沒有 文件夾,否則任務會執行失敗。
數據庫導出步驟
1、創建Storage的Domain。
2、在DeferredJob服務管理頁面添加新的導出任務,導出文件名稱格式。添加任務成功後,可以在DeferredJob服務面板收到任務添加 成功通知。
3、導出成功後,可以在DeferredJob服務管理頁面收到任務執行成功通知。您可以在通知提供的鏈接中下載導出的數據庫文件;也可 以由Storage服務面板進入相應的Domain,選擇導出文件進行下載。
注:導出任務不一定立刻執行,但一般會在第二天凌晨1點~7點間完成。如果Storage的Domain中已含有導出文件,導出操作會導致 原來的文件被覆蓋。
數據庫批量操作
數據庫批量操作的過程與數據庫導入類似,請將您要執行的MySQL語句保存在sql文件中,在DeferredJob服務面板中,選擇批量執 行sql即可。
SaeDeferredJob API使用介紹
API支持三種操作:添加任務,查看任務狀態,刪除任務。
添加任務,可根據用户填入的信息選擇單表導出,csv文件允許table和csv文件名不一致。
任務狀態包括:waiting(等待)、inqueue(進入隊列)、delete(刪除)、excuting(正在執行)、done(成功)、abort(失敗)。
在任務excuting之前,用户可以手動刪除任務。
$dj = new SaeDeferredJob();
//添加任務
$taskID=$dj->addTask("import","mysql","domainA","abc.sql","databaseA","tableA","callback.php");
if($taskID===false)
var_dump($dj->errno(), $dj->errmsg());
else
var_dump($taskID);
$taskID=$dj->addTask("export","mysql","domainB","abc.csv.zip","databaseB","tableB","csv.php");
if($taskID===false)
var_dump($dj->errno(), $dj->errmsg());
//查看狀態
$ret=$dj->getStatus($taskID);
if($ret===false)
var_dump($dj->errno(), $dj->errmsg());
//刪除任務
$ret=$dj->deleteTask($taskID);
if($ret===false)
var_dump($dj->errno(), $dj->errmsg());
文件名稱格式
導出/導入文件名稱格式為: name[.format][.compression]
例如:abc.zip abc.sql abc.sql.zip
name導入/導出的文件名稱不可包含特殊符號
format文件類型,支持sql、csv可忽略,默認為sql
compression文件壓縮類型,支持tar,gz; gz; bz2; tar,bz2; zip可忽略,默認不壓縮
注:導出的壓縮格式限定為zip,用户設置的其他壓縮格式將被忽略,壓縮文件超過200M,將自動將壓縮文件切分(切分的文件在 windows中可通過7-zip解壓縮,在linux中可通過7z解壓縮)。在DeferredJob服務管理頁面添加任務時,請務必保證csv文件的name 與數據中的table名稱對應,否則導入/導出任務會失敗。
使用SaeDeferredJob Api添加任務的説明
addTask($tasktype,$dbtype,$stor_domain,$stor_filename,$dbname,$tbname,$callback)
tasktype數據類型stor_filenametbname説明
exportcsvnot nullnot null將tbname中的數據導入到stor_filename中
exportcsvnot nullnull將表名為stor_filename前綴的數據表中的數據導入到stor_filename中
exportsqlnot nullnot null導出tbname中的數據
exportsqlnot nullnull導出dbname中所有表的數據
importcsvnot nullnot null將stor_filename中的數據導入到tbname中
importcsvnot nullnull將stor_filename中的數據導入到表名為stor_filename前綴的表中
importsqlnot nulldon't care根據sql導入數據
注:null表示參數為空字符串。

DeferredJobFAQ介紹

1、ERROR:csv file name must be same with table name in mysql。
導入導出CSV文件時請確保csv文件名與MySQL中的table名稱對應,如table名為:abc,則CSV文件名為:abc.csv,如需壓縮,可 繼續添加.zip、.tar等後綴。
2、ERROR:call storage error,500。
上傳文件過大,導出任務超出Storage文件限制,請選擇導出壓縮文件,DeferredJob會將壓縮文件分片上傳。
3、call storage error:{"errno":10,"errmsg":"upload failed!"}
上傳文件過大,導出任務超過Storage文件限制,請選擇導出壓縮文件,DeferredJob會講壓縮文件分片上傳。
4、任務導出成功,但是導出文件無法下載
請確保您Storage使用的Domain為公有Domain,私有Domain會導致導出文件無法下載。
5、failed to uncompress, please check the input file
請查看Storage服務是否設置了防盜鏈,設置防盜鏈的Domain有可能出現此類錯誤。
參考資料