Apa itu buku besar basis data?

Berlaku untuk: SQL Server 2022 (16.x) dan versi yang lebih baru Azure SQL DatabaseAzure SQL Managed Instance

Ledger database adalah bagian dari fitur ledger. Ledger database secara bertahap mencatat status database seiring database berkembang dari waktu ke waktu, sementara pembaruan terjadi pada tabel ledger. Secara logis, ini menggunakan blockchain dan struktur data pohon Merkle.

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

  • Simpan versi sebelumnya dari baris tersebut 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 mewujudkannya dengan memperluas Data Manipulation Language (DML) rencana kueri untuk semua operasi penyisipan, pembaruan, dan penghapusan yang ditujukan ke tabel ledger. ID transaksi dan nomor sekuens yang baru dihasilkan ditetapkan pada versi baru baris tersebut. 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 yang memperlihatkan Pohon Merkle yang menyimpan versi baris yang diperbarui dari tabel ledger dan format yang digunakan untuk membuat serialisasi baris

Untuk merekam keadaan database, ledger database menyimpan entri untuk setiap transaksi. Basis data ledger tersebut mencatat metadata tentang transaksi, seperti stempel waktu commit dan identitas pengguna yang mengeksekusinya. Ini juga menangkap akar pohon Merkle dari baris yang diperbarui di setiap tabel ledger (lihat di atas). Entri-entri ini kemudian ditambahkan ke struktur data yang menunjukkan jika terjadi manipulasi agar integritasnya dapat diverifikasi di kemudian hari. 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 yang menunjukkan Pohon Merkle yang menyimpan transaksi tabel ledger.

Untuk informasi selengkapnya tentang bagaimana ledger menyediakan integritas data, lihat artikel Manajemen digest 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, atau SQL Server Developer Tools.

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:

Cuplikan layar contoh tabel ledger.

Izin

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