Quiero obtener todos los datos de una tabla en Dynamo DB en nodejs, este es mi código
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; };Implementé esto y funciona bien, pero nuestra herramienta de revisión de código marca en rojo que esto no está optimizado o causa una fuga de memoria, simplemente no puedo entender por qué, he leído en otro lugar que escanear la API de dynamo DB no es lo más forma eficiente de obtener todos los datos en el nodo o hay algo más que me falta para optimizar este código
HAZ ESTO SOLO SI EL TAMAÑO DE DATOS ES MUY MENOR (menos de 100 elementos o tamaño de datos inferior a 1 MB, eso es lo que prefiero y en ese caso no necesitas un ciclo
do-whilewhile)
Piense en el siguiente escenario: ¿Qué sucede en caso de que en el futuro se agreguen más y más elementos a la tabla de DynamoDB? - Esto devolverá todos sus datos y los colocará en la variable scanResults , ¿verdad? Esto afectará la memoria. Además, la operación de escaneo de DynamoDB es costosa, tanto en términos de memoria como de costo.
Está perfectamente bien usar la operación ESCANEAR si los datos son muy pequeños. De lo contrario, vaya con la paginación (siempre prefiero esto). Si hay miles de elementos, ¿quién los examinará todos de una sola vez? Así que usa la paginación en su lugar.
Tomemos otro escenario, si su requisito es recuperar todos los datos para realizar algunos análisis o agregaciones. Luego, almacene mejor los datos agregados por adelantado en la tabla (la misma tabla de DynamoDB o una diferente) como un elemento o use alguna base de datos de análisis.
Si su requerimiento es otro, elaborelo en la pregunta.