• 正在加载中...
  • DeferredJob

    DeferredJob是SAE为开发者提供的分布式的离线任务执行队列,是由系统级语言执行的,没有执行时间限制的执行队列。

    编辑摘要

    目录

    简介/DeferredJob 编辑

    DeferredJob只支持用户的数据库大文件导入/导出、数据库批量操作,将来会支持更多种的任务类型。

    PHP调用方式/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表示参数为空字符串。

    FAQ/DeferredJob 编辑

    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有可能出现此类错误。

    添加视频 | 添加图册相关影像

    开放分类 我来补充

    互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。未经许可,禁止商业网站等复制、抓取本站内容;合理使用者,请注明来源于www.baike.com。

    登录后使用互动百科的服务,将会得到个性化的提示和帮助,还有机会和专业认证智愿者沟通。

    互动百科用户登录注册
    此词条还可添加  信息模块
    编辑摘要

    WIKI热度

    1. 编辑次数:2次 历史版本
    2. 参与编辑人数:2
    3. 最近更新时间:2013-01-21 03:38:40

    贡献光荣榜

    更多

    相关词条