

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
<a name="journal-contents"></a>

**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](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-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.

**Topics**
+ [Exemple de bloc](#journal.block-example)
+ [Contenu du bloc](#journal.block-contents)
+ [Révisions expurgées](#journal.redacted-revisions)
+ [Exemple d’application](#journal.sample)
+ [Consultez aussi](#journal.see-also)

## Exemple de bloc
<a name="journal.block-example"></a>

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](ql-reference.md) 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
<a name="journal.block-contents"></a>

Un bloc de journal contient les champs suivants :

**`blockAddress`**  
Emplacement du bloc dans le journal. Une adresse est une structure [Amazon Ion](ion.md) qui comporte deux champs : `strandId` et`sequenceNo`.  
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](verification.md#verification.how-it-works.merkle-tree) 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 la `transactionInfo` 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 la `redactionInfo` 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 la `startTime` date à laquelle elles ont commencé à s'exécuter. Chaque instruction possède un `statementDigest` hachage, qui est nécessaire pour calculer le hachage de la `transactionInfo` structure.
+ `documents`— Le document IDs qui a été mis à jour par les déclarations. Chaque document inclut le `tableName` et auquel il appartient, ainsi `tableId` 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](working.metadata.md) 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
<a name="journal.redacted-revisions"></a>

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, consultez[Rédaction de révisions de documents](working.redaction.md).

### Exemple de révision expurgée
<a name="journal.redacted-revisions.example"></a>

Prenons l'[exemple de bloc](#journal.block-example) 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 de`0`.

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é dans*red 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
<a name="journal.sample"></a>

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/](https://github.com/aws-samples/amazon-qldb-dmv-sample-java) -java. Cet exemple d'application inclut les fichiers de classe suivants :
+ [ValidateQldbHashChain.java](https://github.com/aws-samples/amazon-qldb-dmv-sample-java/blob/master/src/main/java/software/amazon/qldb/tutorial/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](https://github.com/aws-samples/amazon-qldb-dmv-sample-java/blob/master/src/main/java/software/amazon/qldb/tutorial/qldb/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 dans`ValidateQldbHashChain.java`.

Pour obtenir des instructions sur le téléchargement et l'installation de cet exemple d'application complet, consultez[Installation de l'exemple d'application Java Amazon QLDB](sample-app.java.md). Avant d'exécuter le code du didacticiel, assurez-vous de suivre les étapes 1 à 3 [Tutoriel Java](getting-started.java.tutorial.md) pour configurer un registre d'échantillons et le charger avec des exemples de données.

## Consultez aussi
<a name="journal.see-also"></a>

Pour plus d'informations sur les journaux dans QLDB, consultez les rubriques suivantes :
+ [Exportation de données de journal depuis Amazon QLDB](export-journal.md)— 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](streams.md)— Pour savoir comment diffuser des données de journal vers Amazon Kinesis Data Streams.
+ [Vérification des données dans Amazon QLDB](verification.md)— Pour en savoir plus sur la vérification cryptographique des données de journaux.