Registros de secuencia de QLDB en Kinesis - Amazon Quantum Ledger Database (Amazon QLDB)

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.

Registros de secuencia de QLDB en Kinesis

Una secuencia de Amazon QLDB 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 sus secuencias de QLDB. Cada vez que se confirma una revisión en su diario, una secuencia de QLDB escribe todos los datos de bloques del diario asociados en los registros de resumen de bloques y detalles de la revisión.

Los tres tipos de registros son polimórficos. Todos constan de un registro común de nivel superior que contiene el ARN de la secuencia de QLDB, 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

QLDB escribe todos los registros de secuencia 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

Un secuencia de QLDB 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 secuencia de QLDB escribe en Kinesis para indicar que la secuencia 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 secuencia de QLDB escribe en Kinesis para indicar que la secuencia 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 asigna al diario QLDB 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. Un secuencia de QLDB incluye estas revisiones en sus respectivos registros de resumen de 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 duplicados y registros out-of-order

Las transmisiones de QLDB pueden publicar registros out-of-order 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, considere un flujo que integre la QLDB con OpenSearch un índice para proporcionar capacidades 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 integra QLDB con OpenSearch Amazon Service, GitHub consulte el repositorio aws-samples/ -. amazon-qldb-streaming-amazon opensearch-service-sample-python