Node.js AWS Lambda |从S3读取多个文件|创建组合JSON |面临性能问题
我正在AWS lambda上从S3读取多个JSON文件,经过一些处理后,最终创建了一个JSON,我能够读取这些文件并将它们组合在一起,但这似乎不是优化最小IO操作的最佳方式,当文件大小较大时,我会面临性能问题 这里是我的简化代码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
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%的消耗时间。