gpt4 book ai didi

javascript - AWS Lambda 函数如何更新 DynamoDB 表中的所有记录?

转载 作者:行者123 更新时间:2023-11-30 15:25:10 25 4
gpt4 key购买 nike

我正在处理一个 AWS Lambda 函数( Node 4.3),它需要遍历 DynamoDB 表中的所有项目并更新某些属性。

我遇到的问题是如何让 Lambda 等待所有 DynamoDB 操作完成。

var async = require('async');
var aws = require('aws-sdk');
var doc = new aws.DynamoDB.DocumentClient();

exports.handler = (event, context, callback) => {
doc.scan({
TableName: 'Occupations_dev'
}, function (err, data) {
console.log(data.Items.length);

var funcs = [];

data.Items.forEach(function (item) {
funcs.push(function (cb) {
item.Popularity = 0;

doc.put({
TableName: 'Occupations_dev',
Item: item
}, function (err, data) {
if (err) {
console.log("ERROR: " + item.Name);
cb(err);
} else {
console.log('Finished put for ' + item.Id)
cb(null, item);
}
});
});
});

async.parallel(funcs, function (err, results) {
console.log('Finished');

if (err) {
context.fail(err);
} else {
callback(null, 'Finished');
}
});
});
};

我尝试使用 async.parallel 等待所有 db.put 请求完成,但它以 Process exited before completion request 每当 Lambda 函数运行时出错。

它会更新 一些 DynamoDB 项目,但绝对不会更新所有项目。

我在出现错误时添加了一些 console.log 调用,但我在日志中看到的唯一输出是:

START RequestId: b72fd7c6-14ed-11e7-a95a-c1185af4e870 Version: $LATEST
2017-03-30T02:08:11.691Z b72fd7c6-14ed-11e7-a95a-c1185af4e870 1362
END RequestId: b72fd7c6-14ed-11e7-a95a-c1185af4e870
REPORT RequestId: b72fd7c6-14ed-11e7-a95a-c1185af4e870 Duration: 37165.80 ms Billed Duration: 37200 ms Memory Size: 128 MB Max Memory Used: 128 MB
RequestId: b72fd7c6-14ed-11e7-a95a-c1185af4e870 Process exited before completing request

让 Lambda 函数等待一切完成的正确方法是什么? (数据量不大,所以我不担心运行时间超过 5 分钟并超时。)

最佳答案

async.parallel 函数调用是异步发生的,这很可能使 DynamoDB 充满许多同步更新并在数据库级别引发“太多连接”错误

我建议使用同步操作,例如 async.series 来执行数据库更新。 DynamoDB 应该可以毫不费力地一个接一个地处理这些更新。

关于javascript - AWS Lambda 函数如何更新 DynamoDB 表中的所有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43106994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com