Búsqueda de sitios web

javascript - Cómo obtener solo la diferencia/modificaciones en los streams de DynamoDB


Tengo un caso de uso en el que necesito entender la diferencia entre NEW_IMAGE y OLD_IMAGE en los streams de DynamoDB.

Según

https://aws.amazon.com/blogs/database/dynamodb-streams-use-cases-and-design-patterns/

DynamoDB Streams supports the following stream record views:

KEYS_ONLY—Only the key attributes of the modified item
NEW_IMAGE—The entire item, as it appears after it was modified
OLD_IMAGE—The entire item, as it appears before it was modified
NEW_AND_OLD_IMAGES—Both the new and the old images of the item

No puedo registrarme para escuchar en IMAGE_DIFFERENCE o similar.

Entonces, ¿cuál es la mejor manera de lograr eso (preferiblemente un ejemplo en JavaScript/TypeScript)?

Respuesta #1

tu única opción es escuchar en NEW_AND_OLD_IMAGES y diferenciarlo tú mismo. si AWS implementara una vista tipo IMAGE_DIFFERENCE, necesitaría alguna notación especial para decirte qué entradas fueron eliminadas y cuáles fueron agregadas. ese procesamiento aumentaría la latencia asociada con los flujos y puede que no sea adecuado para suficientes casos de uso como para que construirlo sea factible.

Respuesta #2

Usar unmarshall y json-diff hace el truco:

npm i json-diff
const { unmarshall } = require("@aws-sdk/util-dynamodb");
const jsonDiff = require('json-diff');

exports.handler = async (event) => {
    console.log(JSON.stringify(event));
    const dynamoDBEvent = event.Records[0].dynamodb;
    const newImage = unmarshall(dynamoDBEvent.NewImage);
    const oldImage = unmarshall(dynamoDBEvent.OldImage);
    const diff = jsonDiff.diffString(oldImage, newImage)
    console.log(diff);
    return 'done';
};