Pembangun Berdebat Mengenai SQLite vs PostgreSQL untuk Aplikasi Local-First Ketika Penyelesaian Sync Baharu Muncul

Pasukan Komuniti BigGo
Pembangun Berdebat Mengenai SQLite vs PostgreSQL untuk Aplikasi Local-First Ketika Penyelesaian Sync Baharu Muncul

Komuniti pembangun aplikasi local-first sedang giat membincangkan penyelesaian pangkalan data terbaik untuk membina aplikasi reaktif yang mampu beroperasi secara luar talian. Perbincangan ini semakin intensif berikutan laporan pengalaman terperinci seorang pembangun yang membandingkan pendekatan berbeza untuk membina enjin sync dengan SQLite dan PostgreSQL.

Electric dan PGlite Menunjukkan Potensi tetapi Menghadapi Isu Skalabiliti

Beberapa pembangun telah bereksperimen dengan Electric SQL yang dipasangkan dengan PGlite, pelaksanaan PostgreSQL berasaskan WebAssembly yang berjalan dalam pelayar web. Walaupun gabungan ini menawarkan kelebihan menggunakan enjin pangkalan data yang sama secara tempatan dan pada pelayan, ahli komuniti telah melaporkan cabaran prestasi yang ketara. Isu yang paling menonjol ialah masa permulaan yang melebihi satu minit apabila pangkalan data semakin besar, terutamanya disebabkan oleh kekurangan ciri pemadatan. Kebocoran memori dan masalah kestabilan dengan operasi serentak turut muncul apabila pangkalan data berkembang.

Menariknya, seorang penyumbang utama kepada projek Electric mengakui batasan ini dan mendedahkan bahawa isu-isu ini yang mendorong penciptaan TanStack DB, sebuah datastore bahagian klien berasaskan JavaScript baharu yang direka bentuk untuk menjadi sync native dan agnostik backend.

Isu Prestasi Biasa Yang Dilaporkan:

  • Masa permulaan PGlite: Melebihi 1 minit untuk pangkalan data yang lebih besar
  • Kebocoran memori: Berlaku dengan peningkatan permintaan LISTEN serentak
  • Masalah kestabilan: Dalam mod pengguna tunggal dengan saiz pangkalan data yang semakin meningkat
  • Pemadatan yang hilang: Membawa kepada kembung pangkalan data dari masa ke masa
  • Overhed WASM: Prestasi pertanyaan yang lebih perlahan berbanding pelaksanaan asli

SQLite Mendapat Tarikan untuk Aplikasi Pengguna Tunggal

Perbincangan ini telah menyerlahkan populariti SQLite yang semakin meningkat untuk aplikasi local-first, terutamanya senario pengguna tunggal seperti aplikasi mengambil nota. Pembangun mendapati bahawa sifat ringan dan kestabilan SQLite menjadikannya sesuai untuk aplikasi berasaskan pelayar web menggunakan pelaksanaan WebAssembly seperti wa-sqlite. Cabaran utama dengan SQLite ialah melaksanakan reaktiviti, kerana ia tidak mempunyai fungsi LISTEN PostgreSQL untuk pemberitahuan perubahan masa nyata.

Ahli komuniti telah berkongsi penyelesaian kreatif, termasuk menggunakan pencetus pangkalan data untuk merekod perubahan dan API Broadcast Channel untuk memberitahu bahagian berbeza aplikasi mengenai kemas kini. Pendekatan ini telah terbukti berkesan untuk mencipta aplikasi yang sepenuhnya reaktif yang terasa responsif seperti penyelesaian dalam memori.

Penyelesaian Polling Mudah Terbukti Berkesan untuk Banyak Kes Penggunaan

Trend menarik dalam perbincangan komuniti ialah pengiktirafan bahawa enjin sync yang kompleks mungkin berlebihan untuk banyak aplikasi. Untuk aplikasi pengguna tunggal dengan sambungan internet yang boleh dipercayai, pembangun mendapati kejayaan dengan sistem polling berasaskan cap masa mudah yang mengambil perubahan setiap beberapa saat. Pendekatan ini menggunakan permintaan JSON yang mudah dan boleh dilaksanakan dengan kod minimum sambil tetap memberikan pengalaman pengguna yang cemerlang.

Membina enjin sync boleh menjadi pengalaman pembelajaran yang baik, tetapi untuk perisian produksi adalah lebih baik memilih sesuatu yang telah menghadapi dan menyelesaikan semua kes tepi pelik yang anda dapat apabila membina enjin sync dan storan berterusan pada pelayar web.

Penyelesaian Pangkalan Data Local-First Utama yang Disebut:

Penyelesaian Enjin Pangkalan Data Ciri-ciri Utama Terbaik Untuk
Electric + PGlite PostgreSQL (WASM) Segerak butiran, sokongan LISTEN Aplikasi kolaboratif berbilang pengguna
TanStack DB Berasaskan JavaScript Segerak asli, backend agnostik Penyimpan data bahagian klien am
Evolu SQLite Penyulitan E2E, enjin segerak Aplikasi berfokus privasi
wa-sqlite SQLite (WASM) Ringan, stabil Aplikasi pengguna tunggal
Tinjauan tersuai Mana-mana Segerak berasaskan cap masa yang mudah Keperluan segerak berkompleksiti rendah

Penyelesaian Alternatif dan Alat Khusus

Komuniti turut menyerlahkan beberapa penyelesaian sedia ada untuk kes penggunaan berbeza. Evolu menawarkan penyegerakan berasaskan SQLite dengan penyulitan hujung ke hujung, manakala alat seperti Reflect telah berjaya melaksanakan pendekatan serupa dalam produksi. Sesetengah pembangun yang bekerja pada aplikasi khusus, seperti sistem rumah pintar menggunakan CRDT melalui CAN bus dan Bluetooth, sedang membina penyelesaian tersuai dari awal disebabkan kekangan platform yang unik.

Perbincangan ini mendedahkan ekosistem yang semakin matang di mana pembangun boleh memilih daripada alat yang semakin canggih atau membina penyelesaian tersuai yang disesuaikan dengan keperluan khusus mereka. Wawasan utama yang muncul daripada komuniti ialah pilihan enjin sync harus didorong oleh kekangan aplikasi dan bukannya keutamaan teknikal, dengan faktor seperti bilangan pengguna serentak, kekerapan penulisan, dan corak penggunaan luar talian menentukan pendekatan yang optimum.

Rujukan: Lessons learned from building a sync-engine and reactivity system with SQLite