1 poin oleh GN⁺ 2025-05-02 | 1 komentar | Bagikan ke WhatsApp
  • Penjelasan tentang cara yang lebih cepat untuk menyalin database SQLite antar komputer
  • Indeks database adalah penyebab utama yang memperlambat kecepatan penyalinan
  • Anda dapat membuang database ke file teks menggunakan perintah .dump milik SQLite
  • File teks lebih kecil daripada database asli, dan akan menjadi lebih kecil lagi jika dikompresi
  • Metode ini memungkinkan penyalinan database berukuran besar dengan lebih cepat dan lebih andal

Cara Menyalin Database SQLite antar Komputer dengan Lebih Cepat

  • Penjelasan tentang cara menyalin database SQLite yang disimpan di server jarak jauh ke komputer lokal
  • Pada proyek awal, penyalinan sederhana bisa dilakukan dengan perintah rsync
  • Saat database membesar, kecepatan penyalinan menurun dan keandalannya juga berkurang

Membuat dump database menjadi file teks

  • SQLite dapat membuang database ke file teks dengan perintah .dump
  • File teks ini terdiri dari pernyataan SQL, dan bisa lebih kecil daripada database asli
  • Indeks dipadatkan menjadi satu baris dalam file teks, sehingga dapat menghemat ruang penyimpanan

Menghemat ruang penyimpanan dengan kompresi

  • File teks akan menjadi lebih kecil jika dikompresi
  • Sebagai contoh, jika database SQLite asli berukuran 3.4GB, file teks yang dikompresi dengan gzip dapat menyusut menjadi 240MB
  • Mengunduh file teks terkompresi membuat penyalinan database menjadi jauh lebih cepat

Perintah ssh+rsync yang baru

  • Membuat file teks terkompresi dengan gzip di server, menyalinnya ke komputer lokal, lalu membangun ulang database
  • Membuat file teks terkompresi di server: ssh username@server "sqlite3 my_remote_database.db .dump | gzip -c > my_remote_database.db.txt.gz"
  • Menyalin file ke komputer lokal: rsync --progress username@server:my_remote_database.db.txt.gz my_local_database.db.txt.gz
  • Lakukan dekompresi dan bangun ulang database, lalu hapus file lokal

Dump database adalah sumber penyalinan yang andal

  • Jika ada pembaruan saat database sedang disalin, rsync dapat menghasilkan file database yang rusak
  • Masalah ini dapat diatasi dengan membuat dump teks sebagai sumber penyalinan yang stabil
  • Metode ini menghemat waktu saat menangani database besar serta membuat pengunduhan lebih cepat dan lebih andal

1 komentar

 
GN⁺ 2025-05-02
Komentar Hacker News
  • SQLite menyediakan alat resmi. Alat ini bekerja pada tingkat halaman, dan replika mengirim hash kriptografis tiap halaman ke sisi sumber, lalu sumber mengirim ulang seluruh isi halaman yang hashnya tidak cocok
  • Menyalin file database yang sedang berjalan dapat menyebabkan kerusakan. Untuk replikasi yang aman, Litestream dapat digunakan
  • Salah satu cara menyalin database antar komputer adalah mengirim lingkaran dan mengabaikan sisanya
    • rsync inkremental memang lebih cepat, tetapi tidak setuju dengan klaim bahwa mengirim pernyataan SQL lebih cepat daripada mengirim database. Pernyataan SQL harus dijalankan, lalu dilakukan optimasi dan vacuum
    • Ada skenario di mana database harus "dibangun ulang secara inkremental" dari file CSV. Membuat ulang database dari nol memang lebih optimal, tetapi hanya untuk menjalankan batch insert ke database kosong di memori saja butuh 30 menit
  • Utilitas sqlite_rsync yang baru dirilis menggunakan versi algoritma rsync yang dioptimalkan untuk struktur internal database SQLite. Alat ini membandingkan halaman data internal secara efisien dan hanya menyinkronkan halaman yang berubah atau hilang
  • Menyimpan sebagai file teks tidak efisien. Gunakan VACUUM INTO untuk menyimpan database sqlite
    • Perintah VACUUM adalah alternatif untuk API backup, dan hasil database backup berukuran minimum sehingga I/O sistem file berkurang
  • Mengejutkan karena fitur kompresi yang disediakan rsync tidak digunakan. Mengompres dengan gzip terlebih dahulu lalu mentransfernya bisa jadi lebih cepat
  • Di DuckDB, data bisa diekspor ke Parquet untuk mengurangi ukuran data. Transfer dan pemuatannya lebih cepat
  • SQLite menyediakan session extension untuk melacak perubahan pada tabel dan membuat changeset/patchset yang dapat digunakan untuk menambal versi sebelumnya dari database SQLite
  • Dapat dioptimalkan dengan opsi --rsyncable pada gzip. Opsi ini sedikit mengurangi rasio kompresi, tetapi melokalkan perbedaan agar tidak memengaruhi seluruh output terkompresi
    • Anda bisa melewati kompresi pada output dump dan membiarkan rsync menghitung perbedaan antara dump tak terkompresi sebelumnya dan dump saat ini, lalu membiarkan rsync mengompresi changeset yang dikirim melalui jaringan
  • Ada pengalaman pada 2008 saat harus mengirim backup ke beberapa mesin menggunakan Postgres. Jaringan menjadi jenuh, sehingga udpcast digunakan untuk mengirim backup ke semua tujuan sekaligus