Isi jurnal di Amazon QLDB - Database Buku Besar Amazon Quantum (AmazonQLDB)

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

penting

Pemberitahuan akhir dukungan: Pelanggan yang ada akan dapat menggunakan Amazon QLDB hingga akhir dukungan pada 07/31/2025. Untuk detail selengkapnya, lihat Memigrasi QLDB Buku Besar Amazon ke Amazon Aurora Postgre. SQL

Di AmazonQLDB, jurnal adalah log transaksional yang tidak dapat diubah 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 komitmen Anda dan metadata sistem lainnya. QLDBmenulis satu blok dirantai ke jurnal dalam suatu transaksi.

Bagian ini memberikan contoh blok jurnal dengan data sampel dan menjelaskan isi blok.

Contoh blok

Blok jurnal berisi metadata transaksi bersama dengan entri yang mewakili revisi dokumen yang dilakukan dalam transaksi dan pernyataan PartiQL yang melakukannya.

Berikut ini adalah contoh blok dengan data sampel.

catatan

Contoh blok ini disediakan hanya untuk tujuan informasi. Hash yang ditampilkan bukanlah 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"
      }
    }
  ]
}

Di revisions lapangan, beberapa objek revisi mungkin hanya berisi hash 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 lengkap jurnal, yang diperlukan untuk verifikasi kriptografi.

Isi blok

Blok jurnal memiliki bidang-bidang berikut:

blockAddress

Lokasi blok di jurnal. Alamat adalah struktur Amazon Ion yang memiliki dua bidang: strandId dansequenceNo.

Misalnya: {strandId:"BlFTjlSXze9BIh1KOszcE3",sequenceNo:14}

transactionId

ID unik dari transaksi yang melakukan blok.

blockTimestamp

Stempel waktu ketika blok itu dimasukkan ke jurnal.

blockHash

Nilai hash 256-bit yang secara unik mewakili blok. Ini adalah hash dari rangkaian dan. entriesHash previousBlockHash

entriesHash

Hash yang mewakili semua entri dalam blok, termasuk entri sistem internal saja. Ini adalah hash akar pohon Merkle di mana simpul daun terdiri dari semua hash di dalamnya. entriesHashList

previousBlockHash

Hash dari blok berantai sebelumnya di jurnal.

entriesHashList

Daftar hash yang mewakili setiap entri dalam blok. Daftar ini dapat mencakup hash entri berikut:

  • Hash Ion yang mewakilitransactionInfo. Nilai ini dihitung dengan mengambil hash Ion dari seluruh transactionInfo struktur.

  • Hash akar pohon Merkle di mana simpul daun terdiri dari semua hash di dalamnya. revisions

  • Hash Ion yang mewakiliredactionInfo. Hash ini hanya ada di blok yang dilakukan oleh transaksi redaksi. Nilainya dihitung dengan mengambil hash Ion dari seluruh redactionInfo 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-bidang berikut:

  • statements— Daftar pernyataan PartiQL dan kapan mereka mulai startTime berjalan. Setiap pernyataan memiliki statementDigest hash, yang diperlukan untuk menghitung hash struktur. transactionInfo

  • documents— Dokumen IDs yang diperbarui oleh pernyataan. Setiap dokumen tableId mencakup tableName dan miliknya, dan indeks setiap pernyataan yang memperbaruinya.

revisions

Daftar revisi dokumen yang dilakukan di blok. Setiap struktur revisi berisi semua bidang dari pandangan komitmen revisi.

Ini juga dapat mencakup hash yang mewakili revisi sistem internal saja yang merupakan bagian dari rantai hash penuh jurnal.

Revisi yang disunting

Di AmazonQLDB, sebuah DELETE pernyataan hanya secara logis menghapus dokumen dengan membuat revisi baru yang menandainya sebagai dihapus. QLDBjuga mendukung operasi redaksi data yang memungkinkan Anda menghapus revisi dokumen yang tidak aktif secara permanen dalam riwayat 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 yang disunting

Perhatikan contoh blok sebelumnya. Di blok ini, misalkan Anda menyunting revisi yang memiliki ID dokumen HwVFkn8IMRa0xjze5xcgga dan nomor versi. 0

Setelah redaksi selesai, data pengguna dalam revisi (diwakili oleh data struktur) digantikan oleh bidang barudataHash. Nilai bidang ini adalah hash Ion dari data struktur yang dihapus. Akibatnya, buku besar mempertahankan integritas data secara keseluruhan dan tetap dapat diverifikasi secara kriptografis melalui operasi verifikasi yang ada. API

Contoh revisi berikut menunjukkan hasil redaksi ini, dengan dataHash bidang baru disorot red italics.

catatan

Contoh revisi ini disediakan hanya untuk tujuan informasi. Hash yang ditampilkan bukanlah 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"
  }
}
...

QLDBjuga menambahkan blok baru ke jurnal untuk permintaan redaksi yang telah selesai. Blok ini mencakup redactionInfo 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/ -java. amazon-qldb-dmv-sample 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 antar 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 mengunduh dan menginstal aplikasi sampel lengkap ini, lihatMenginstal aplikasi sampel Amazon QLDB Java. Sebelum Anda menjalankan kode tutorial, pastikan Anda mengikuti Langkah 1-3 Tutorial Java untuk menyiapkan buku besar sampel dan memuatnya dengan data sampel.

Lihat juga

Untuk informasi selengkapnya tentang jurnal diQLDB, lihat topik berikut: