Acquisizione dei dati di modifica per DynamoDB Streams - Amazon DynamoDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Acquisizione dei dati di modifica per DynamoDB Streams

DynamoDB Streams acquisisce una sequenza cronologica di modifiche a livello di elemento in una tabella DynamoDB qualsiasi e le archivia in un log per un massimo di 24 ore. Le applicazioni possono accedere a questo log e visualizzare gli elementi di dati nel rispettivo stato prima e dopo la modifica, praticamente in tempo reale.

La crittografia a riposo crittografa i dati in DynamoDB Streams. Per ulteriori informazioni, consulta Crittografia a riposo per DynamoDB.

Un flusso DynamoDB è un flusso ordinato di informazioni sulle modifiche apportate agli elementi in una tabella DynamoDB. Quando si abilita un flusso in una tabella, DynamoDB acquisisce informazioni su ogni modifica apportata agli elementi di dati nella tabella.

Ogni volta che un'applicazione crea, aggiorna o elimina elementi nella tabella, DynamoDB Streams scrive un record di flusso con gli attributi della chiave primaria degli elementi che sono stati modificati. Un record di flusso contiene informazioni su una modifica di dati apportata a un singolo elemento in una tabella DynamoDB. Puoi configurare il flusso in modo che i record di flusso acquisiscano informazioni aggiuntive, come le immagini "prima" e "dopo" degli elementi modificati.

DynamoDB Streams garantisce quanto segue:

  • Ogni record di flusso viene visualizzato esattamente una volta nel flusso.

  • Per ogni elemento modificato in una tabella DynamoDB, i record di flusso vengono visualizzati nella stessa sequenza delle modifiche effettive apportate all'elemento.

DynamoDB Streams scrive i record di flusso praticamente in tempo reale per permettere di creare applicazioni che utilizzano questi flussi e agiscono in base al contenuto.

Endpoint per DynamoDB Streams

AWS mantiene endpoint separati per DynamoDB e DynamoDB Streams. Per usare tabelle e indici di database, l'applicazione deve accedere a un endpoint DynamoDB. Per leggere ed elaborare i record di DynamoDB Streams, l'applicazione deve accedere a un endpoint DynamoDB Streams nella stessa regione.

La convenzione di denominazione per gli endpoint DynamoDB Streams è streams.dynamodb.<region>.amazonaws.com. Ad esempio, se si utilizza l'endpoint dynamodb.us-west-2.amazonaws.com per accedere a DynamoDB, l'endpoint streams.dynamodb.us-west-2.amazonaws.com sarà utilizzato per accedere a DynamoDB Streams.

Nota

Per l'elenco completo delle regioni e degli endpoint di DynamoDB e DynamoDB Streams, consulta Regioni ed endpoint in Riferimenti generali di AWS.

Gli AWS SDK forniscono client separati per DynamoDB e DynamoDB Streams. A seconda dei requisiti, l'applicazione può accedere a un endpoint DynamoDB, a un endpoint DynamoDB Streams o a entrambi contemporaneamente. Per connettersi a entrambi gli endpoint, l'applicazione deve creare un'istanza di due client, uno per DynamoDB e uno per DynamoDB Streams.

Abilitazione di un flusso

Puoi abilitare uno stream su una nuova tabella quando lo crei utilizzando o uno degli AWS CLI SDK. AWS È inoltre possibile abilitare o disabilitare un flusso in una tabella esistente oppure modificare le impostazioni di un flusso. DynamoDB Streams opera in modo asincrono, pertanto non vi è alcun impatto sulle prestazioni di una tabella se si abilita un flusso.

Il modo più semplice per gestire DynamoDB Streams consiste nell'usare la AWS Management Console.

  1. Accedi AWS Management Console e apri la console DynamoDB all'indirizzo https://console.aws.amazon.com/dynamodb/.

  2. Nel pannello di controllo della console DynamoDB, scegli Tabelle e seleziona una tabella esistente.

  3. Scegli la scheda Exports and streams (Esportazioni e flussi).

  4. Nella sezione dei dettagli del flusso DynamoDB, scegli Attiva.

  5. Nella pagina Attiva lo stream DynamoDB, scegli le informazioni che verranno scritte nello stream ogni volta che i dati nella tabella vengono modificati:

    • Key attributes only (Solo attributi chiave): solo gli attributi chiave dell'elemento modificato.

    • Nuova immagine: l'intero elemento, così come visualizzato dopo che è stato modificato.

    • Vecchia immagine: l'intero elemento, così come visualizzato prima della modifica.

    • Immagini nuove e vecchie: le immagini dell'elemento nuove e vecchie.

    Quando le impostazioni sono quelle che desideri, scegli Attiva lo streaming.

  6. (Facoltativo) Per disabilitare uno stream esistente, seleziona Disattiva nella sezione Dettagli del flusso DynamoDB.

Per abilitare o modificare un flusso, puoi anche usare le operazioni API CreateTable o UpdateTable. Il parametro StreamSpecification determina la configurazione del flusso:

  • StreamEnabled: specifica se un flusso è abilitato (true) o disabilitato (false) per la tabella.

  • StreamViewType: specifica le informazioni che verranno scritte nel flusso a ogni modifica dei dati nella tabella:

    • KEYS_ONLY: solo gli attributi chiave dell'elemento modificato.

    • NEW_IMAGE: l'intero elemento, così come visualizzato dopo che è stato modificato.

    • OLD_IMAGE: l'intero elemento, così come visualizzato prima della modifica.

    • NEW_AND_OLD_IMAGES: le immagini dell'elemento nuove e vecchie.

Puoi abilitare o disabilitare un flusso in qualsiasi momento. Tuttavia, se provi ad abilitare un flusso in una tabella che include già un flusso riceverai un'eccezione ResourceInUseException. Mentre se provi a disabilitare un flusso in una tabella che non include alcun flusso, riceverai un'eccezione ValidationException.

Quando StreamEnabled viene impostato su true, DynamoDB crea un nuovo flusso con un descrittore di flusso univoco assegnato. Se disabiliti e quindi riabiliti un flusso nella tabella, viene creato un nuovo flusso con un descrittore di flusso diverso.

Ogni flusso è identificato in modo univoco da un Amazon Resource Name (ARN). Di seguito è riportato un ARN di esempio per un flusso in una tabella DynamoDB denominata TestTable.

arn:aws:dynamodb:us-west-2:111122223333:table/TestTable/stream/2015-05-11T21:21:33.291

Per determinare l'ultimo descrittore di flusso per una tabella, inviare una richiesta DescribeTable DynamoDB e cercare l'elemento LatestStreamArn nella risposta.

Nota

Non è possibile modificare un StreamViewType una volta configurato un flusso. Se è necessario apportare modifiche a un flusso dopo che è stato configurato, è necessario disabilitare il flusso corrente e crearne uno nuovo.

Lettura ed elaborazione di un flusso

Per leggere ed elaborare un flusso, l'applicazione deve connettersi a un endpoint DynamoDB Streams ed emettere le richieste API.

Un flusso è costituito da record di flusso. Ogni record di flusso rappresenta una singola modifica dei dati nella tabella DynamoDB cui appartiene il flusso. A ogni record di flusso è assegnato un numero in sequenza, corrispondente all'ordine in cui il record è stato pubblicato nel flusso.

I record di flusso sono organizzati in gruppi o shard. Ogni shard funge da container per più record di flusso e contiene le informazioni necessarie per l'accesso e l'iterazione attraverso i record. I record di flusso all'interno di uno shard vengono automaticamente rimossi dopo 24 ore.

Gli shard sono effimeri, ovvero vengono creati ed eliminati automaticamente in base alle necessità. Qualsiasi shard può anche essere suddiviso in più nuovi shard e anche questa operazione viene eseguita automaticamente. È anche possibile che per uno shard padre esista un solo shard figlio. Uno shard può essere suddiviso in risposta a livelli elevati di attività di scrittura nella tabella padre corrispondente, in modo che le applicazioni possano elaborare record da più shard in parallelo.

Se disabiliti un flusso, tutti gli shard aperti verranno chiusi. I dati nel flusso continueranno a essere leggibili per 24 ore.

Poiché gli shard hanno una derivazione (padre e figlio), un'applicazione deve sempre elaborare uno shard padre prima dello shard figlio. In questo modo, anche l'elaborazione dei record di flusso avviene sicuramente in base all'ordine corretto. Se si utilizza DynamoDB Streams Kinesis Adapter, questa operazione viene gestita automaticamente. L'applicazione elabora le partizioni e i record di flusso nell'ordine corretto e gestisce automaticamente partizioni nuove o scadute, nonché le partizioni che vengono suddivise durante l'esecuzione dell'applicazione. Per ulteriori informazioni, consultareUtilizzo dell'adattatore DynamoDB Streams Kinesis per elaborare i record di flusso.

Il diagramma seguente mostra la relazione tra un flusso, gli shard nel flusso e i record di flusso negli shard.

Nota

Se si esegue un'operazione PutItem o UpdateItem che non modifica alcun dato in un elemento, DynamoDB Streams non scrive un record di flusso per tale operazione.

Per accedere a un flusso ed elaborare i record di flusso al suo interno, devi eseguire queste operazioni:

  • Determinare l'ARN univoco del flusso a cui vuoi accedere.

  • Determinare quali shard nel flusso contengono i record di flusso che ti interessano.

  • Accedi alle partizioni e recupera i record di flusso desiderati.

Nota

Non più di due processi devono leggere dalla stessa partizione di flussi contemporaneamente. La presenza di più di due lettori per shard può causare il throttling.

L'API DynamoDB Streams fornisce le operazioni seguenti, che possono essere usate dai programmi applicativi:

  • ListStreams: restituisce un elenco dei descrittori di flusso per il conto corrente e l'endpoint. Puoi facoltativamente richiedere solo i descrittori di flusso per un nome di tabella specifico.

  • DescribeStream: restituisce informazioni dettagliate su un determinato flusso. L'output include un elenco di shard associati al flusso, tra cui gli ID shard.

  • GetShardIterator: restituisce un iteratore di partizioni, che descrive una posizione all'interno di una partizione. Puoi richiedere che l'iterazione fornisca accesso al punto meno recente, al punto più recente o a un punto particolare nel flusso.

  • GetRecords: restituisce i record di flusso in una determinata partizione. Devi specificare l'iterazione shard restituita da una richiesta GetShardIterator.

Per la descrizione completa di queste operazioni API, incluse le richieste e le risposte di esempio, consulta la Documentazione di riferimento delle API di Amazon DynamoDB Streams.

Limite di conservazione dei dati per DynamoDB Streams

Tutti i dati in DynamoDB Streams hanno una durata di 24 ore. Puoi recuperare e analizzare le ultime 24 ore di attività per qualsiasi tabella specifica. Tuttavia, i dati più vecchi di 24 ore sono soggetti a taglio (rimozione) in qualsiasi momento.

Se disabiliti un flusso in una tabella, i dati nel flusso restano leggibili per 24 ore. Dopo questo intervallo di tempo, i dati scadono e i record di flusso vengono automaticamente eliminati. Non esiste un meccanismo per eliminare manualmente un flusso esistente. Devi attendere fino allo scadere del limite di conservazione (24 ore) perché tutti i record di flusso vengano eliminati.