DeferredJob是SAE為開發者提供的分散式的離線任務執行佇列,是由系統級語言執行的,沒有執行時間限制的執行佇列。
基本介紹
- 中文名:DeferredJob
- 特點:系統級語言執行
- 操作類型:只支持用戶的資料庫大檔案導入
- 開發者:SAE
簡介,PHP調用方式,使用方法,準備事項,資料庫導入步驟,資料庫導出步驟,資料庫批量操作,檔案名稱稱格式,FAQ,
簡介
DeferredJob只支持用戶的資料庫大檔案導入/導出、資料庫批量操作,將來會支持更多種的任務類型。
PHP調用方式
使用手冊
使用方法
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表示參數為空字元串。
FAQ
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有可能出現此類錯誤。