Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Isi jurnal di Amazon QLDB
Di Amazon QLDB, jurnal adalah log transaksional abadi yang menyimpan riwayat lengkap dan dapat diverifikasi dari semua perubahan pada data Anda. Jurnal ini hanya ditambahkan dan terdiri dari sekumpulan blok yang diurutkan dan dirantai hash yang berisi data berkomitmen dan metadata sistem lainnya. QLDB menulis satu blok dirantai ke jurnal dalam transaksi.
Bagian ini memberikan contoh blok jurnal dengan data sampel dan menjelaskan isi blok.
Contoh blok
Sebuah blok jurnal berisi metadata transaksi bersama dengan entri yang mewakili revisi dokumen yang dilakukan dalam transaksi dan pernyataan PartiQL yang berkomitmen mereka.
Berikut ini adalah contoh blok dengan data sampel berikut.
catatan
Contoh blok ini disediakan untuk tujuan informasi saja. Hash yang ditampilkan bukan nilai hash yang dihitung secara nyata.
{ 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" } } ] }
Direvisions
lapangan, beberapa objek revisi mungkin hanya berisihash
nilai dan tidak ada atribut lainnya. Ini adalah revisi sistem internal saja yang tidak berisi data pengguna. Hash dari revisi ini adalah bagian dari rantai hash penuh jurnal, yang diperlukan untuk verifikasi kriptografi.
Memblokir konten blok blok blok blok
Blok jurnal blok memiliki bidang berikut:
blockAddress
-
Lokasi blok dalam jurnal. Alamat adalah struktur Amazon Ion yang memiliki dua bidang:
strandId
dansequenceNo
.Misalnya:
{strandId:"BlFTjlSXze9BIh1KOszcE3",sequenceNo:14}
transactionId
-
ID unik dari transaksi yang dilakukan blok.
blockTimestamp
-
Stempel waktu saat blok berkomitmen pada jurnal.
blockHash
-
Nilai hash 256-bit yang secara unik mewakili blok. Ini adalah hash dari rangkaian
entriesHash
danpreviousBlockHash
. entriesHash
-
Hash yang mewakili semua entri dalam blok, termasuk entri sistem internal saja. Ini adalah akar hash dari pohon Merkle di mana node daun terdiri dari semua hash di
entriesHashList
. previousBlockHash
-
Hash dari blok dirantai sebelumnya dalam jurnal.
entriesHashList
-
Daftar hash yang mewakili setiap entri dalam blok. Daftar ini dapat mencakup hash entri berikut:
-
Ion hash yang mewakili
transactionInfo
. Nilai ini dihitung dengan mengambil hash Ion dari seluruhtransactionInfo
struktur. -
Akar hash dari pohon Merkle di mana simpul daun terdiri dari semua hash di
revisions
. -
Ion hash yang mewakili
redactionInfo
. Hash ini hanya ada di blok yang dilakukan oleh transaksi redaksi. Nilainya dihitung dengan mengambil hash Ion dari seluruhredactionInfo
struktur. -
Hash yang mewakili metadata sistem internal saja. Hash ini mungkin tidak ada di semua blok.
-
transactionInfo
-
Struktur Amazon Ion yang berisi informasi tentang pernyataan dalam transaksi yang melakukan blok. Struktur ini memiliki bidang berikut:
-
statements
- Daftar pernyataan PartiQL danstartTime
ketika mereka mulai berjalan. Setiap pernyataan memilikistatementDigest
hash, yang diperlukan untuk menghitung hashtransactionInfo
struktur. -
documents
- ID dokumen yang diperbarui oleh pernyataan. Setiap dokumen termasuktableName
dantableId
bahwa itu milik, dan indeks setiap pernyataan yang diperbarui itu.
-
revisions
-
Daftar revisi dokumen yang dilakukan di blok. Setiap struktur revisi berisi semua bidang dari pandangan revisi yang dilakukan.
Ini juga dapat mencakup hash yang mewakili revisi sistem internal saja yang merupakan bagian dari rantai hash penuh jurnal.
Revisi yang disunting
Di Amazon QLDB,DELETE
pernyataan hanya secara logis menghapus dokumen dengan membuat revisi baru yang menandainya sebagai dihapus. QLDB juga mendukung operasi redaksi data yang memungkinkan Anda menghapus revisi dokumen yang tidak aktif secara permanen dalam sejarah tabel.
Operasi redaksi hanya menghapus data pengguna dalam revisi yang ditentukan, dan membiarkan urutan jurnal dan metadata dokumen tidak berubah. Ini menjaga integritas data keseluruhan buku besar Anda. Untuk informasi lebih lanjut dan contoh operasi redaksi, lihatMenyunting revisi dokumen.
Contoh revisi isi yang disunting
Pertimbangkan contoh blok sebelumnya. Di blok ini, anggaplah Anda menyunting revisi yang memiliki ID dokumenHwVFkn8IMRa0xjze5xcgga
dan nomor versi0
.
Setelah redaksi selesai, data pengguna dalam revisi (diwakili olehdata
struktur) diganti dengandataHash
bidang baru. Nilai bidang ini adalah hash Ion daridata
struktur yang dihapus. Akibatnya, buku besar mempertahankan integritas data secara keseluruhan dan tetap dapat diverifikasi secara kriptografis melalui operasi API verifikasi yang ada.
Contoh revisi berikut menunjukkan hasil redaksi ini, dengandataHash
bidang baru disorot dalam huruf miring merah
.
catatan
Contoh revisi ini disediakan untuk tujuan informasi saja. Hash yang ditampilkan bukan nilai hash yang dihitung secara nyata.
...
{
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 juga menambahkan blok baru ke jurnal untuk permintaan redaksi selesai. Blok ini mencakupredactionInfo
entri tambahan yang berisi daftar revisi yang disunting dalam transaksi, seperti yang ditunjukkan pada contoh berikut.
... redactionInfo:{ revisions:[ { blockAddress:{ strandId:"4o5UuzWSW5PIoOGm5jPA6J", sequenceNo:25 }, tableId:"HQZ6cgIMUi204Lq1tT4oaJ", documentId:"HwVFkn8IMRa0xjze5xcgga", version:0 } ] } ...
Aplikasi sampel
Untuk contoh kode Java yang memvalidasi rantai hash jurnal menggunakan data yang diekspor, lihat GitHub repositori aws-samples/amazon-qldb-dmv-sample -java
-
ValidateQldbHashChain.java
- Berisi kode tutorial yang mengekspor blok jurnal dari buku besar dan menggunakan data yang diekspor untuk memvalidasi rantai hash antara blok. -
JournalBlock.java
- Berisi metode bernama verifyBlockHash()
yang menunjukkan bagaimana menghitung setiap komponen hash individu dalam blok. Metode ini disebut dengan kode tutorial diValidateQldbHashChain.java
.
Untuk petunjuk tentang cara untuk men-download dan menginstal aplikasi sampel lengkap ini, lihatMenginstal aplikasi sampel Amazon QLDB Java. Sebelum Anda menjalankan kode tutorial, pastikan Anda mengikuti Langkah 1-3 ditutorial java untuk menyiapkan buku besar sampel dan memuatnya dengan data sampel.
Lihat juga
Untuk informasi lebih lanjut tentang jurnal di QLDB, lihat topik berikut:
-
Mengekspor data jurnal dari Amazon QLDB— Untuk mempelajari cara mengekspor data jurnal ke Amazon Simple Storage Service (Amazon S3).
-
Streaming data jurnal dari Amazon QLDB— Untuk mempelajari cara mengalirkan data jurnal ke Amazon Kinesis Data Streams.
-
Verifikasi data di Amazon QLDB— Untuk mempelajari tentang verifikasi kriptografi data jurnal.