如何在 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)或使用一些分析数据库。

如果您有其他要求,请在问题中详细说明。