Contenu du journal dans Amazon QLDB - Amazon Quantum Ledger Database (Amazon QLDB)

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 deentriesHash 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 hachagesentriesHashList.

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ésentetransactionInfo. 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 hachagesrevisions.

  • Le hachage ionique qui représenteredactionInfo. 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. Cet exemple d'application inclut les fichiers de classe suivants :

  • 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éeverifyBlockHash() 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 :