Isi jurnal di Amazon QLDB - Amazon Quantum Ledger Database (Amazon QLDB)

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 rangkaianentriesHash 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 dientriesHashList.

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 mewakilitransactionInfo. Nilai ini dihitung dengan mengambil hash Ion dari seluruhtransactionInfo struktur.

  • Akar hash dari pohon Merkle di mana simpul daun terdiri dari semua hash direvisions.

  • Ion hash yang mewakiliredactionInfo. 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. Aplikasi contoh ini mencakup file kelas berikut:

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