如何在 NodeJS 的 dynamo db 中查找全部或全部获取
How to do find all or get all in dynamo db in NodeJS
我想从 nodejs 中的 Dynamo DB 中的 table 获取所有数据,这是我的代码
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;
};
我实现了这个并且工作正常,但是我们的代码审查工具标记为红色,表示这没有优化或导致一些内存泄漏,我只是不明白为什么,我在其他地方读到过扫描 API 来自 dynamo DB 并不是在节点中获取所有数据的最有效方法,或者我是否缺少其他优化此代码的方法
DO LIKE THIS ONLY IF YOUR DATA SIZE IS VERY LESS (less than 100 items or data size less than 1MB, that's I prefer and in that case you don't need a do-while
loop)
想一想以下场景,万一将来越来越多的项目添加到 DynamoDB 中怎么办table? - 这将 return 您所有的数据并放入 scanResults
变量中,对吗?这会影响内存。此外,DynamoDB 扫描操作非常昂贵 - 就内存和成本而言
如果数据量很小,用SCAN操作完全没问题。否则,使用分页(我总是喜欢这个)。如果有 1000 件物品,那么谁会一次性查看所有这些物品?所以改用分页。
让我们来看另一个场景,如果您的要求是检索所有数据以进行某些分析或聚合。然后更好地将聚合数据作为一个项目预先存储到 table(相同或不同的 DynamoDB table)或使用一些分析数据库。
如果您有其他要求,请在问题中详细说明。
我想从 nodejs 中的 Dynamo DB 中的 table 获取所有数据,这是我的代码
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;
};
我实现了这个并且工作正常,但是我们的代码审查工具标记为红色,表示这没有优化或导致一些内存泄漏,我只是不明白为什么,我在其他地方读到过扫描 API 来自 dynamo DB 并不是在节点中获取所有数据的最有效方法,或者我是否缺少其他优化此代码的方法
DO LIKE THIS ONLY IF YOUR DATA SIZE IS VERY LESS (less than 100 items or data size less than 1MB, that's I prefer and in that case you don't need a
do-while
loop)
想一想以下场景,万一将来越来越多的项目添加到 DynamoDB 中怎么办table? - 这将 return 您所有的数据并放入 scanResults
变量中,对吗?这会影响内存。此外,DynamoDB 扫描操作非常昂贵 - 就内存和成本而言
如果数据量很小,用SCAN操作完全没问题。否则,使用分页(我总是喜欢这个)。如果有 1000 件物品,那么谁会一次性查看所有这些物品?所以改用分页。
让我们来看另一个场景,如果您的要求是检索所有数据以进行某些分析或聚合。然后更好地将聚合数据作为一个项目预先存储到 table(相同或不同的 DynamoDB table)或使用一些分析数据库。
如果您有其他要求,请在问题中详细说明。