Pendekatan eksperimen seorang pembangun untuk membina pangkalan data berprestasi tinggi menggunakan io_uring Linux dan sistem dual write-ahead log ( WAL ) telah mencetuskan perdebatan teknikal yang sengit dalam komuniti pengaturcaraan. Kontroversi ini berpusat pada sama ada reka bentuk yang dicadangkan benar-benar mengekalkan jaminan ketahanan yang dijangka disediakan oleh pangkalan data.
Pembangun tersebut mencipta pangkalan data key-value eksperimen yang dipanggil Poro , melaksanakan apa yang mereka panggil sebagai reka bentuk dual WAL untuk mencapai prestasi yang lebih baik dengan operasi I/O tak segerak. Daripada pendekatan tradisional menulis perubahan ke cakera dan menunggu pengesahan sebelum membalas kepada klien, sistem ini menggunakan dua log berasingan: intent WAL yang merekod operasi yang dirancang dan completion WAL yang mengesahkan operasi yang berjaya.
Komponen Teknikal Utama
- Intent WAL: Merekod operasi yang dirancang sebelum pelaksanaan
- Completion WAL: Merekod penyelesaian operasi yang berjaya
- io_uring: Antara muka I/O tak segerak Linux dengan baris gilir penyerahan/penyelesaian
- Circular Buffers: Entri kelompok untuk prestasi yang lebih baik (ambang kapasiti 75%)
- Pengesahan Checksum: Pemeriksaan integriti data semasa pemulihan
- Ring Buffers Berasingan: Menghalang sekatan head-of-line antara jenis WAL
Komuniti Mempersoalkan Prinsip Asas Pangkalan Data
Komuniti teknikal telah membangkitkan kebimbangan serius mengenai reka bentuk asas. Beberapa pembangun telah menunjukkan apa yang kelihatan sebagai kelemahan kritikal dalam pendekatan tersebut. Sistem ini memulangkan kejayaan kepada klien selepas menulis kedua-dua rekod intent dan completion secara tak segerak, tetapi sebelum memastikan rekod-rekod ini benar-benar disimpan ke cakera. Ini bermakna klien boleh menerima pengesahan bahawa data mereka telah disimpan, hanya untuk kehilangan data tersebut jika sistem ranap sejurus selepas itu.
Adakah ini bermakna bahawa klien boleh menerima kejayaan untuk permintaan, yang jika sistem ranap sejurus selepas itu, apabila dimainkan semula, tidak semestinya mempunyai permintaan tersebut direkodkan? Bagaimanakah itu tidak melanggar ACID ?
Sifat-sifat ACID (Atomicity, Consistency, Isolation, Durability) adalah keperluan asas untuk sistem pangkalan data yang boleh dipercayai. Aspek ketahanan secara khusus memerlukan bahawa sebaik sahaja transaksi disahkan sebagai berjaya, data mesti bertahan dalam kegagalan sistem. Pengkritik berhujah bahawa pendekatan dual WAL secara asasnya melanggar jaminan ini.
Dakwaan Prestasi Dipersoalkan
Walaupun pembangun melaporkan peningkatan prestasi yang mengagumkan - mendakwa peningkatan 10 kali ganda dalam throughput transaksi - ahli komuniti mempersoalkan sama ada keuntungan ini datang dengan mengorbankan kebolehpercayaan data. Beberapa pembangun berpengalaman telah menyatakan kekeliruan tentang bagaimana dua operasi penulisan tak segerak boleh menjadi lebih pantas atau lebih boleh dipercayai daripada satu penulisan segerak yang benar-benar menjamin kegigihan data.
Perdebatan ini juga telah menyerlahkan pendekatan alternatif yang digunakan dalam sistem pengeluaran. Sesetengah pembangun telah berkongsi teknik tahan ranap mereka sendiri, seperti menggunakan fail hash dan panjang berasingan dengan operasi rename atomik, atau melaksanakan struktur B-tree append-only yang menyatukan WAL dan penyimpanan data.
Pendekatan WAL Tradisional berbanding WAL Dwi
Aspek | WAL Tradisional | WAL Dwi (Dicadangkan) |
---|---|---|
Operasi Penulisan | Penulisan segerak tunggal | Dua penulisan tak segerak (niat + penyiapan) |
Respons Klien | Selepas pengesahan flush cakera | Selepas operasi memori selesai |
Jaminan Ketahanan | Kuat (data bertahan daripada kerosakan) | Dipersoalkan (data mungkin hilang) |
Dakwaan Prestasi | Garis dasar | Peningkatan 10x dilaporkan |
Proses Pemulihan | Gunakan semua entri yang komited | Gunakan hanya entri dengan kedua-dua rekod niat dan penyiapan |
Butiran Pelaksanaan Yang Hilang Menambah Kekeliruan
Sebahagian besar kritikan komuniti berpunca daripada penjelasan yang tidak jelas dalam cadangan asal. Sesetengah pembangun mengesyaki bahawa pelaksanaan sebenar mungkin termasuk langkah yang hilang di mana sistem menunggu kedua-dua rekod WAL untuk disiram ke cakera sebelum memulangkan kejayaan kepada klien. Walau bagaimanapun, ini akan menghapuskan faedah prestasi yang didakwa, kerana menunggu dua operasi cakera berkemungkinan akan menjadi lebih perlahan daripada menunggu satu.
Perbincangan ini juga telah menimbulkan persoalan tentang senario akses serentak. Jika beberapa thread mengakses data yang sedang ditulis secara tak segerak, sistem boleh menghadapi cabaran konsistensi tambahan di luar kebimbangan ketahanan asas.
Implikasi Yang Lebih Luas Untuk Reka Bentuk Pangkalan Data
Walaupun terdapat kritikan, eksperimen ini telah mencetuskan perbincangan berharga tentang seni bina pangkalan data moden dan potensi io_uring untuk sistem penyimpanan berprestasi tinggi. Antara muka io_uring Linux memang menawarkan kelebihan tulen untuk aplikasi yang boleh memanfaatkan I/O tak segerak dengan betul, tetapi komuniti pangkalan data kelihatan skeptikal bahawa faedah ini boleh direalisasikan tanpa mengorbankan jaminan kebolehpercayaan asas.
Perdebatan berterusan ketika pembangun mencari penjelasan mengenai butiran pelaksanaan sebenar dan sama ada sistem yang dicadangkan benar-benar boleh mengekalkan pematuhan ACID sambil memberikan peningkatan prestasi yang dijanjikan.
*Write-ahead log ( WAL ): Teknik di mana perubahan pertama kali ditulis ke fail log sebelum digunakan pada pangkalan data utama, memastikan data boleh dipulihkan selepas ranap.*io_uring: Antara muka kernel Linux yang menyediakan operasi I/O tak segerak yang cekap, membolehkan aplikasi menyerahkan beberapa operasi tanpa menyekat.
- ACID : Satu set sifat (Atomicity, Consistency, Isolation, Durability) yang menjamin transaksi pangkalan data yang boleh dipercayai.
Rujukan: Async I/O on Linux and durability