Cetak Biru untuk Database Terdistribusi
Membedah toydb, Cetak Biru (blueprint) untuk Database Terdistribusi
Bagian ini berfungsi sebagai analisis fundamental. Kita akan membedah proyek toydb
untuk memahami arsitektur dan pilihan desainnya, membangun model mental yang akan memandu bagian implementasi selanjutnya. Tujuan eksplisit proyek ini sebagai sarana edukasi menjadikannya titik awal yang ideal.
Anatomi Database SQL Terdistribusi
Bab ini akan memberikan gambaran tingkat tinggi tentang arsitektur berlapis yang umum digunakan pada database SQL terdistribusi modern, dengan menggunakan toydb
sebagai contoh konkret. Ini akan menjadi “peta” bagi seluruh perjalanan belajar Anda.
Filosofi Arsitektur Berlapis
Arsitektur toydb
digambarkan sebagai “sebuah key/value store transaksional yang dikelola oleh klaster Raft dengan SQL query engine di atasnya”. Model arsitektur ini merupakan pola yang umum dan efektif untuk memisahkan berbagai komponen dalam sistem yang kompleks. Pemisahan ini memungkinkan lapisan penyimpanan (storage layer), yang menangani distribusi dan replikasi data, dan lapisan kueri (query layer), yang menangani semantik SQL, untuk dikembangkan dan diskalakan secara independen. Dengan mempelajari toydb
, Anda tidak hanya mempelajari implementasi komponen individual, tetapi juga memahami pola arsitektur fundamental yang telah terbukti di industri.
Pola ini bukanlah sekadar struktur yang nyaman; ini adalah cerminan langsung dari arsitektur database “NewSQL” tingkat produksi seperti TiDB/TiKV dan CockroachDB. Arsitektur berlapis ini memisahkan dua masalah yang berbeda secara fundamental:
Bagaimana cara menyimpan pasangan key-value secara andal di banyak mesin?
Bagaimana cara mem-parsing dan mengeksekusi kueri
JOIN
SQL?
Dengan memisahkan kedua masalah ini, kompleksitas sistem secara keseluruhan dapat dikelola dengan lebih baik. toydb
memberikan pelajaran utama bukan hanya tentang implementasi, tetapi tentang pemahaman pemisahan fundamental ini, yang merupakan landasan dari desain database terdistribusi modern.
Alur Sebuah Kueri
Untuk memahami bagaimana lapisan-lapisan ini berinteraksi, mari kita telusuri siklus hidup sebuah kueri SQL sederhana, misalnya SELECT * FROM users WHERE id = 1;
, melalui arsitektur ini:
SQL Engine: Lapisan teratas menerima string kueri dari klien. Kueri ini di-parsing, direncanakan, dan dioptimalkan untuk menghasilkan rencana eksekusi yang efisien.
Transactional Layer: Rencana eksekusi dijalankan dalam konteks sebuah transaksi. Lapisan ini memastikan jaminan ACID (Atomicity, Consistency, Isolation, Durability), seringkali menggunakan mekanisme seperti Multi-Version Concurrency Control (MVCC) untuk memungkinkan operasi baca dan tulis berjalan secara bersamaan tanpa saling memblokir.
Consensus Layer: Setiap operasi tulis (dan terkadang baca, untuk konsistensi yang kuat) yang merupakan bagian dari transaksi diusulkan ke klaster konsensus. Dalam
toydb
, ini adalah klaster Raft. Lapisan ini memastikan bahwa semua node dalam klaster setuju pada urutan operasi yang sama, bahkan jika terjadi kegagalan pada beberapa node.Storage Engine: Setelah sebuah operasi disetujui oleh mayoritas klaster (yaitu, telah di-commit dalam log Raft), operasi tersebut diterapkan secara fisik ke storage engine lokal di setiap node. Lapisan ini bertanggung jawab untuk menulis dan membaca data dari disk secara persisten.
Misi Edukasi toydb
Tujuan utama proyek toydb
adalah untuk menjadi proyek edukasi, dirancang agar “sederhana dan dapat dimengerti” sambil tetap fungsional dan benar. Untuk mencapai tujuan ini, aspek-aspek seperti performa, skalabilitas, dan ketersediaan tinggi secara eksplisit dikesampingkan sebagai
non-goals. Aspek-aspek ini merupakan sumber utama kompleksitas dalam database tingkat produksi dan dapat mengaburkan konsep-konsep dasar yang mendasarinya.
Proyek ini awalnya ditulis pada tahun 2020 oleh penulisnya untuk mempelajari internal database. Kemudian, proyek ini ditulis ulang berdasarkan pengalaman penulis dalam membangun database SQL terdistribusi nyata di CockroachDB dan Neon. Latar belakang ini memberikan dasar yang kuat pada arsitektur
toydb
dalam prinsip-prinsip dunia nyata, menjadikannya ilustrasi sederhana namun akurat dari konsep-konsep di balik database SQL terdistribusi.
Referensi
erikgrinaker/toydb: Distributed SQL database in Rust, written as an educational project - GitHub, accessed September 30, 2025, https://github.com/erikgrinaker/toydb