GoatDB telah muncul sebagai penyelesaian pangkalan data baharu yang membalikkan seni bina awan tradisional dengan mengalihkan pengkomputeran ke bahagian pelanggan. Pangkalan data ringan dan masa nyata untuk aplikasi Deno dan React ini sedang menimbulkan perbincangan dalam komuniti pembangun kerana pendekatannya yang tidak konvensional terhadap pengurusan dan penyelarasan data.
Membalikkan Seni Bina Pangkalan Data Tradisional
GoatDB mengambil pendekatan yang sangat berbeza berbanding sistem pangkalan data konvensional. Berbanding mengikuti model awan-utama standard dengan backend yang berat, pangkalan data kompleks, dan pelanggan nipis dengan cache data sementara, GoatDB mengalihkan kebanyakan pengkomputeran kepada pelanggan menggunakan seni bina seperti Git untuk data aplikasi. Pencipta menerangkan falsafah reka bentuk ini:
Fikirkan tentang seni bina awan-utama moden di mana anda mempunyai backend tebal dengan pangkalan data kompleks, pelanggan nipis dengan cache sementara data, dan lapisan API yang memindahkan data di antara mereka. Ini adalah eksperimen dalam membalikkan reka bentuk tradisional dan mengalihkan kebanyakan pengkomputeran kepada pelanggan menggunakan seni bina yang serupa dengan apa yang digunakan Git, tetapi untuk data aplikasi sebenar anda.
Pembalikan ini menghasilkan produk sampingan yang menarik termasuk keupayaan kolaborasi masa nyata, pengauditan data yang selamat, dan keupayaan untuk mengekalkan pelbagai versi aplikasi pada cabang yang berbeza secara serentak dalam persekitaran pengeluaran.
Ciri-ciri Utama GoatDB
- Tidak memerlukan infrastruktur khusus (beroperasi di pihak klien)
- Ketahanan dengan keupayaan luar talian terlebih dahulu
- Seni bina berasaskan tepi (pemprosesan pada klien)
- Kerjasama masa nyata dengan penyegerakan terbina dalam
- Kawalan versi untuk data dengan graf komit seperti Git
- Keselamatan melalui pengesahan kriptografi
- Penyelesaian konflik secara automatik
Prestasi Pertanyaan dan Pelaksanaan
GoatDB mengendalikan pertanyaan melalui fungsi TypeScript biasa untuk menyusun dan menapis. Tidak seperti pangkalan data tradisional yang bergantung pada pengindeksan di bahagian pelayan, GoatDB melakukan imbasan linear dalam coroutine untuk mengelakkan halangan thread UI. Sistem ini memanfaatkan asas kawalan versinya untuk mengemas kini hasil pertanyaan secara berperingkat, menjadikannya sesuai untuk aplikasi dengan keperluan data yang besar.
Menurut penanda aras yang dikongsi dalam dokumentasi, GoatDB boleh mengendalikan ratusan ribu item yang disunting secara masa nyata oleh pelbagai pengguna. Metrik prestasi menunjukkan operasi membaca mengambil masa kurang daripada 0.001ms setiap item dan penapisan pertanyaan kira-kira 3,000 item daripada set 100,000 selesai dalam masa sekitar 100ms.
Keputusan Penanda Aras GoatDB (pada MacBook Pro 2018)
- Penulisan: ~0.25ms / item
- Pembacaan: < 0.001ms / item
- Pertanyaan: ~100ms untuk menapis ~3k item daripada set 100k
- Membuka Repositori: < 1.5 saat / 100k komit
Keperluan Masa Larian dan Keserasian
Pada masa ini, GoatDB memerlukan Deno sebagai persekitaran masa lariannya, walaupun integrasi React adalah pilihan. Keperluan ini telah mencetuskan beberapa perbahasan tentang aksesibilitinya. Walaupun projek ini kini terhad kepada Deno, pembangun telah menunjukkan mereka sedang berusaha untuk menyokong rangka kerja dan persekitaran lain pada masa hadapan.
GoatDB mempunyai reka bentuk simetri yang berjalan pada kedua-dua bahagian pelanggan dan pelayan. Untuk penyimpanan bahagian pelanggan, ia menawarkan backend untuk kedua-dua OPFS (Origin Private File System) dan IndexedDB, memberikan fleksibiliti dalam cara data disimpan dalam persekitaran pelayar.
Perbandingan dengan Penyelesaian Sedia Ada
Pendekatan pangkalan data ini telah menimbulkan perbandingan dengan penyelesaian yang telah mantap seperti PouchDB dan SQLite. Apabila ditanya tentang kelebihan berbanding PouchDB, yang diselaraskan dengan CouchDB, pencipta GoatDB menekankan kebolehskalaan sebagai pembeza utama. Beberapa ahli komuniti mempersoalkan sama ada faedah prestasi mewajarkan penciptaan penyelesaian pangkalan data baharu apabila teknologi sedia ada seperti SQLite (sebagai modul WASM) berpotensi untuk memenuhi tujuan yang serupa.
Satu perbezaan yang ketara adalah pelaksanaan GoatDB sebagai graf komit yang diedarkan dan direplikasi serupa dengan Git, berbanding struktur B-tree tradisional yang dibungkus sebagai pangkalan data. Seni bina ini membolehkan fungsi luar talian-utama, di mana pelanggan boleh terus bekerja walaupun pelayan tidak tersedia dan boleh memulihkan keadaan pelayan apabila sambungan semula.
Pertimbangan Memori dan Batasan
Satu batasan praktikal pendekatan berasaskan pelanggan GoatDB adalah penggunaan memori. Oleh kerana data diproses terutamanya dalam memori, aplikasi dibatasi oleh memori yang tersedia pada peranti pelanggan. Walau bagaimanapun, pembangun telah menyatakan bahawa GoatDB membolehkan nyahmuatan bahagian data secara eksplisit ke cakera, serupa dengan menutup fail dalam aplikasi desktop, yang boleh membantu menguruskan kekangan memori.
Saiz kecil pangkalan data—hanya 8.2KB saiz pakej—menjadikannya sangat menarik untuk aplikasi web di mana persekitaran JavaScript sudah tersedia, menangani kebimbangan tentang penambahan berat yang tidak perlu kepada aplikasi.
Dalam landskap yang didominasi oleh penyelesaian pangkalan data berpusatkan pelayan, GoatDB mewakili eksperimen menarik dalam memikirkan semula seni bina data untuk aplikasi web moden. Walaupun tidak sesuai untuk setiap kes penggunaan, pendekatan inovatifnya terhadap pengurusan data berasaskan pelanggan menawarkan kelebihan yang menarik untuk aplikasi yang memerlukan kolaborasi masa nyata dan fungsi luar talian.