1 poin oleh GN⁺ 4 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • Turso menghubungkan frontend yang kompatibel dengan Postgres ke core database berbasis Rust, lalu memperluasnya menjadi struktur LLVM untuk database, di mana satu engine eksekusi menangani banyak bahasa database
  • SQL Postgres di-parse menjadi AST umum lalu dikompilasi menjadi bytecode VDBE; pgmicro, yang telah memvalidasi kemungkinan pendekatan ini, digabungkan ke code tree utama dan dijadikan basis pengembangan resmi
  • Core yang sudah ada mendukung kompatibilitas file SQLite, penulisan konkuren dengan MVCC, eksekusi asinkron, sistem tipe yang kaya, serta materialized view yang diperbarui otomatis, dan keandalannya divalidasi dengan berbagai teknik pengujian
  • Dirancang agar dapat berjalan secara embedded atau sebagai satu file di browser, perangkat mobile, dan berbagai perangkat lain, sambil tetap memungkinkan aplikasi yang ada, ORM, dan psql terhubung melalui wire protocol Postgres
  • Berfokus bukan pada kecocokan 100%, melainkan pada fitur inti yang banyak digunakan agar sebagian besar aplikasi yang ada dapat berjalan tanpa modifikasi; untuk extension dan PL/pgSQL, penerapan WASM serta lapisan kompatibilitas sedang dipertimbangkan, dan dikembangkan dengan lisensi MIT

Alasan membangun Postgres di atas Turso

  • Turso adalah core database modern yang ditulis dalam Rust, dan di atasnya dibangun database yang kompatibel dengan Postgres dari awal
  • Tujuan jangka panjangnya bukan sekadar memindahkan Postgres yang ada ke Rust, melainkan membuat database baru dengan arsitektur modern
    • Tidak menggunakan proses terpisah untuk setiap koneksi
    • Dapat berjalan secara embedded di dalam browser
    • Satu database dapat diperlakukan sebagai satu file
    • Materialized view diperbarui otomatis tanpa pekerjaan terpisah
  • Pendekatannya mengarah ke struktur kompilasi yang dapat dipertukarkan, dengan beberapa frontend terhubung ke satu core yang stabil
    • SQLite adalah frontend pertama
    • Postgres adalah frontend resmi berikutnya
    • Di masa depan, frontend seperti MySQL, Redis, atau database eksperimental juga dapat ditambahkan
  • Hasil saat ini bukan produk yang sudah selesai, melainkan tahap basis pengembangan yang benar-benar dapat dijalankan

Dari reimplementasi SQLite ke core database bersama

  • Turso awalnya adalah proyek yang sepenuhnya mereimplementasikan SQLite dengan Rust dan arsitektur modern, sambil mempertahankan kompatibilitas file sehingga dapat membuka dan membuat file SQLite
  • Turso juga sudah memiliki fitur yang melampaui cakupan SQLite
    • Mendukung penulisan konkuren menggunakan MVCC seperti Postgres
    • Menyediakan sistem tipe yang kaya, mirip Postgres
    • Beroperasi sepenuhnya secara asinkron, sehingga cocok untuk eksekusi native bahkan di lingkungan terbatas seperti browser
    • Karena materialized view diperbarui otomatis secara real time, tidak diperlukan cron job REFRESH MATERIALIZED VIEW atau kombinasi trigger
  • Penambahan frontend Postgres tidak mengubah tujuan Turso dan SQLite yang sudah ada
    • Turso akan terus mengejar kompatibilitas penuh dengan SQLite dan perluasan fitur untuk workload masa depan
    • Saat mengimplementasikan fitur yang diperlukan, pengujian Postgres juga dapat dimanfaatkan untuk mempercepat pengembangan

Keandalan dan model kontribusi terbuka

  • Untuk mereproduksi ketangguhan SQLite, keandalan diperlakukan sebagai fitur produk
    • Menggunakan pengujian simulasi deterministik
    • Melakukan pengujian Antithesis
    • Juga menerapkan pengujian Oracle, fuzzing, dan metode formal
  • Saat ini Turso memiliki lebih dari 260 kontributor, dan menjalankan pendekatan kontribusi terbuka (Open Contribution) yang memungkinkan pihak eksternal ikut berpartisipasi dalam arah proyek
  • Turso berorientasi pada lingkungan bergaya kernel Linux, dengan kode dan standar kualitas tinggi sebagai pusatnya, serta kontributor yang bekerja secara berkelanjutan ikut terlibat dalam pengambilan keputusan proyek
  • Kontribusi yang ditulis AI juga diterima, tetapi harus memiliki kualitas yang memadai; manusia tetap harus meninjau kode secara cermat dan memahami arsitekturnya

Mesin virtual VDBE di dalam SQLite

  • SQLite bukan satu lapisan tunggal yang mengeksekusi SQL secara langsung, melainkan memiliki struktur mesin virtual yang mengompilasi SQL dialek SQLite menjadi bytecode VDBE lalu menjalankannya
  • VDBE bukan bytecode serbaguna seperti JVM, .NET, atau WASM, melainkan menyediakan operasi tingkat tinggi yang spesifik untuk database, seperti mencari item di B-tree
  • Bahasa bytecode ini tidak memiliki spesifikasi publik atau antarmuka modular eksternal, tetapi benar-benar ada di dalam SQLite, dan Turso juga mengadopsi desain yang sama
  • Untuk memvalidasi sifat serbaguna Turso VDBE, Doom dikonversi menggunakan compiler C-to-VDBE kecil
    • Engine Turso yang sebenarnya dikompilasi ke WASM untuk menjalankan bytecode VDBE Doom di tab browser
    • Doom dijalankan dengan cara yang sama seperti database memproses SELECT
    • Setiap frame diperlakukan sebagai satu baris hasil
    • Area memori direpresentasikan sebagai blob yang dapat dibaca dan ditulis
    • Implementasinya dapat dilihat di repositori turso-vdbe-doom-example

Struktur kompilasi frontend Postgres

  • Upaya sebelumnya untuk menggabungkan SQLite dan Postgres, karena struktur SQLite yang monolitik, terutama bergantung pada terjemahan di lapisan query yang mengubah query Postgres menjadi query SQLite, sehingga muncul ketidakcocokan impedansi yang besar akibat perbedaan perilaku eksternal kedua database
  • Secara internal, sebagian besar database SQL melakukan operasi dasar yang serupa, berpusat pada B-tree dan kumpulan indeks
  • Ada perbedaan yang jelas antara struktur penyimpanan Postgres dan SQLite
    • Postgres menaruh baris di heap file dan menggunakan indeks B-tree terpisah, versi tuple, TID, serta vacuum
    • SQLite melakukan clustering data di B-tree
  • Perbedaan ini terutama muncul dari cara byte ditempatkan di disk; operasi yang dibutuhkan Postgres dapat direpresentasikan dengan VDBE yang ada atau didukung dengan memperluas instruksi VDBE
  • Dalam struktur baru ini, frontend database dapat dipertukarkan
    1. Bahasa Postgres di-parse menjadi AST umum
    2. AST dikompilasi menjadi bytecode Turso
    3. Core Turso bersama menjalankan bytecode tersebut
  • Eksperimen awal yang memvalidasi kemungkinan ini dilakukan dengan pgmicro, dan hasilnya digabungkan ke code tree utama Turso untuk dialihkan menjadi proyek resmi

Bentuk eksekusi dan skenario penggunaan

  • Tujuannya adalah menyediakan SQL Postgres dan perilaku database yang sama dalam berbagai bentuk tanpa server
    • Menjalankan database sungguhan yang kompatibel dengan Postgres di tab browser
    • Agent membuat database baru untuk setiap pengguna dan mengelola masing-masing sebagai satu file
    • Aplikasi local-first mengunduh data Postgres sebagai satu file lalu menyinkronkannya kembali
    • Berjalan secara embedded seperti SQLite di ponsel dan berbagai perangkat
  • Fitur untuk menyinkronkan database Turso yang ada ke file lokal juga direncanakan akan didukung di Turso/Postgres
  • Selain eksekusi single-file dan embedded, ini juga mencakup wire protocol dan implementasi server, sehingga aplikasi yang ada, ORM, dan psql dapat terhubung
  • Dalam waktu dekat, frontend resmi yang akan dikembangkan langsung oleh tim Turso adalah SQLite dan Postgres, sementara strukturnya dibuka agar frontend lain dapat dibuat oleh kontributor eksternal

Cara menjalankan saat ini dan berpartisipasi

  • Belum ada paket yang dirilis, tetapi dapat dibangun dan dijalankan langsung dari source
    cd postgres/cli && cargo run
    
  • Frontend Postgres bukan repositori terpisah, melainkan dikembangkan sebagai frontend resmi sejak hari pertama di dalam code tree Turso
  • Pengembangan dan kontribusi dilakukan di repositori GitHub Turso

Tujuan dan batas kompatibilitas

  • Mengingat sifat Postgres yang jauh lebih kompleks daripada SQLite, kompatibilitas 100% tidak dijadikan tujuan wajib
  • Fokusnya adalah mendukung fitur inti dan fitur yang banyak digunakan secara memadai agar mayoritas pengguna dapat menjalankan aplikasi tanpa modifikasi
  • Jika fitur modern berbenturan dengan kompatibilitas 1:1 yang sempurna, keputusan akan dibuat per fitur
    • Materialized view Turso diperbarui otomatis secara real time
    • Belum dipastikan apakah cara lama yang tidak diperbarui otomatis juga akan diimplementasikan terpisah hanya demi kompatibilitas penuh
  • Seiring bertambahnya cakupan fitur, Turso/Postgres dapat menjadi lebih dekat ke database independen daripada replika Postgres

Pemanfaatan AI dan kecepatan pengembangan

  • Alat AI digunakan secara aktif, tetapi review kode dan pemahaman arsitektur tidak dilewati
  • Untuk komponen penting seperti database, alat AI dinilai belum mencapai level yang dapat menggantikan tanggung jawab verifikasi
  • Dibandingkan pendekatan menjalankan Fable selama 24 jam, kecepatan per commit mungkin lebih lambat, tetapi proyek ini berangkat dari core database yang sudah bekerja dan telah diuji secara luas
  • Alih-alih bergerak cepat lalu merusak sistem, Turso memilih cara yang lebih lambat tetapi benar dalam implementasi
  • Menyelesaikan semua fitur membutuhkan waktu, dan sebagian fitur harus melalui proses pengembangan panjang sampai arsitektur yang tepat terbentuk

PL/pgSQL dan extension

  • PL/pgSQL bukan unsur yang mustahil diimplementasikan karena merupakan bahasa prosedural, tetapi kemungkinan besar akan disediakan bahasa prosedural terpisah dan lapisan kompatibilitas alih-alih mereimplementasikannya apa adanya
  • Proof of concept untuk memuat sebagian extension Postgres di dalam container WASM sudah tersedia
    • Extension yang hanya menggunakan simbol yang disediakan container WASM dapat dimuat secara arbitrer
    • Ada penurunan performa akibat eksekusi WASM
    • Pendekatan ini belum ditetapkan sebagai desain akhir
  • Sistem extension yang memungkinkan eksekusi kode arbitrer tanpa batas dinilai tidak diinginkan
  • Sebagian extension mungkin tidak dapat didukung, tetapi banyak extension diperkirakan dapat dimuat jika dikompilasi ke WASM

Perkiraan jadwal dan strategi open source

  • Alih-alih membuat database baru dari nol, proyek ini dimulai dari core yang sudah bekerja, telah diuji, dan berbagi cukup banyak struktur internal dengan Postgres
  • Mengimplementasikan semua fitur Postgres bisa memakan waktu lama, tetapi subset fitur yang cukup besar dan berguna untuk praktik kerja diperkirakan dapat disediakan dalam beberapa bulan
  • Dua developer inti saat ini berusia sekitar 44 tahun dan masih dapat mengembangkan setidaknya selama 20 tahun ke depan, sehingga tidak terburu-buru menyelesaikan seluruh fitur
  • Kecepatan dan cakupan pengembangan nyata akan sangat dipengaruhi kontribusi komunitas
    • Saat dukungan multiproses untuk dialek SQLite, tim tidak memiliki perangkat Windows, sehingga implementasi Windows dikecualikan
    • Seorang developer eksternal yang banyak menggunakan Turso tertarik dan menyelesaikan dukungan Windows dalam waktu satu minggu
  • Frontend eksperimental dapat dikembangkan di luar code tree, tetapi frontend Postgres resmi akan menggunakan lisensi MIT yang sama dengan Turso yang sudah ada

1 komentar

 
GN⁺ 4 jam lalu
Opini Lobste.rs
  • Sepertinya hampir semua database SQL mengompilasi kueri untuk mesin virtual (VM)
    Dari sisi ini, agak aneh kalau hanya SQLite yang dianggap istimewa

    • Kebanyakan database membuat pohon operasi relasional dan menyediakan antarmuka push atau pull untuk tiap operasi
      Sementara itu, SQLite mengompilasi kueri menjadi bytecode imperatif dengan variabel dan perulangan
  • Sebagai pengembang pgwire, saya senang Turso kembali memakai pgwire untuk database yang kompatibel dengan PostgreSQL

  • Saya penasaran kenapa perusahaan menilai perlu melakukan perubahan arah

  • Saya ingin tahu apakah mereka sudah menyelesaikan reimplementasi SQLite, atau malah meninggalkannya
    https://lobste.rs/s/rxdnnq/introducing_first_alpha_turso_next

  • Ini tulisan yang sangat menarik, dan memalukan kalau sampai dilaporkan secara tidak adil

    • Ini adalah teknologi berdampak besar yang suatu hari bisa mengubah arah proyek kerja saya
      Jelas bukan “off-topic” atau “spam”, jadi saya sama sekali tidak paham kenapa orang melaporkannya seperti itu
      Mungkin hanya karena ada satu tanda hubung di judul lalu langsung dianggap sampah AI; rasanya orang-orang benar-benar mulai kehilangan akal
      Budaya pelaporan di situs ini sudah memburuk, dan saya harap moderator mengambil tindakan. Jika beberapa pelapor yang bertindak dengan itikad buruk diblokir, mungkin yang lain akan lebih menahan diri
    • Sampai titik ini, pelaporan yang tidak adil sendiri sudah menjadi budaya di sini
  • Saya sejak dulu merasa tidak suka dengan sikap Turso yang bertindak seolah penerus SQLite, dan karena itu saya sudah bertekad sejak beberapa tahun lalu untuk sama sekali tidak mencoba perangkat lunaknya
    Tetapi kalau mereka bisa menyediakan materialized view dengan pembaruan otomatis yang cepat dan murah di luar SQL Server juga, mungkin pada akhirnya saya akan memakainya