Mencari SQLite yang Lebih Cepat
(avi.im)- SQLite pada dasarnya sudah merupakan sistem basis data yang cepat, tetapi para peneliti sedang mencari cara untuk membuatnya lebih cepat lagi
- Peneliti dari Universitas Helsinki dan Cambridge menerbitkan makalah berjudul "co-design serverless runtime/database through asynchronous I/O" yang menunjukkan bahwa latensi ekor dapat dikurangi hingga 100 kali. Makalah ini menjadi dasar bagi Limbo, SQLite yang ditulis ulang dalam Rust.
io_uring
-
Penjelasan io_uring: Subsistem io_uring di kernel Linux menyediakan antarmuka untuk I/O asinkron. Ini mengurangi overhead penyalinan buffer melalui ring buffer antara ruang pengguna dan ruang kernel. Aplikasi dapat mengajukan permintaan I/O dan mengerjakan tugas lain sampai menerima notifikasi dari OS bahwa operasi I/O telah selesai.
-
Eksekusi kueri SQLite: SQLite menggunakan file untuk penyimpanan data, membuka basis data dengan fungsi
sqlite3_open(), dan mengubah pernyataan SQL menjadi bytecode dengan fungsisqlite3_prepare(). Fungsisqlite3_step()mengeksekusi instruksi bytecode untuk memproses kueri.
Premis
-
Meningkatnya komputasi serverless: Dalam lingkungan serverless, latensi basis data dapat menjadi masalah. Jika basis data langsung disematkan ke edge runtime, tidak ada latensi jaringan, dan SQLite cocok untuk lingkungan seperti ini.
-
Masalah SQLite: Penggunaan I/O sinkron membuat pemakaian sumber daya tidak optimal serta menimbulkan masalah konkurensi dan multi-tenant.
-
Peralihan ke io_uring: Mengganti pemanggilan I/O POSIX dengan io_uring bukan hal yang sederhana; SQLite perlu didesain ulang agar sesuai dengan model I/O asinkron.
Limbo
-
Dukungan I/O asinkron: Komponen VM dan BTree dimodifikasi untuk mendukung I/O asinkron, dan instruksi bytecode sinkron diganti dengan instruksi asinkron. I/O asinkron menghilangkan blocking dan meningkatkan konkurensi.
-
Pemisahan query dan storage engine: Diusulkan untuk memisahkan mesin kueri dan mesin penyimpanan guna memaksimalkan penggunaan sumber daya.
Evaluasi dan hasil
-
Benchmarking: Runtime serverless multi-tenant disimulasikan sehingga setiap tenant memiliki basis data tertanamnya sendiri. Hasil perbandingan latensi kueri antara SQLite dan Limbo menunjukkan bahwa Limbo mengurangi latensi ekor di p999 hingga 100 kali.
-
Pekerjaan lanjutan: Benchmark tambahan yang mencakup banyak pembaca dan penulis sedang direncanakan, dan keunggulan performa hanya tampak menonjol setelah p999.
-
Kode open source: Kode Limbo tersedia sebagai open source: Limbo GitHub
1 komentar
Komentar Hacker News
Ada diskusi bahwa kasus penggunaan tertentu untuk komputasi serverless, misalnya AWS Lambda dan database terpusat, tidak selalu cocok dengan aplikasi yang dibangun dengan pendekatan serverless
/tmpdan runtime Python sudah menyertakan SQLite, jadi tidak perlu mengunggah kode lain selain fungsi itu sendiriMungkin layak disebutkan bahwa salah satu dari dua peneliti itu adalah atasan penulis
Setuju bahwa "manfaatnya hanya benar-benar terlihat di atas p999, sedangkan pada p90 dan p99 performanya hampir sama dengan SQLite"
SQLite memiliki test suite yang sangat luas sehingga telah diuji secara menyeluruh
Untuk benchmarking, disimulasikan runtime serverless multi-tenant di mana setiap tenant memiliki database embedded sendiri
Sebelumnya pernah ada upaya untuk memperkenalkan async io ke Postgres, tetapi dihentikan
Ada pertanyaan tentang gagasan bahwa ketika async io sedang bekerja, pekerjaan lain bisa dilakukan sementara itu
Sebagai penulis posting blog tersebut, tidak menyangka tulisan ini akan naik ke halaman depan
SQLite bersifat open source, tetapi test harness pentingnya tidak
Pernah mencoba mencari jalur sederhana untuk membuat format mirip JSON sebagai subset ketat dari format file SQLite, tetapi gagal