Amazon S3上的copyObject似乎很慢

时间:2016-02-10 17:41:21

标签: node.js amazon-web-services amazon-s3

我正在尝试将我们的Web应用程序的项目存储迁移到Amazon S3。到目前为止一切都那么好但似乎copyFolder花费的时间比预期的要长得多,我想知道我做错了什么。

当用户执行特定命令时,我需要将S3上的两个文件夹复制到同一个存储桶中的新文件夹中。第一个文件夹包含4个文件,为45KB,第二个文件夹为33KB,包含3个项目。在文件系统上,整个操作大约需要15ms,但在S3上需要至少1.5秒。我没想到这在S3上差异如此之大,因为文件已经在服务器上,但也许我有一个误解。

以下是我用来复制文件夹的主要功能:

exports.copyFolder = function(oldPath, newPath, callback) {
var _this = this;
console.time("dir");
this.getDirectoryListing(oldPath, function(err, data) {
    console.log("DIR");
    console.timeEnd("dir");
    var params = {
        Bucket: 'bucket-name', 
        Key: newPath,
        CopySource: oldPath
    }
    var filesToCopy = data.length;
    var filesCopied = 0;
    data.forEach(function(fileToCopy) {
        console.time("copy");
        _this.copyFile(fileToCopy.Key, fileToCopy.Key.replace(oldPath, newPath), function() {
            console.log("COPY");
            console.timeEnd("copy");

            filesCopied++;
            if(filesCopied >= filesToCopy && callback) {
                callback();
            }
        });
    });
});    
}

复制文件非常简单:

exports.copyFile = function(oldPath, newPath, callback){
var params = { Bucket: 'bucket-name', Key: newPath, CopySource: 'bucket-path/' + oldPath };
s3.copyObject(params, function(err, data) {
    if(callback)
        callback(err, data);
});
}

getDirectoryListing只调用listObjects来获取源文件夹中的所有文件。此代码全部使用node.js aws-sdk,但调用是常见的S3 API调用。每次调用copyFile似乎需要大约300毫秒,这似乎很多。反正有加速吗?

0 个答案:

没有答案