Contenuti del diario in Amazon QLDB - Database Amazon Quantum Ledger (Amazon) QLDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Contenuti del diario in Amazon QLDB

Importante

Avviso di fine del supporto: i clienti esistenti potranno utilizzare Amazon QLDB fino alla fine del supporto il 31/07/2025. Per ulteriori dettagli, consulta Migrare un Amazon QLDB Ledger ad Amazon Aurora Postgre. SQL

In AmazonQLDB, il journal è il log transazionale immutabile che memorizza la cronologia completa e verificabile di tutte le modifiche ai dati. Il diario è di sola appendice ed è composto da un set di blocchi sequenziati e concatenati in hash che contengono i dati impegnati e altri metadati di sistema. QLDBscrive un blocco concatenato nel journal in una transazione.

Questa sezione fornisce un esempio di blocco journal con dati di esempio e descrive il contenuto di un blocco.

Esempio di blocco

Un blocco journal contiene i metadati delle transazioni insieme alle voci che rappresentano le revisioni del documento che sono state salvate nella transazione e le istruzioni PartiQL che le hanno salvate.

Di seguito è riportato un esempio di blocco con dati di esempio.

Nota

Questo esempio di blocco viene fornito solo a scopo informativo. Gli hash mostrati non sono valori hash calcolati reali.

{
  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"
      }
    }
  ]
}

Nel revisions campo, alcuni oggetti di revisione potrebbero contenere solo un hash valore e nessun altro attributo. Si tratta di revisioni di sistema solo interne che non contengono dati utente. Gli hash di queste revisioni fanno parte dell'intera catena hash della rivista, necessaria per la verifica crittografica.

Contenuti del blocco

Un blocco journal ha i seguenti campi:

blockAddress

La posizione del blocco nel diario. Un indirizzo è una struttura Amazon Ion con due campi: strandId esequenceNo.

Ad esempio: {strandId:"BlFTjlSXze9BIh1KOszcE3",sequenceNo:14}

transactionId

L'ID univoco della transazione che ha eseguito il blocco.

blockTimestamp

Il timestamp in cui il blocco è stato salvato nel journal.

blockHash

Il valore hash a 256 bit che rappresenta in modo univoco il blocco. Questo è l'hash della concatenazione di and. entriesHash previousBlockHash

entriesHash

L'hash che rappresenta tutte le voci all'interno del blocco, incluse le voci di sistema solo interne. Questo è l'hash principale dell'albero di Merkle in cui i nodi fogliari sono costituiti da tutti gli hash in esso contenuti. entriesHashList

previousBlockHash

L'hash del precedente blocco concatenato nel diario.

entriesHashList

L'elenco degli hash che rappresentano ogni voce all'interno del blocco. Questo elenco può includere i seguenti hash di voce:

  • L'hash ionico che rappresenta. transactionInfo Questo valore viene calcolato prendendo l'hash ionico dell'intera transactionInfo struttura.

  • L'hash della radice dell'albero di Merkle in cui i nodi fogliari sono costituiti da tutti gli hash in esso contenuti. revisions

  • L'hash ionico che rappresenta. redactionInfo Questo hash esiste solo nei blocchi che sono stati salvati da una transazione di redazione. Il suo valore viene calcolato prendendo l'hash ionico dell'intera struttura. redactionInfo

  • Hash che rappresentano metadati di sistema solo interni. Questi hash potrebbero non esistere in tutti i blocchi.

transactionInfo

Una struttura Amazon Ion che contiene informazioni sulle dichiarazioni della transazione che ha commesso il blocco. Questa struttura include i campi riportati di seguito:

  • statements— L'elenco delle istruzioni PartiQL e il startTime momento in cui hanno iniziato a funzionare. Ogni istruzione ha un statementDigest hash, necessario per calcolare l'hash della struttura. transactionInfo

  • documents— Il documento IDs che è stato aggiornato dalle dichiarazioni. Ogni documento include l'tableNamee a tableId cui appartiene e l'indice di ogni dichiarazione che lo ha aggiornato.

revisions

L'elenco delle revisioni dei documenti che sono state apportate nel blocco. Ogni struttura di revisione contiene tutti i campi della visualizzazione confermata della revisione.

Ciò può includere anche hash che rappresentano revisioni di sistema solo interne che fanno parte dell'intera catena hash di un journal.

Revisioni redatte

In AmazonQLDB, una DELETE dichiarazione elimina logicamente un documento solo creando una nuova revisione che lo contrassegna come eliminato. QLDBsupporta anche un'operazione di redazione dei dati che consente di eliminare definitivamente le revisioni inattive dei documenti nella cronologia di una tabella.

L'operazione di redazione elimina solo i dati utente nella revisione specificata e lascia invariati la sequenza del diario e i metadati del documento. Ciò mantiene l'integrità complessiva dei dati del registro. Per ulteriori informazioni e un esempio di operazione di redazione, vedere. Redazione delle revisioni dei documenti

Esempio di revisione redatta

Considerate l'esempio del blocco precedente. In questo blocco, supponiamo di redigere la revisione con un ID del documento HwVFkn8IMRa0xjze5xcgga e un numero di versione di. 0

Una volta completata la redazione, i dati utente nella revisione (rappresentati dalla data struttura) vengono sostituiti da un nuovo campo. dataHash Il valore di questo campo è l'hash ionico della struttura rimossa. data Di conseguenza, il registro mantiene l'integrità complessiva dei dati e rimane verificabile crittograficamente attraverso le operazioni di verifica esistenti. API

Il seguente esempio di revisione mostra i risultati di questa redazione, con il nuovo campo evidenziato in dataHash red italics.

Nota

Questo esempio di revisione viene fornito solo a scopo informativo. Gli hash mostrati non sono valori hash calcolati reali.

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

QLDBaggiunge inoltre un nuovo blocco al diario per la richiesta di redazione completata. Questo blocco include una redactionInfo voce aggiuntiva che contiene un elenco di revisioni che sono state redatte nella transazione, come mostrato nell'esempio seguente.

...
redactionInfo:{
  revisions:[
    {
      blockAddress:{
        strandId:"4o5UuzWSW5PIoOGm5jPA6J",
        sequenceNo:25
      },
      tableId:"HQZ6cgIMUi204Lq1tT4oaJ",
      documentId:"HwVFkn8IMRa0xjze5xcgga",
      version:0
    }
  ]
}
...

Applicazione di esempio

Per un esempio di codice Java che convalida la catena hash di una rivista utilizzando dati esportati, consulta il repository aws-samples/ -java. GitHub amazon-qldb-dmv-sample Questa applicazione di esempio include i seguenti file di classe:

  • ValidateQldbHashChain.java: contiene un codice tutorial che esporta i blocchi di journal da un registro e utilizza i dati esportati per convalidare la catena di hash tra i blocchi.

  • JournalBlock.java — Contiene un metodo denominato verifyBlockHash() che dimostra come calcolare ogni singolo componente hash all'interno di un blocco. Questo metodo viene chiamato dal codice del tutorial in. ValidateQldbHashChain.java

Per istruzioni su come scaricare e installare questa applicazione di esempio completa, consultaInstallazione dell'applicazione di esempio Amazon QLDB Java. Prima di eseguire il codice del tutorial, assicurati di seguire i passaggi da 1 Tutorial su Java a 3 per configurare un registro di esempio e caricarlo con dati di esempio.

Consulta anche

Per ulteriori informazioni sulle riviste inQLDB, consulta i seguenti argomenti: