QLDBdiffuser des enregistrements dans Kinesis - Base de données Amazon Quantum Ledger (AmazonQLDB)

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

QLDBdiffuser des enregistrements dans Kinesis

Important

Avis de fin de support : les clients existants pourront utiliser Amazon QLDB jusqu'à la fin du support le 31 juillet 2025. Pour plus de détails, consultez Migrer un Amazon QLDB Ledger vers Amazon Aurora SQL Postgre.

Un QLDB flux Amazon écrit trois types d'enregistrements de données sur une ressource Amazon Kinesis Data Streams donnée : contrôle, résumé des blocs et détails de révision. Les trois types d'enregistrement sont écrits dans la représentation binaire du format Amazon Ion.

Les enregistrements de contrôle indiquent le début et la fin de vos QLDB streams. Chaque fois qu'une révision est validée dans votre journal, un QLDB flux écrit toutes les données des blocs de journal associées dans des enregistrements de résumé des blocs et de détails de révision.

Les trois types d'enregistrement sont polymorphes. Ils consistent tous en un enregistrement de haut niveau commun qui contient le QLDB fluxARN, le type d'enregistrement et la charge utile de l'enregistrement. Cet enregistrement de haut niveau a le format suivant.

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

Le recordType champ peut avoir l'une des trois valeurs suivantes :

  • CONTROL

  • BLOCK_SUMMARY

  • REVISION_DETAILS

Les sections suivantes décrivent le format et le contenu de chaque enregistrement de charge utile individuel.

Note

QLDBécrit tous les enregistrements de flux dans Kinesis Data Streams dans la représentation binaire d'Amazon Ion. Les exemples suivants sont fournis dans la représentation textuelle d'Ion pour illustrer le contenu de l'enregistrement dans un format lisible.

Enregistrements de contrôle

Un QLDB flux écrit des enregistrements de contrôle pour indiquer ses événements de début et de fin. Voici des exemples d'enregistrements de contrôle avec des échantillons de données pour chacun d'entre eux controlRecordType :

  • CREATED— Le premier enregistrement qu'un QLDB flux écrit dans Kinesis pour indiquer que le flux que vous venez de créer est actif.

    { qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy", recordType:"CONTROL", payload:{ controlRecordType:"CREATED" } }
  • COMPLETED— Le dernier enregistrement écrit par un QLDB flux dans Kinesis pour indiquer que votre flux a atteint la date et l'heure de fin spécifiées. Cet enregistrement n'est pas écrit si vous annulez le stream.

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

Bloquer les enregistrements récapitulatifs

Un enregistrement récapitulatif de bloc représente un bloc de journal dans lequel les révisions de votre document sont validées. Un bloc est un objet qui est enregistré dans votre QLDB journal lors d'une transaction.

La charge utile d'un enregistrement récapitulatif de bloc contient l'adresse du bloc, l'horodatage et les autres métadonnées de la transaction qui a validé le bloc. Il inclut également les attributs récapitulatifs des révisions du bloc et les instructions partiQL qui les ont validées. Voici un exemple d'enregistrement récapitulatif en bloc avec des exemples de données.

Note

Cet exemple de résumé de bloc est fourni à titre informatif uniquement. Les hachages affichés ne sont pas de véritables valeurs de hachage calculées.

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

Sur le revisionSummaries terrain, certaines révisions peuvent ne pas comporter dedocumentId. Il s'agit de révisions internes du système qui ne contiennent pas de données utilisateur. Un QLDB flux inclut ces révisions dans leurs comptes rendus récapitulatifs par blocs respectifs, car les hachages de ces révisions font partie de la chaîne de hachage complète de la revue. La chaîne de hachage complète est requise pour la vérification cryptographique.

Seules les révisions dotées d'un identifiant de document sont publiées dans des enregistrements de détails de révision distincts, comme décrit dans la section suivante.

Enregistrements détaillés des révisions

Un enregistrement détaillé des révisions représente une révision de document qui est enregistrée dans votre journal. La charge utile contient tous les attributs de la vue validée de la révision, ainsi que le nom et l'ID de table associés. Voici un exemple d'enregistrement de révision avec des exemples de données.

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

Gestion des doublons et out-of-order des enregistrements

QLDBles streams peuvent publier des doublons et out-of-order des enregistrements dans Kinesis Data Streams. Ainsi, une application grand public peut avoir besoin d'implémenter sa propre logique pour identifier et gérer de tels scénarios. Les enregistrements du résumé des blocs et des détails des révisions contiennent des champs que vous pouvez utiliser à cette fin. Associés aux fonctionnalités des services en aval, ces champs peuvent indiquer à la fois une identité unique et un ordre strict pour les enregistrements.

Prenons l'exemple d'un flux intégré QLDB à un OpenSearch index pour fournir des fonctionnalités de recherche en texte intégral sur des documents. Dans ce cas d'utilisation, vous devez éviter d'indexer les révisions obsolètes (out-of-order) d'un document. Pour appliquer le tri et la déduplication, vous pouvez utiliser les champs ID du document et version externe dans OpenSearch, ainsi que les champs ID du document et version dans un enregistrement détaillé des révisions.

Pour un exemple de logique de déduplication dans un exemple d'application intégré QLDB à Amazon OpenSearch Service, consultez le GitHub référentiel amazon-qldb-streaming-amazonaws-samples/ -. opensearch-service-sample-python