QLDBstreaming di record in Kinesis - Database Amazon Quantum Ledger (Amazon) QLDB

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à.

QLDBstreaming di record in Kinesis

Importante

Avviso di fine del supporto: i clienti esistenti potranno utilizzare Amazon QLDB fino alla fine del supporto il 31/07/2025. Per ulteriori dettagli, consulta Migrare un Amazon QLDB Ledger ad Amazon Aurora Postgre. SQL

Uno QLDB stream Amazon scrive tre tipi di record di dati su una determinata risorsa Amazon Kinesis Data Streams: controllo, riepilogo dei blocchi e dettagli di revisione. Tutti e tre i tipi di record sono scritti nella rappresentazione binaria del formato Amazon Ion.

I record di controllo indicano l'inizio e il completamento dei tuoi QLDB stream. Ogni volta che una revisione viene inserita nel tuo diario, uno QLDB stream scrive tutti i dati del blocco del diario associato nei record di riepilogo dei blocchi e dei dettagli della revisione.

I tre tipi di record sono polimorfici. Sono tutti costituiti da un record comune di primo livello che contiene QLDB lo streamARN, il tipo di record e il payload del record. Questo record di primo livello ha il seguente formato.

{ qldbStreamArn: string, recordType: string, payload: { //control | block summary | revision details record } }

Il recordType campo può avere uno dei tre valori seguenti:

  • CONTROL

  • BLOCK_SUMMARY

  • REVISION_DETAILS

Le seguenti sezioni descrivono il formato e il contenuto di ogni singolo record di payload.

Nota

QLDBscrive tutti i record di stream su Kinesis Data Streams nella rappresentazione binaria di Amazon Ion. I seguenti esempi sono forniti nella rappresentazione testuale di Ion per illustrare il contenuto del record in un formato leggibile.

Registri di controllo

Uno QLDB stream scrive i record di controllo per indicarne gli eventi di inizio e completamento. Di seguito sono riportati alcuni esempi di record di controllo con dati di esempio per ciascuno di essicontrolRecordType:

  • CREATED— Il primo record che uno QLDB stream scrive su Kinesis per indicare che lo stream appena creato è attivo.

    { qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy", recordType:"CONTROL", payload:{ controlRecordType:"CREATED" } }
  • COMPLETED— L'ultimo record che uno QLDB stream scrive su Kinesis per indicare che lo stream ha raggiunto la data e l'ora di fine specificate. Questo record non viene scritto se annulli lo streaming.

    { qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy", recordType:"CONTROL", payload:{ controlRecordType:"COMPLETED" } }

Blocca i record di ri

Un record di riepilogo dei blocchi rappresenta un blocco del diario in cui vengono salvate le revisioni dei documenti. Un blocco è un oggetto che viene salvato nel QLDB diario durante una transazione.

Il payload di un record di riepilogo del blocco contiene l'indirizzo del blocco, il timestamp e altri metadati della transazione che ha eseguito il blocco. Include anche gli attributi di riepilogo delle revisioni nel blocco e le istruzioni PartiQL che le hanno salvate. Di seguito è riportato un esempio di record di riepilogo dei blocchi con dati di esempio.

Nota

Questo esempio di riepilogo dei blocchi viene fornito solo a scopo informativo. Gli hash mostrati non sono valori hash calcolati reali.

{ qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy", recordType:"BLOCK_SUMMARY", payload:{ blockAddress:{ strandId:"ElYL30RGoqrFCbbaQn3K6m", sequenceNo:60807 }, transactionId:"9RWohCo7My4GGkxRETAJ6M", blockTimestamp:2019-09-18T17:00:14.601000001Z, blockHash:{{6Pk9KDYJd38ci09oaHxx0D2grtgh4QBBqbDS6i9quX8=}}, entriesHash:{{r5YoH6+NXDXxgoRzPREGAWJfn73KlZE0eTfbTxZWUDU=}}, previousBlockHash:{{K3ti0Agk7DEponywKcQCPRYVHb5RuyxdmQFTfrloptA=}}, entriesHashList:[ {{pbzvz6ofJC7mD2jvgfyrY/VtR01zIZHoWy8T1VcxlGo=}}, {{k2brC23DLMercmiOWHiURaGwHu0mQtLzdNPuviE2rcs=}}, {{hvw1EV8k4oOkIO36kblO/+UUSFUQqCanKuDGr0aP9nQ=}}, {{ZrLbkyzDcpJ9KWsZMZqRuKUkG/czLIJ4US+K5E31b+Q=}} ], transactionInfo:{ statements:[ { statement:"SELECT * FROM Person WHERE GovId = ?", startTime:2019-09-18T17:00:14.587Z, statementDigest:{{p4Dn0DiuYD3Xm9UQQ75YLwmoMbSfJmopOmTfMnXs26M=}} }, { statement:"INSERT INTO Person ?", startTime:2019-09-18T17:00:14.594Z, statementDigest:{{klMLkLfa5VJqk6JUPtHkQpOsDdG4HmuUaq/VaApQflU=}} }, { statement:"INSERT INTO VehicleRegistration ?", startTime:2019-09-18T17:00:14.598Z, statementDigest:{{B0gO9BWVNrzRYFoe7t+GVLpJ6uZcLKf5t/chkfRhspI=}} } ], documents:{ '7z2OpEBgVCvCtwvx4a2JGn':{ tableName:"Person", tableId:"LSkFkQvkIOjCmpTZpkfpn9", statements:[1] }, 'K0FpsSLpydLDr7hi6KUzqk':{ tableName:"VehicleRegistration", tableId:"Ad3A07z0ZffC7Gpso7BXyO", statements:[2] } } }, revisionSummaries:[ { hash:{{uDthuiqSy4FwjZssyCiyFd90XoPSlIwomHBdF/OrmkE=}}, documentId:"7z2OpEBgVCvCtwvx4a2JGn" }, { hash:{{qJID/amu0gN3dpG5Tg0FfIFTh/U5yFkfT+g/O6k5sPM=}}, documentId:"K0FpsSLpydLDr7hi6KUzqk" } ] } }

Sul revisionSummaries campo, alcune revisioni potrebbero non avere un. documentId Si tratta di revisioni di sistema solo interne che non contengono dati utente. Uno QLDB stream include queste revisioni nei rispettivi record di riepilogo dei blocchi perché gli hash di queste revisioni fanno parte dell'intera catena hash della rivista. La catena hash completa è necessaria per la verifica crittografica.

Solo le revisioni che dispongono di un ID documento vengono pubblicate in record di dettagli di revisione separati, come descritto nella sezione seguente.

Record dei dettagli delle revisioni

Un record dei dettagli di revisione rappresenta una revisione del documento salvata nel diario. Il payload contiene tutti gli attributi della visualizzazione salvata della revisione, insieme al nome e all'ID della tabella associati. Di seguito è riportato un esempio di record di revisione con dati di esempio.

{ qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy", recordType:"REVISION_DETAILS", payload:{ tableInfo:{ tableName:"VehicleRegistration", tableId:"Ad3A07z0ZffC7Gpso7BXyO" }, revision:{ blockAddress:{ strandId:"ElYL30RGoqrFCbbaQn3K6m", sequenceNo:60807 }, hash:{{qJID/amu0gN3dpG5Tg0FfIFTh/U5yFkfT+g/O6k5sPM=}}, data:{ VIN:"1N4AL11D75C109151", LicensePlateNumber:"LEWISR261LL", State:"WA", City:"Seattle", PendingPenaltyTicketAmount:90.25, ValidFromDate:2017-08-21, ValidToDate:2020-05-11, Owners:{ PrimaryOwner:{PersonId:"7z2OpEBgVCvCtwvx4a2JGn"}, SecondaryOwners:[] } }, metadata:{ id:"K0FpsSLpydLDr7hi6KUzqk", version:0, txTime:2019-09-18T17:00:14.602Z, txId:"9RWohCo7My4GGkxRETAJ6M" } } } }

Gestione di duplicati e record out-of-order

QLDBgli stream possono pubblicare duplicati e out-of-order record su Kinesis Data Streams. Pertanto, un'applicazione consumer potrebbe dover implementare una propria logica per identificare e gestire tali scenari. I record di riepilogo dei blocchi e dei dettagli di revisione includono campi che è possibile utilizzare a questo scopo. In combinazione con le funzionalità dei servizi a valle, questi campi possono indicare sia un'identità univoca che un ordine rigoroso per i record.

Ad esempio, prendiamo in considerazione uno stream che si integra QLDB con un OpenSearch indice per fornire funzionalità di ricerca a testo completo sui documenti. In questo caso d'uso, è necessario evitare di indicizzare le revisioni stale (out-of-order) di un documento. Per applicare l'ordinamento e la deduplicazione, è possibile utilizzare i campi ID del documento e versione esterna in OpenSearch, insieme ai campi ID documento e versione in un record di dettagli di revisione.

Per un esempio di logica di deduplicazione in un'applicazione di esempio che si integra con QLDB Amazon OpenSearch Service, consulta il GitHub repository aws-samples/ -. amazon-qldb-streaming-amazon opensearch-service-sample-python