22 puan yazan baeba 2025-05-02 | 2 yorum | WhatsApp'ta paylaş

Giriş

  • SQLite veritabanını doğrudan rsync ile kopyalamak, indeksler gibi nedenlerle dosya boyutunu büyüttüğü için yavaş ve kararsız olabilir.
  • Bu nedenle, .dump kullanarak metin tabanlı sıkıştırma ve geri yükleme yöntemi öneriliyor.

Ana bölüm

  • .dump komutu 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ı, gzip ile 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 → gzip ile sıkıştırılmış sürüm 240MB; yani yaklaşık 14 kat küçülme.

  • Mevcut rsync yöntemi, aktarım sırasında veritabanı değişirse database disk image is malformed hatası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

 
ng0301 2025-05-02

Bunun neden gerekli olduğuna dair arka planı merak ediyorum.

 
winterjung 2025-05-02

Orijinal metinde bunun yedekleme ve analiz amaçlı olduğu söyleniyor. Muhtemelen verileri yerelde duckdb gibi bir araçla analiz etmek istiyorlardı.