假设我有一个DynamoDB,其中包含足够多的项目,当我使用此基本Lambda函数进行扫描时会引发超时异常:
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
exports.handler = function (event, context) {
var tableName = "TABLE_NAEM";
var params = {
TableName : tableName,
"ReturnConsumedCapacity": "TOTAL"
};
var counter = 1;
dynamodb.scan(params, function(err, data) {
if (err) {
context.done('error', 'reading ddb failed: ' + err);
}
data.Items.forEach(function(element) {
console.log(counter + "- " + element.whatever.S);
counter++;
})
});
};
我想对表中的所有项目进行扫描,但是我不想引起读取峰值。是否有一种方法可以将此Lambda函数作为任务运行,每N
次读取T
个项目,直到覆盖所有项目?
答案 0 :(得分:1)
您可以使用AWS Step Function帮助管理Lambda函数。 AWS Step Function可以在Lambda调用之间休眠。您的Lambda可以返回LastEvaluatedKey并将其作为参数从Step Function接收。
答案 1 :(得分:0)
因此,有多种方法可以解决此问题,我想我已经尝试了所有方法。 @cementblocks建议的解决方案有效,但对于这样一个小问题来说有点过头了,因为您需要处理所有回调失败,并且如果顺序对您而言不是一个可靠的选择。
我最终将GoogleTranslate googleTranslate = new GoogleTranslate();
// Perform the translation by invoking the execute method, but first save the result in a String.
// The second parameter is the source language, the third is the terget language
String result = googleTranslate.execute("the text to be translated", "en", "de").get();
导入到DynamoDB
。它简单,可靠,一旦导入Redshift
,您就可以执行所有需要的查询。
这是AWS Wiki页面中的the related Docs。