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
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.
Argomenti
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'interatransactionInfo
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 ilstartTime
momento in cui hanno iniziato a funzionare. Ogni istruzione ha unstatementDigest
hash, necessario per calcolare l'hash della struttura.transactionInfo
-
documents
— Il documento IDs che è stato aggiornato dalle dichiarazioni. Ogni documento include l'tableName
e atableId
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
-
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:
-
Esportazione dei dati del diario da Amazon QLDB— Per scoprire come esportare i dati del diario su Amazon Simple Storage Service (Amazon S3).
-
Streaming dei dati del diario da Amazon QLDB— Per imparare a trasmettere i dati del journal ad Amazon Kinesis Data Streams.
-
Verifica dei dati in Amazon QLDB— Per saperne di più sulla verifica crittografica dei dati del journal.