[英]How to do find all or get all in dynamo db in NodeJS
我想从 nodejs 的 Dynamo DB 中的表中获取所有数据,这是我的代码
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;
};
我实现了这个并且工作正常,但是我们的代码审查工具标记为红色,表明这没有优化或导致一些 memory 泄漏,我只是不知道为什么,我在其他地方读到从发电机 DB 扫描 API 不是最获取节点中所有数据的有效方法,或者我还缺少其他东西来优化此代码
仅当您的数据大小非常小(少于 100 个项目或数据大小小于 1MB,这是我更喜欢的,在这种情况下,您不需要
do-while
循环)时才这样做
考虑以下场景,如果将来越来越多的项目将添加到 DynamoDB 表中,该怎么办? - 这将返回您的所有数据并放入scanResults
变量,对吗? 这将影响 memory。 此外,DynamoDB 扫描操作很昂贵——就 memory 和成本而言
如果数据非常少,使用 SCAN 操作是完全可以的。 否则,go 带有分页(我总是喜欢这个)。 如果有 1000 多个项目,那么谁会一口气查看所有这些? 所以改用分页。
让我们看另一个场景,如果您的要求是检索所有数据以进行一些分析或聚合。 然后最好将聚合数据预先存储到表中(相同或不同的 DynamoDB 表)作为一个项目或使用一些分析数据库。
如果您的要求是其他内容,请在问题中详细说明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.