3 poin oleh GN⁺ 2024-10-28 | 1 komentar | Bagikan ke WhatsApp

Menggunakan SQLite sebagai penyimpanan konten statis untuk web server

Latar belakang

  • Clace adalah platform yang dirancang terutama untuk menyediakan aplikasi web bagi alat internal.
  • Clace mengintegrasikan fungsi yang biasanya ditangani secara terpisah oleh web server dan application server.
  • Pada tahap awal pengembangan Clace, penting untuk menentukan bagaimana data aplikasi dan metadata akan disimpan.
  • Menyimpan metadata di database adalah pilihan yang masuk akal, sedangkan file statis biasanya disimpan di file system.

Menggunakan SQLite untuk penyajian file

  • Clace memutuskan untuk menyimpan file aplikasi menggunakan SQLite alih-alih file system.
  • Ini memungkinkan perubahan versi yang atomik, sehingga saat pembaruan beberapa file dapat diproses sekaligus dalam satu transaksi.
  • Saat pembuatan dan pembaruan aplikasi, semua file diunggah ke database SQLite, sedangkan pada mode pengembangan digunakan file system lokal.

Keuntungan menggunakan SQLite

  • Pembaruan transaksional: Banyak file dapat diperbarui sekaligus, dan menjamin tidak ada web app yang rusak selama proses pembaruan.
  • Rollback deployment: Jika terjadi kesalahan, deployment dapat di-rollback, dan rollback transaksi database lebih mudah dibanding membersihkan file system.
  • Deduplikasi file antarversi: Meski file yang sama ada di beberapa versi, isi file hanya disimpan satu kali.
  • Deduplikasi antar aplikasi: Mencegah duplikasi ketika file yang sama ada di beberapa aplikasi.
  • Kemudahan backup: Dengan SQLite, status sistem dapat dibackup dengan mudah.
  • Hashing konten: Saat file diunggah, SHA kontennya disimpan untuk memudahkan caching browser.
  • Kompresi: Isi file disimpan dalam keadaan terkompresi dengan Brotli, dan mudah disimpan dalam berbagai format.

Performa

  • Pendekatan akses database SQLite di Clace memberikan performa yang sangat baik.
  • Tidak ada implementasi setara yang menggunakan file system, sehingga benchmark langsung belum dilakukan.
  • Menurut benchmark dari tim SQLite, pada beberapa jenis beban kerja SQLite dapat memberikan performa yang lebih baik daripada file system.

Dukungan multi-node

  • Saat ini Clace berjalan pada single node.
  • Jika dukungan multi-node ditambahkan, mereka berencana menggunakan database Postgres bersama alih-alih SQLite lokal.
  • Ini dapat menimbulkan masalah latensi, dan mereka berencana menggunakan database SQLite lokal sebagai cache file untuk mengurangi latensi.

Mengapa pendekatan ini tidak umum

  • Alasan sebagian besar web server menggunakan file system adalah karena kemudahannya.
  • File dapat diperbarui menggunakan alat file system, sedangkan jika memakai database diperlukan antarmuka API untuk mengunggah file.

Ringkasan GN⁺

  • Clace adalah platform untuk pengembangan dan deployment alat internal, yang memaksimalkan keuntungan penyimpanan file dengan menggunakan SQLite.
  • Dengan menggunakan SQLite, Clace memperoleh berbagai manfaat seperti pembaruan transaksional, rollback, deduplikasi, dan kemudahan backup.
  • Pendekatan ini tidak umum karena kemudahan file system dan alasan historis, tetapi meningkatkan efisiensi dengan memanfaatkan performa dan fitur SQLite.
  • Proyek dengan fungsi serupa yang direkomendasikan antara lain Firebase dan AWS Lambda.

1 komentar

 
GN⁺ 2024-10-28
Komentar Hacker News
  • Beberapa tahun lalu saya bereksperimen menggunakan SQLite untuk menyajikan file statis, terinspirasi oleh artikel "35% Faster Than The Filesystem". Saya sempat membuat plugin untuk menyajikan file statis dari SQLite lewat Datasette, tetapi tidak terlalu banyak digunakan. Jika ingin menyajikan file dengan SQLite, alat CLI sqlite-utils insert-files bisa berguna.

  • Pembaruan transaksional adalah keuntungan utama karena memungkinkan banyak file diperbarui sekaligus. Baik server menggunakan SQLite maupun file system, itu tidak otomatis mencegah web app rusak selama proses pembaruan. Semua subresource pada halaman harus direferensikan menggunakan hash konten atau nama versi tertentu.

  • Pada 2011/2012, saat bekerja di sebuah perusahaan pengembang game kecil, kami menyimpan semua aset di database sqlite3 dan membuat file pak untuk menyimpan offset file. Ini memungkinkan aset dimuat dengan cepat di game mobile, dan metadata yang disimpan di database memudahkan pencarian file yang mirip.

  • Ada keuntungan karena file bisa di-query menggunakan SQLite alih-alih file system. Query SQL juga bisa digunakan secara type-safe dengan Kysely.

  • Gagasan menyajikan konten statis dengan SQLite belum sepenuhnya matang. Web server modern menggunakan strategi yang optimal untuk menangani file statis. SQLite memang menyediakan dukungan memory-mapped I/O, tetapi tidak cocok untuk situs web berskala besar.

  • SQLite cocok untuk situs web dengan kurang dari 100K hit per hari. Situs web SQLite menangani 400K~500K permintaan HTTP per hari, dan dalam kebanyakan kasus load average-nya di bawah 0.1.

  • CMS static site generator menggunakan database SQLite untuk mengembangkan dan memperbarui situs web, lalu mengekspornya sebagai halaman statis ke file system untuk deployment.

  • Dalam komputasi ilmiah berkinerja tinggi, cara paling fleksibel dan berperforma tinggi untuk mengakses data sering kali adalah database SQLite read-only di ramdisk.

  • Akan menarik untuk membandingkan pendekatan SQLite ini dengan kasus ketika file system dapat menyediakan deduplikasi, snapshot, versioning, dan kompresi. Dengan file system yang canggih, mengganti direktori ke versi baru mungkin lebih mudah.

  • Pendekatan menggunakan database sebagai file system memang punya kelebihan, tetapi bisa menjadi mimpi buruk ketika terjadi masalah.