我想从nodejs中的Dynamo中的一个表中获取所有数据,这是我的代码
const READ = async (payload) => {
const params = {
TableName: payload.TableName,
};
let scanResults = [];
let items;
do {
items = await dbClient.scan(params).promise();
items.Items.forEach((item) => scanResults.push(item));
params.ExclusiveStartKey = items.LastEvaluatedKey;
} while (typeof items.LastEvaluatedKey != "undefined");
return scanResults;
};我实现了这一点,这是很好的,但是我们的代码审查工具显示它没有被优化或者导致一些内存泄漏,我只是不知道为什么,我在其他地方读到过,从dynamo DB扫描API并不是获取节点中所有数据的最有效的方法,或者还有什么东西是我缺少的来优化这段代码。
发布于 2021-12-04 20:05:50
只有当您的数据大小非常小(小于100项或小于1MB的数据大小,这是我更喜欢的情况下,在这种情况下,您不需要do-while循环),do-while才会这样做。
想想下面的场景,万一将来会有越来越多的项添加到DynamoDB表中,情况如何?-这将返回所有数据并放入scanResults变量中,对吗?这会影响到记忆。此外,DynamoDB扫描操作也很昂贵--内存和成本都很高。
如果数据非常少的话,使用扫描操作是完全可以的。否则,使用分页(我总是喜欢这个)。如果有1000件物品,那么谁会一次看完所有这些?所以用分页代替。
如果您的需求是检索所有用于进行分析或聚合的数据,那么让我们采取另一个场景。然后更好地将聚合数据预先存储到表中(相同或不同的DynamoDB表)作为一个项,或者使用一些分析数据库。
如果您的要求是其他的,请在问题中详细说明。
https://stackoverflow.com/questions/70227807
复制相似问题