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.
Contenu du journal dans Amazon QLDB
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 registre Amazon QLDB vers Amazon Aurora PostgreSQL
Dans Amazon QLDB, le journal est le journal transactionnel immuable qui stocke l'historique complet et vérifiable de toutes les modifications apportées à vos données. Le journal ne comporte que des ajouts et est composé d'un ensemble de blocs séquencés et hachés qui contiennent vos données validées et d'autres métadonnées du système. QLDB écrit un bloc enchaîné dans le journal lors d'une transaction.
Cette section fournit un exemple de bloc de journal avec des exemples de données et décrit le contenu d'un bloc.
Exemple de bloc
Un bloc de journal contient des métadonnées de transaction ainsi que des entrées représentant les révisions du document qui ont été validées dans la transaction et les instructions partiQL qui les ont validées.
Voici un exemple de bloc contenant des exemples de données.
Note
Cet exemple de bloc est fourni à titre informatif uniquement. Les hachages affichés ne sont pas de véritables valeurs de hachage calculées.
{ blockAddress:{ strandId:"4o5UuzWSW5PIoOGm5jPA6J", sequenceNo:25 }, transactionId:"3gtB8Q8dfIMA8lQ5pzHAMo", blockTimestamp:2022-06-08T18:46:46.512Z, blockHash:{{QS5lJt8vRxT30L9OGL5oU1pxFTe+UlEwakYBCrvGQ4A=}}, entriesHash:{{buYYc5kV4rrRtJAsrIQnfnhgkzfQ8BKjI0C2vFnYQEw=}}, previousBlockHash:{{I1UKRIWUgkM1X6042kcoZ/eN1rn0uxhDTc08zw9kZ5I=}}, entriesHashList:[ {{BUCXP6oYgmug2AfPZcAZup2lKolJNTbTuV5RA1VaFpo=}}, {{cTIRkjuULzp/4KaUEsb/S7+TG8FvpFiZHT4tEJGcANc=}}, {{3aktJSMyJ3C5StZv4WIJLu/w3D8mGtduZvP0ldKUaUM=}}, {{GPKIJ1+o8mMZmPj/35ZQXoca2z64MVYMCwqs/g080IM=}} ], transactionInfo:{ statements:[ { statement:"INSERT INTO VehicleRegistration VALUE ?", startTime:2022-06-08T18:46:46.063Z, statementDigest:{{KY2nL6UGUPs5lXCLVXcUaBxcEIop0Jvk4MEjcFVBfwI=}} }, { statement:"SELECT p_id FROM Person p BY p_id WHERE p.FirstName = ? and p.LastName = ?", startTime:2022-06-08T18:46:46.173Z, statementDigest:{{QS2nfB8XBf2ozlDx0nvtsliOYDSmNHMYC3IRH4Uh690=}} }, { statement:"UPDATE VehicleRegistration r SET r.Owners.PrimaryOwner.PersonId = ? WHERE r.VIN = ?", startTime:2022-06-08T18:46:46.278Z, statementDigest:{{nGtIA9Qh0/dwIplOR8J5CTeqyUVtNUQgXfltDUo2Aq4=}} }, { statement:"DELETE FROM DriversLicense l WHERE l.LicenseNumber = ?", startTime:2022-06-08T18:46:46.385Z, statementDigest:{{ka783dcEP58Q9AVQ1m9NOJd3JAmEvXLjzl0OjN1BojQ=}} } ], documents:{ HwVFkn8IMRa0xjze5xcgga:{ tableName:"VehicleRegistration", tableId:"HQZ6cgIMUi204Lq1tT4oaJ", statements:[0,2] }, IiPTRxLGJZa342zHFCFT15:{ tableName:"DriversLicense", tableId:"BvtXEB1JxZg0lJlBAtbtSV", statements:[3] } } }, revisions:[ { hash:{{FR1IWcWew0yw1TnRklo2YMF/qtwb7ohsu5FD8A4DSVg=}} }, { blockAddress:{ strandId:"4o5UuzWSW5PIoOGm5jPA6J", sequenceNo:25 }, hash:{{6TTHbcfIVdWoFC/j90BOZi0JdHzhjSXo1tW+uHd6Dj4=}}, data:{ VIN:"1N4AL11D75C109151", LicensePlateNumber:"LEWISR261LL", State:"WA", City:"Seattle", PendingPenaltyTicketAmount:90.25, ValidFromDate:2017-08-21, ValidToDate:2020-05-11, Owners:{ PrimaryOwner:{ PersonId:"3Ax20JIix5J2ulu2rCMvo2" }, SecondaryOwners:[] } }, metadata:{ id:"HwVFkn8IMRa0xjze5xcgga", version:0, txTime:2022-06-08T18:46:46.492Z, txId:"3gtB8Q8dfIMA8lQ5pzHAMo" } }, { blockAddress:{ strandId:"4o5UuzWSW5PIoOGm5jPA6J", sequenceNo:25 }, hash:{{ZVF/f1uSqd5DIMqzI04CCHaCGFK/J0Jf5AFzSEk0l90=}}, metadata:{ id:"IiPTRxLGJZa342zHFCFT15", version:1, txTime:2022-06-08T18:46:46.492Z, txId:"3gtB8Q8dfIMA8lQ5pzHAMo" } } ] }
Sur le revisions
terrain, certains objets de révision peuvent ne contenir qu'une hash
valeur et aucun autre attribut. Il s'agit de révisions internes du système qui ne contiennent pas de données utilisateur. Les hachages de ces révisions font partie de la chaîne de hachage complète de la revue, requise pour la vérification cryptographique.
Contenu du bloc
Un bloc de journal contient les champs suivants :
blockAddress
-
Emplacement du bloc dans le journal. Une adresse est une structure Amazon Ion qui comporte deux champs :
strandId
etsequenceNo
.Par exemple :
{strandId:"BlFTjlSXze9BIh1KOszcE3",sequenceNo:14}
transactionId
-
L'identifiant unique de la transaction qui a validé le blocage.
blockTimestamp
-
Horodatage auquel le bloc a été validé dans le journal.
blockHash
-
La valeur de hachage de 256 bits qui représente le bloc de manière unique. Il s'agit du hachage de la concaténation de et.
entriesHash
previousBlockHash
entriesHash
-
Le hachage qui représente toutes les entrées du bloc, y compris les entrées système internes uniquement. Il s'agit du hachage racine de l'arbre de Merkle dans lequel les nœuds foliaires sont composés de tous les hachages.
entriesHashList
previousBlockHash
-
Le hachage du bloc chaîné précédent dans le journal.
entriesHashList
-
La liste des hachages qui représentent chaque entrée du bloc. Cette liste peut inclure les hachages d'entrées suivants :
-
Le hachage ionique qui représente
transactionInfo
. Cette valeur est calculée en utilisant le hachage ionique de l'ensemble de latransactionInfo
structure. -
Le hachage racine de l'arbre de Merkle dans lequel les nœuds foliaires sont composés de tous les hachages.
revisions
-
Le hachage ionique qui représente
redactionInfo
. Ce hachage n'existe que dans les blocs validés par une transaction de rédaction. Sa valeur est calculée en prenant le hachage ionique de l'ensemble de laredactionInfo
structure. -
Hachages représentant uniquement les métadonnées internes du système. Ces hachages peuvent ne pas exister dans tous les blocs.
-
transactionInfo
-
Une structure Amazon Ion qui contient des informations sur les instructions de la transaction ayant validé le blocage. Cette structure possède les champs suivants :
-
statements
— La liste des instructions partiQL et lastartTime
date à laquelle elles ont commencé à s'exécuter. Chaque instruction possède unstatementDigest
hachage, qui est nécessaire pour calculer le hachage de latransactionInfo
structure. -
documents
— Le document IDs qui a été mis à jour par les déclarations. Chaque document inclut letableName
et auquel il appartient, ainsitableId
que l'index de chaque déclaration qui l'a mis à jour.
-
revisions
-
La liste des révisions de documents qui ont été validées dans le bloc. Chaque structure de révision contient tous les champs de la vue validée de la révision.
Cela peut également inclure des hachages représentant des révisions internes du système faisant partie de la chaîne de hachage complète d'un journal.
Révisions expurgées
Dans Amazon QLDB, DELETE
une instruction ne supprime logiquement un document qu'en créant une nouvelle révision qui le marque comme supprimé. QLDB prend également en charge une opération de rédaction de données qui vous permet de supprimer définitivement les révisions de document inactives dans l'historique d'un tableau.
L'opération de rédaction supprime uniquement les données utilisateur dans la révision spécifiée et laisse inchangées la séquence du journal et les métadonnées du document. Cela permet de préserver l'intégrité globale des données de votre registre. Pour plus d'informations et un exemple d'opération de rédaction, consultezRédaction de révisions de documents.
Exemple de révision expurgée
Prenons l'exemple de bloc précédent. Dans ce bloc, supposons que vous supprimiez la révision dont l'ID de document HwVFkn8IMRa0xjze5xcgga
et le numéro de version sont de0
.
Une fois la rédaction terminée, les données utilisateur de la révision (représentées par la data
structure) sont remplacées par un nouveau dataHash
champ. La valeur de ce champ est le hachage ionique de la data
structure supprimée. Par conséquent, le registre conserve l'intégrité globale de ses données et reste vérifiable par cryptographie grâce aux opérations d'API de vérification existantes.
L'exemple de révision suivant montre les résultats de cette rédaction, le nouveau dataHash
champ étant surligné dansred italics
.
Note
Cet exemple de révision est fourni à titre informatif uniquement. Les hachages affichés ne sont pas de véritables valeurs de hachage calculées.
...
{
blockAddress:{
strandId:"4o5UuzWSW5PIoOGm5jPA6J",
sequenceNo:25
},
hash:{{6TTHbcfIVdWoFC/j90BOZi0JdHzhjSXo1tW+uHd6Dj4=}},
dataHash:{{s83jd7sfhsdfhksj7hskjdfjfpIPP/DP2hvionas2d4=}},
metadata:{
id:"HwVFkn8IMRa0xjze5xcgga",
version:0,
txTime:2022-06-08T18:46:46.492Z,
txId:"3gtB8Q8dfIMA8lQ5pzHAMo"
}
}
...
QLDB ajoute également un nouveau bloc au journal pour la demande de rédaction terminée. Ce bloc inclut une redactionInfo
entrée supplémentaire qui contient une liste des révisions qui ont été expurgées dans la transaction, comme indiqué dans l'exemple suivant.
... redactionInfo:{ revisions:[ { blockAddress:{ strandId:"4o5UuzWSW5PIoOGm5jPA6J", sequenceNo:25 }, tableId:"HQZ6cgIMUi204Lq1tT4oaJ", documentId:"HwVFkn8IMRa0xjze5xcgga", version:0 } ] } ...
Exemple d’application
Pour un exemple de code Java qui valide la chaîne de hachage d'un journal à l'aide de données exportées, consultez le GitHub référentiel amazon-qldb-dmv-sampleaws-samples/
-
ValidateQldbHashChain.java
— Contient un code didacticiel qui exporte des blocs de journal à partir d'un registre et utilise les données exportées pour valider la chaîne de hachage entre les blocs. -
JournalBlock.java
— Contient une méthode nommée verifyBlockHash()
qui montre comment calculer chaque composant de hachage individuel dans un bloc. Cette méthode est appelée par le code du didacticiel dansValidateQldbHashChain.java
.
Pour obtenir des instructions sur le téléchargement et l'installation de cet exemple d'application complet, consultezInstallation de l'exemple d'application Java Amazon QLDB. Avant d'exécuter le code du didacticiel, assurez-vous de suivre les étapes 1 à 3 Tutoriel Java pour configurer un registre d'échantillons et le charger avec des exemples de données.
Consultez aussi
Pour plus d'informations sur les journaux dans QLDB, consultez les rubriques suivantes :
-
Exportation de données de journal depuis Amazon QLDB— Pour savoir comment exporter des données de journal vers Amazon Simple Storage Service (Amazon S3).
-
Diffusion en continu de données de journaux depuis Amazon QLDB— Pour savoir comment diffuser des données de journal vers Amazon Kinesis Data Streams.
-
Vérification des données dans Amazon QLDB— Pour en savoir plus sur la vérification cryptographique des données de journaux.