我使用此递归调用从dynamodb获取超过1 mb的数据
params.ConsistentRead = true;
let projectCollection = [];
dynamoDb.scan(params, onQuery);
function onQuery(err, data) {
const methodName = 'onQuery';
if (err) {
callback(err);
} else {
for (let i = 0; i < data.Items.length; i++) {
projectCollection.push(data.Items[i]);
}
if (typeof data.LastEvaluatedKey !== 'undefined') {
params.ExclusiveStartKey = data.LastEvaluatedKey;
dynamoDb.scan(params, onQuery);
} else {
callback(err, projectCollection); //recursive call
}
}
}
};
但是我在本地主机上获取了数据,但是一旦我将其部署在aws上, 调用先通过管道API GATEWAY,然后依次通过lambda和dynamodb,我的函数不会返回所有数据,而是返回一小块。
是缓存问题吗?
答案 0 :(得分:0)
可能,但是我认为您很有可能没有按预期分页扫描结果。我认为最可能的解释是您仅在阅读第一页。
我不是nodejs使用者,但我注意到您使用的是严格的操作数:
typeof data.LastEvaluatedKey !== 'undefined'
您似乎正在对字符串进行测试,我认为该字符串将始终返回true。公平地说,我不认为这是您的根本问题,但是您应该使用..?
typeof data.LastEvaluatedKey != 'undefined'
答案 1 :(得分:0)
我改用QUERY,并根据需要更快地提供数据。
let items = [];
let queryExecute = function(callback) {
dynamoDb.query(params,function(err,result) {
if(err) {
callback(err);
} else {
items = items.concat(result.Items);
if(result.LastEvaluatedKey) {
params.ExclusiveStartKey = result.LastEvaluatedKey;
queryExecute(callback);
} else {
callback(err,items);
}
}
});
};