我想從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;
};
我實作了這個并且這作業正常,但是我們的代碼審查工具標記為紅色,表示這未優化或導致一些記憶體泄漏,我只是不知道為什么,我在其他地方讀到從 dynamo DB 掃描 API 不是最重要的獲取節點中所有資料的有效方法,或者我還缺少優化此代碼的其他內容
uj5u.com熱心網友回復:
僅當您的資料大小非常小(小于 100 個專案或資料大小小于 1MB,這是我更喜歡的,在這種情況下,您不需要
do-while回圈)時才喜歡這個
考慮以下場景,萬一將來有越來越多的專案添加到 DynamoDB 表中怎么辦?- 這將回傳您的所有資料并放入scanResults變數中,對嗎?這會影響記憶體。此外,DynamoDB 掃描操作成本高昂 - 就記憶體和成本而言
如果資料非常少,使用 SCAN 操作是完全可以的。否則,請使用分頁(我總是喜歡這個)。如果有1000個專案,那么誰會一次性查看所有這些?所以改用分頁。
讓我們假設另一個場景,如果您的要求是檢索所有資料以進行一些分析或聚合。然后更好地將聚合資料預先存盤到表(相同或不同的 DynamoDB 表)中作為一個專案或使用一些分析資料庫。
如果您的要求是其他要求,請在問題中詳細說明。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/374081.html
標籤:javascript 节点.js 表达 亚马逊动态数据库 es6-promise
