Contenu du journal sur Amazon QLDB - 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.

Contenu du journal sur 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 Amazon QLDB Ledger vers Amazon Aurora SQL Postgre.

Dans AmazonQLDB, 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ésentetransactionInfo. 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ésenteredactionInfo. 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 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

Sur AmazonQLDB, une DELETE instruction ne supprime logiquement un document qu'en créant une nouvelle révision qui le marque comme supprimé. QLDBprend é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 cryptographiquement grâce aux opérations de vérification existantes. API

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

QLDBajoute é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é supprimé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/ -java. Cet exemple d'application inclut les fichiers de classe suivants :

  • ValidateQldbHashChain.java — Contient un code 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 Amazon QLDB Java. 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 dansQLDB, consultez les rubriques suivantes :