Apa itu ledger database?

Berlaku untuk: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

Ledger database adalah bagian dari fitur ledger. Ledger database secara bertahap mengambil status database seiring perubahan database dari waktu ke waktu saat tabel ledger diperbarui. Ledger database secara logis menggunakan blockchain dan struktur data pohon Merkle.

Setiap operasi yang memperbarui tabel ledger perlu melakukan beberapa tugas tambahan untuk mempertahankan data historis dan menghitung hash yang diambil dalam ledger database. Secara khusus, untuk setiap baris yang diperbarui, kita harus:

  • Pertahankan versi baris yang lebih lama dalam tabel riwayat.
  • Tetapkan ID transaksi dan buat nomor urutan baru, pertahankan di kolom sistem yang sesuai.
  • Serialisasi konten baris dan sertakan saat menghitung hash untuk semua baris yang diperbarui oleh transaksi ini.

Ledger mencapainya dengan memperluas rencana kueri Data Manipulation Language (DML) dari semua operasi sisipan, pembaruan, dan penghapusan yang menargetkan tabel ledger. ID transaksi dan nomor urutan yang baru dibuat diatur untuk versi baru baris. Kemudian, operator rencana kueri menjalankan ekspresi khusus yang menserialisasikan konten baris dan menghitung hashnya, menambahkannya ke Pohon Merkle yang disimpan di tingkat transaksi dan berisi hash semua versi baris yang diperbarui oleh transaksi ini untuk tabel ledger ini. Akar pohon mewakili semua pembaruan dan penghapusan yang dilakukan oleh transaksi ini dalam tabel ledger ini. Jika transaksi memperbarui beberapa tabel, Pohon Merkle terpisah dipertahankan untuk setiap tabel. Gambar di bawah ini menunjukkan contoh Pohon Merkle yang menyimpan versi baris yang diperbarui dari tabel ledger dan format yang digunakan untuk membuat serialisasi baris. Selain nilai yang diserialisasikan dari setiap kolom, kami menyertakan metadata mengenai jumlah kolom dalam baris, ordinal kolom individual, jenis data, panjang, dan informasi lainnya yang memengaruhi bagaimana nilai ditafsirkan.

Diagram that shows a Merkle Tree storing the updated row versions of a ledger table and the format used to serialize the rows

Untuk mengambil status database, ledger database menyimpan entri untuk setiap transaksi. Ledger database tersebut mengambil metadata tentang transaksi, seperti tanda waktu penerapan (commit) dan identitas pengguna yang melakukannya. Ini juga menangkap akar pohon Merkle dari baris yang diperbarui di setiap tabel ledger (lihat di atas). Entri ini kemudian ditambahkan ke struktur data yang terbukti berubah untuk memungkinkan verifikasi integritas di masa mendatang. Blok ditutup:

Saat blok ditutup, transaksi baru akan disisipkan dalam blok baru. Proses pembuatan blok kemudian:

  1. Mengambil semua transaksi yang termasuk dalam blok tertutup dari antrean dalam memori dan tampilan katalog sistem sys.database_ledger_transactions.
  2. Menghitung akar pohon Merkle atas transaksi ini dan hash dari blok sebelumnya.
  3. Mempertahankan blok tertutup dalam tampilan katalog sistem sys.database_ledger_blocks.

Karena ini adalah pembaruan tabel reguler, sistem secara otomatis menjamin durabilitasnya. Untuk mempertahankan rantai blok tunggal, operasi ini adalah operasi beralur tunggal (single-threaded). Namun, operasi ini tetap efisien karena hanya menghitung hash atas informasi transaksi dan terjadi secara asinkron. Operasi ini tidak memengaruhi performa transaksi.

Diagram that shows a Merkle Tree storing the transactions of a ledger table.

Untuk informasi selengkapnya tentang bagaimana ledger menyediakan integritas data, lihat artikel, Manajemen hash, dan Verifikasi database.

Di mana transaksi database dan data blokir disimpan?

Data untuk transaksi dan blok disimpan secara fisik sebagai baris dalam dua tampilan katalog sistem:

  • sys.database_ledger_transactions: Mempertahankan baris dengan informasi dari setiap transaksi dalam ledger database. Informasi termasuk ID blok tempat transaksi ini berada dan urutan transaksi di dalam blok.
  • sys.database_ledger_blocks: Mempertahankan baris untuk setiap blok dalam ledger, termasuk akar pohon Merkle atas transaksi di dalam blok, dan hash blok sebelumnya untuk membentuk blockchain.

Untuk melihat ledger database, jalankan pernyataan T-SQL berikut di SQL Server Management Studio, Azure Data Studio, atau Alat Pengembang SQL Server.

SELECT * FROM sys.database_ledger_transactions;
GO

SELECT * FROM sys.database_ledger_blocks;
GO

Di bawah ini adalah contoh tabel ledger yang memuat empat transaksi yang terdiri dari satu blok dalam blockchain ledger database:

Screenshot of an example ledger table.

Izin

Menampilkan ledger database memerlukan VIEW LEDGER CONTENT izin. Untuk detail tentang izin yang terkait dengan tabel ledger, lihat Izin.