Giriş
- SQLite veritabanını doğrudan
rsyncile kopyalamak, indeksler gibi nedenlerle dosya boyutunu büyüttüğü için yavaş ve kararsız olabilir. - Bu nedenle,
.dumpkullanarak metin tabanlı sıkıştırma ve geri yükleme yöntemi öneriliyor.
Ana bölüm
-
.dumpkomutu tüm veritabanını SQL metni olarak dışa aktarır; indeksler ise tek satırlık komutlara dönüştüğü için dosya boyutu küçülür.sqlite3 my_database.db .dump > my_database.db.txt -
Metin dosyası,
gzipile sıkıştırıldığında ek boyut tasarrufu sağlayabilir:sqlite3 my_database.db .dump | gzip -c > my_database.db.txt.gz -
Süreç, sunucuda sıkıştırılmış çıktıyı üretip bunu yerel ortama kopyaladıktan sonra geri yükleme yapacak şekilde değiştiriliyor:
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 -
Özgün veritabanı dosyası 3.4GB → dump metni 1.3GB →
gzipile sıkıştırılmış sürüm 240MB; yani yaklaşık 14 kat küçülme. -
Mevcut
rsyncyöntemi, aktarım sırasında veritabanı değişirsedatabase disk image is malformedhatasına yol açabilir. -
Metin dump yöntemi ise kopyalama başladıktan sonra içeriğin değişmesi riskini ortadan kaldırdığı için tutarlı bir yedek alınmasını sağlar.
Sonuç
.dump+ sıkıştırma + geri yükleme yaklaşımı, büyük SQLite aktarımlarında hem hız hem de kararlılığı iyileştirir.- Özellikle çok sayıda indeks içeren veritabanlarında etkilidir ve aktarım hatası ya da bozulma olasılığını azaltabilir.
- Büyük SQLite veritabanlarıyla sık çalışıyorsanız uygulanmaya değer pratik bir optimizasyon yöntemidir.
2 yorum
Bunun neden gerekli olduğuna dair arka planı merak ediyorum.
Orijinal metinde bunun yedekleme ve analiz amaçlı olduğu söyleniyor. Muhtemelen verileri yerelde
duckdbgibi bir araçla analiz etmek istiyorlardı.