文件操作任务化
· 阅读需 5 分钟
越来越多的企业开始使用悦库企业网盘,其中部分大型企业中存储的文件数量已经达到数千万,容量超过300TB, 对海量文件处理能力的要求也越来越高。
海量文件操作的特点是文件数量多、持续时间长、对服务器资源占用量大。对于上传/下载操作我们已经有较好的任务化实现,用于监控任务的执行过程,但对于像复制、移动、删除、还原等文件夹操作目前任务化支持较弱,因此如果这些操作一次处理的文件数量非常巨大,比如几十万、甚至百万的数量,则可能会出现一些不稳定因素。
我们提出将文件操作任务化,例如将文件夹的复制、移动等操作任务化后,使其人机交互形式就像上传和下载文件任务一样,这样便于实时监控海量文件操作任务的进度和状态,如下 [图1] :

图1 [ 文件操作任务化]
对于主要的文件操作,例如复制、移动、删除、上传、下载、还原等,需要抽象出基础任务对象,这其中应该包括任务的创建、暂停、继续、取消、重试等方法,这样可以在客户端中对上述多种文件操作进行统一的任务管理,就像图1所展示的那样。另外,任务运行过程中应该记录错误日志,当任务出错时可以直接在任务中查看错误详情。
任务定义
当一个任务被创建时,会在数据库表中记录任务的基本信息,包括,任务ID、文件ID、文件名称、大小、目的位置、进度状态和日志信息等,后续任务运行过程中会根据情况不断更新进度和日志信息。任务的类定义,如下图:
任务实现
任务状态
任务的状态包括:等待、加载中、运行中、暂停、继续、取消、错误。大文件夹的复制、移动和还原都需要预先加载文件夹的节点信息,因此"加载中"状态可能耗时较长,需要独立计算进度。