Cara menyalin basis data SQLite antarkomputer dengan lebih cepat
(alexwlchan.net)Pendahuluan
- Jika basis data SQLite disalin langsung dengan rsync, ukuran file bisa membengkak karena indeks dan faktor lain, sehingga menjadi lambat dan kurang andal.
- Karena itu, diajukan metode menggunakan
.dumpuntuk mengompresi dan memulihkan dalam format berbasis teks.
Pembahasan
-
Perintah
.dumpmengekspor seluruh DB sebagai teks SQL, dan indeks digantikan oleh satu baris perintah sehingga ukuran file menjadi lebih kecil.sqlite3 my_database.db .dump > my_database.db.txt -
File teks juga bisa diperkecil lagi dengan kompresi gzip:
sqlite3 my_database.db .dump | gzip -c > my_database.db.txt.gz -
Alurnya diubah menjadi membuat versi terkompresi di server, menyalinnya ke lokal, lalu memulihkannya:
ssh username@server "sqlite3 db.db .dump | gzip -c > db.txt.gz" rsync --progress username@server:db.txt.gz . gunzip db.txt.gz cat db.txt | sqlite3 restored.db -
File DB asli 3.4GB → dump teks 1.3GB → hasil kompresi gzip 240MB, berkurang sekitar 14 kali.
-
Metode rsync lama bisa memunculkan error
database disk image is malformedjika DB berubah saat transfer berlangsung. -
Metode dump teks tidak memiliki risiko perubahan isi setelah proses penyalinan dimulai, sehingga memungkinkan backup yang konsisten.
Kesimpulan
- Metode
.dump+ kompresi + pemulihan meningkatkan kecepatan dan keandalan saat mentransfer SQLite berukuran besar. - Ini sangat efektif terutama untuk DB dengan banyak indeks, serta dapat mengurangi kemungkinan kegagalan transfer atau kerusakan.
- Jika Anda sering menangani SQLite berukuran besar, ini adalah optimasi praktis yang layak diterapkan.
2 komentar
Saya penasaran dengan latar belakang mengapa pekerjaan seperti ini diperlukan.
Di artikel aslinya, ini disebut untuk backup & analisis. Mungkin yang dimaksud adalah ingin menganalisisnya secara lokal dengan sesuatu seperti DuckDB.