标题：DeferredJob
简介
DeferredJob是SAE为开发者提供的分布式的离线任务执行队列，和TaskQueue的区别主要在于TaskQueue以HTTP方式触发，有页面执行时间的限制；而DeferredJob是系统级语言执行的，没有执行时间限制的。[1]
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有可能出现此类错误。