QLDBreproducir registros en Kinesis - Base de datos Amazon Quantum Ledger (AmazonQLDB)

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

QLDBreproducir registros en Kinesis

importante

Aviso de fin del soporte: los clientes actuales podrán utilizar Amazon QLDB hasta que finalice el soporte, el 31 de julio de 2025. Para obtener más información, consulte Migración de un Amazon QLDB Ledger a Amazon Aurora SQL Postgre.

Una QLDB transmisión de Amazon escribe tres tipos de registros de datos en un recurso de Amazon Kinesis Data Streams determinado: control, resumen de bloques y detalles de revisión. Los tres tipos de registros se escriben en la representación binaria del formato Amazon Ion.

Los registros de control indican el inicio y la finalización de las QLDB transmisiones. Cada vez que se registra una revisión en su diario, un QLDB flujo escribe todos los datos de bloques del diario asociados en los registros de resumen y detalles de la revisión por bloques.

Los tres tipos de registros son polimórficos. Todos constan de un registro común de nivel superior que contiene la QLDB secuenciaARN, el tipo de registro y la carga útil del registro. Este registro de nivel superior tiene el formato siguiente.

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

El campo recordType puede tener uno de estos tres valores:

  • CONTROL

  • BLOCK_SUMMARY

  • REVISION_DETAILS

En las siguientes secciones se describen el formato y el contenido de cada registro de carga útil individual.

nota

QLDBescribe todos los registros de transmisión en Kinesis Data Streams en la representación binaria de Amazon Ion. Los siguientes ejemplos se incluyen en la representación textual de Ion para ilustrar el contenido del registro en un formato legible.

Registros de control

Una QLDB transmisión escribe registros de control para indicar sus eventos de inicio y finalización. Los siguientes son ejemplos de registros de control con datos de muestra para cada controlRecordType:

  • CREATED— El primer registro que una QLDB transmisión escribe en Kinesis para indicar que la transmisión recién creada está activa.

    { qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy", recordType:"CONTROL", payload:{ controlRecordType:"CREATED" } }
  • COMPLETED— El último registro que una QLDB transmisión escribe en Kinesis para indicar que la transmisión ha alcanzado la fecha y hora de finalización especificadas. Este registro no se escribe si se cancela la secuencia.

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

Registros de resumen de bloque

Un registro de resumen de bloque representa un bloque de diario en el que se consignan las revisiones del documento. Un bloque es un objeto que se registra en su QLDB diario durante una transacción.

La carga útil de un registro de resumen de bloque contiene la dirección del bloque, la marca de tiempo y otros metadatos de la transacción que confirmó el bloque. También incluye los atributos de resumen de las revisiones del bloque y las instrucciones PartiQL que las confirmaron. El siguiente es un ejemplo de un resumen de bloque con datos de muestra.

nota

Este ejemplo de resumen de bloque se ofrece solo con fines informativos. Los hash que se muestran no son valores hash calculados reales.

{ 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" } ] } }

En el campo revisionSummaries, es posible que algunas revisiones no tengan un documentId. Son revisiones del sistema exclusivamente internas que no contienen datos de usuario. Una QLDB secuencia incluye estas revisiones en sus respectivos registros resumidos por bloques porque los hashes de estas revisiones forman parte de la cadena de hash completa del diario. Se requiere la cadena de hash completa para la verificación criptográfica.

Solo las revisiones que tienen un identificador de documento se publican en registros de detalles de revisión independientes, como se describe en la siguiente sección.

Registros de detalles de revisión

Un registro de detalles de la revisión representa una revisión de un documento que está archivada en su diario. La carga útil contiene todos los atributos de la vista confirmada de la revisión, junto con el nombre de la tabla y el ID de la tabla asociados. El siguiente es un ejemplo de un registro de revisión con datos de muestra.

{ 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" } } } }

Manejo de registros y out-of-order duplicados

QLDBlas transmisiones pueden publicar out-of-order registros y duplicados en Kinesis Data Streams. Por lo tanto, es posible que una aplicación consumidora necesite implementar su propia lógica para identificar y administrar estos escenarios. Los registros de resumen de bloques y detalles de la revisión incluyen campos que puede utilizar para este fin. En combinación con las características de los servicios posteriores, estos campos pueden indicar tanto una identidad única como un orden estricto para los registros.

Por ejemplo, pensemos en una transmisión que se integre QLDB con un OpenSearch índice para ofrecer funciones de búsqueda de texto completo en los documentos. En este caso de uso, debe evitar indexar las revisiones obsoletas (out-of-order) de un documento. Para exigir el orden y la deduplicación, puede utilizar los campos de ID del documento y de versión externa OpenSearch, junto con los campos de ID de documento y versión, en un registro de detalles de la revisión.

Para ver un ejemplo de la lógica de deduplicación en una aplicación de muestra que se integra QLDB con Amazon OpenSearch Service, consulte el GitHub repositorio amazon-qldb-streaming-amazonaws-samples/ -. opensearch-service-sample-python