【问题标题】:Reading a large file from S3 bucket从 S3 存储桶读取大文件
【发布时间】:2018-03-07 15:01:54
【问题描述】:

我正在尝试从 S3 存储桶中读取大小约为 1GB 的文件。我的目标是从文件中读取数据并将其发送到另一台服务器。

当我尝试读取一个大文件 (1GB) 时,我的系统挂起/服务器崩溃。我可以使用以下代码段来控制 240MB 文件的数据

var bucketParams = {
    Bucket: "xyzBucket",
    Key: "input/something.zip"
};

router.get('/getData', function(req, res) {
    s3.getObject(bucketParams, function(err, data) {
        if (err) {
            console.log(err, err.stack); // an error occurred
        }
        else {
            console.log(data); // successful response
        }
    });
    // Send data over to another server
});

在从 S3 读取大文件时,它是如何工作的?

【问题讨论】:

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


    【解决方案1】:

    要回答从S3读取大文件的问题,我建议使用Range来获取对象的一部分

    https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html

    部分获取将防止您超出框架/ RAM 消耗的限制

    您还可以利用 Range 支持通过多部分/多线程下载来提高带宽利用率

    【讨论】:

      【解决方案2】:

      您正在达到V8 的最大字符串长度限制,最近是upped to 1GB from 512MB

      我敢打赌你得到的错误是:

      字符串长度无效

      这是一个不可配置的限制。升级--max_old_space_size 对其没有影响。

      您应该考虑下载、处理并将处理后的文件作为stream 发送到其他服务器。

      【讨论】:

      • 谢谢!!,我确实遇到了那个错误。您是否可以显示如何将数据通过管道传输到另一台服务器的代码 sn-p/伪代码。所有示例似乎都将其通过管道传输到另一个文件。
      • 只需为您处理的每个块使用res.write
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 2018-11-07
      • 2019-09-19
      相关资源
      最近更新 更多