Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js AWS Lambda |从S3读取多个文件|创建组合JSON |面临性能问题_Node.js_Amazon Web Services_Amazon S3_Aws Lambda - Fatal编程技术网

Node.js AWS Lambda |从S3读取多个文件|创建组合JSON |面临性能问题

Node.js AWS Lambda |从S3读取多个文件|创建组合JSON |面临性能问题,node.js,amazon-web-services,amazon-s3,aws-lambda,Node.js,Amazon Web Services,Amazon S3,Aws Lambda,我正在AWS lambda上从S3读取多个JSON文件,经过一些处理后,最终创建了一个JSON,我能够读取这些文件并将它们组合在一起,但这似乎不是优化最小IO操作的最佳方式,当文件大小较大时,我会面临性能问题 这里是我的简化代码 exports.handler = function (e, callback) { helper.data.readJSON(s3_param) .then(function (data_1) { var data_1

我正在AWS lambda上从S3读取多个JSON文件,经过一些处理后,最终创建了一个JSON,我能够读取这些文件并将它们组合在一起,但这似乎不是优化最小IO操作的最佳方式,当文件大小较大时,我会面临性能问题

这里是我的简化代码

exports.handler = function (e, callback) {
    helper.data.readJSON(s3_param)
        .then(function (data_1) {
            var data_1 = JSON.parse(data_1);
            helper.data.readJSON(s3_param)
                .then(function (data_2) {
                    var data_2 = JSON.parse(data_2);
                    helper.data.readJSON(s3_param)
                        .then(function (data_3) {
                            var data_3 = JSON.parse(data_3);
                            return SomeFuntion(data_1, data_2, data_3);
                        });
                });
        });
};
这是从S3读取文件的readJSON代码

async function readJSON(params) {
        const data = (await (S3.getObject(params).promise())).Body.toString('utf-8');
        return data;
    }

有人能提出更好的方法吗。

我想你可以使用
Promise.并行地做事情。差不多

async function readJSON(params) {
  const data = (await (S3.getObject(params).promise())).Body.toString('utf-8');
  return JSON.parse(data);
}

exports.handler = async event => {
  const [data_1, data_2, data_3] = await Promise.all([
    readJSON(s3_param1),
    readJSON(s3_param2),
    readJSON(s3_param3)
  ]);
  return someFunction(data_1, data_2, data_3);
};

希望这有助于

避免将承诺作为回调反模式,将每个承诺返回给下一个外部
。然后
Instead将建议您查看Amazon Athena。谢谢,它对我有效,至少我的性能提高了50-70毫秒,这大约减少了10%的消耗时间。