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
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 peut être ajouté qu'à des fins d'ajout et se compose d'un ensemble de blocs séquencés et chaînés contenant vos données validées et d'autres métadonnées système. QLDB écrit un bloc enchaîné dans le journal lors d'une transaction.
Cette section fournit un exemple de bloc de journal contenant 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 qui représentent les révisions du document qui ont été validées dans la transaction et les déclarations partiQL qui les ont validées.
Voici un exemple de bloc avec des données d'exemple.
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" } } ] }
Dans lerevisions
champ, certains objets de révision peuvent uniquement contenir unehash
valeur et aucun autre attribut. Il s'agit de révisions du système uniquement internes 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, qui est requise pour la vérification cryptographique.
Contenu du bloc
Un bloc de journal contient les champs suivants :
blockAddress
-
L'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
-
ID unique de la transaction à l'origine du blocage.
blockTimestamp
-
L'horodatage auquel le bloc a été enregistré dans le journal.
blockHash
-
La valeur de hachage de 256 bits qui représente de manière unique le bloc. C'est le hachage de la concaténation de
entriesHash
etpreviousBlockHash
. entriesHash
-
Le hachage qui représente toutes les entrées du bloc, y compris les entrées du système uniquement internes. Il s'agit du hachage racinaire de l'arbre Merkle dans lequel les nœuds foliaires sont composés de tous les hachages
entriesHashList
. previousBlockHash
-
Le hachage du bloc enchaî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ée suivants :
-
Le hachage ionique qui représente
transactionInfo
. Cette valeur est calculée en prenant le hachage ionique de l'ensemble de latransactionInfo
structure. -
Le hachage racinaire de l'arbre 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 qui ont été validés par une transaction de rédaction. Sa valeur est calculée en prenant le hachage ionique de l'ensemble de laredactionInfo
structure. -
Des hachages qui représentent les métadonnées internes du système uniquement. Ces hachages peuvent ne pas exister dans tous les blocs.
-
transactionInfo
-
Une structure Amazon Ion qui contient des informations sur les déclarations de la transaction qui a validé le blocage. Cette structure possède les champs suivants :
-
statements
— La liste des instructions PartiQL et leurstartTime
date de début d'exécution. Chaque instruction possède unstatementDigest
hachage, qui est nécessaire pour calculer le hachage de latransactionInfo
structure. -
documents
— Les identifiants de documents qui ont é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 qui représentent des révisions internes uniquement du système qui font partie de la chaîne de hachage complète d'un journal.
Révisions expurgées
Dans Amazon QLDB, uneDELETE
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 suppression des données qui vous permet de supprimer définitivement les révisions de documents 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 la séquence du journal et les métadonnées du document inchangées. Cela préserve l'intégrité globale des données de votre registre. Pour plus d'informations et pour voir 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 documentHwVFkn8IMRa0xjze5xcgga
et le numéro de version sont0
.
Une fois la rédaction terminée, les données utilisateur de la révision (représentées par ladata
structure) sont remplacées par un nouveaudataHash
champ. La valeur de ce champ est le hachage ionique de ladata
structure supprimée. Par conséquent, le registre conserve l'intégrité globale de ses données et reste vérifiable cryptographiquement par le biais des opérations d'API de vérification existantes.
L'exemple de révision suivant montre les résultats de cette rédaction, le nouveaudataHash
champ étant surligné en italiques rouges
.
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 contient uneredactionInfo
entrée supplémentaire contenant la liste des révisions supprimées lors de la transaction, comme le montre 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 aws-samples/amazon-qldb-dmv-sample -java
-
ValidateQldbHashChain.java
— Contient un code de didacticiel qui exporte des blocs de journal depuis 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 duTutoriel Java pour configurer un registre d'échantillons et le charger avec des exemples de données.
Consulter aussi
Pour plus d'informations sur les revues dans QLDB, consultez les rubriques suivantes :
-
Exportation de données de journal depuis Amazon QLDB— Pour savoir comment exporter les données d'un journal vers Amazon Simple Storage Service (Amazon S3).
-
Diffusion en continu de données de journaux depuis Amazon QLDB— Pour savoir comment diffuser les données d'un journal sur 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.