
Julia Evans, bir Django sitesi arkasında SQLite çalıştırmayı anlatıyor
Beş saniye süren tam metin aramasını ANALYZE'in nasıl düzelttiğini, satır temizliğinin worker'ları nasıl düşürdüğünü ve restic ile Litestream tabanlı yedekleme düzenini aktarıyor.
Julia Evans, bir Django sitesinin arkasında SQLite çalıştırma üzerine notlarını yayımladı; bu, gömülü veritabanını kullandığı dördüncü web projesi. Evans'a göre küçük bir site için üretimde SQLite kullanma tavsiyesi yerinde, ancak deneyim, blog yazılarının genelde atladığı bir noktanın altını çiziyor: SQLite yine de bir veritabanıdır, veritabanları karmaşıktır ve işletmek başlı başına bir beceridir.
ANALYZE ve beş saniyelik sorgu
İlk sürpriz, SQLite'ın FTS5 uzantısıyla 4.000 satırlık bir tabloda çalıştırılan tam metin aramasının beş saniye sürmesiydi. ANALYZE çalıştırmak süreyi hemen yaklaşık 0,05 saniyeye indirdi. ANALYZE, sorgu planlayıcısının daha iyi bir plan seçmesi için istatistik üretir; Evans ilk planda tam olarak neyin yanlış olduğunu hâlâ bilmediğini ve kazara karesel bir durumdan şüphelendiğini yazıyor. SQLite'ı 2022'den beri web projelerinde kullanıyor ve ANALYZE'in varlığını ancak şimdi öğrendi.
Satır temizlemek göründüğünden zor
İstenmeyen satırları silmek — örneğin django-tasks-db'nin bıraktığı tamamlanmış görevler — birden fazla kez sorun çıkardı. Temizlik komutu beş saniyeden uzun sürdüğünde başka bir worker veritabanına yazmayı dener, ayarlı beş saniyelik zaman aşımına takılır, çöker ve sanal makineyi de birlikte düşürür. Şimdilik çözüm, hiçbir sorgunun sınırı aşmaması için temizliği küçük gruplar hâlinde yapmak. Evans'a göre bu olay, insanın neden Postgres gibi aynı anda birden çok yazara izin veren bir veritabanı isteyebileceğini daha iyi anlamasını sağladı; ileride temizlikler için planlı bakım kesintisi ayırabilir.
Yedekleme: restic ve Litestream
Mevcut rutin veritabanını VACUUM INTO ile dışa aktarıyor, sıkıştırıyor ve restic ile S3'e gönderiyor — önce depoyu açıyor, çünkü öldürülen bir yedekleme kilit bırakıyor, sonra eski anlık görüntüleri temizliyor. Son zamanlarda artımlı çoğaltma için Litestream'i test etmeye başladı; 400 saatlik saklama penceresiyle, kısmen restic çalışmalarının bazen bellek yetersizliğinden öldürülmesi yüzünden. Yedekler bir dead man's switch ile izleniyor, ancak Evans geri yüklemeyi hiç test etmediğini kabul ediyor.
Performans konusunda Evans bilinçli olarak rahat: sorguları Django ORM üzerinden yazıyor ve yavaş planları izlemiyor; veritabanı yaklaşık 10.000 satır ve küçük kalmasını bekliyor. Tabloların birlikte yaşaması gerekmediğinde onları birkaç dosyaya bölüyor — bu yaklaşımı dört yıldır, 2022'den beri SQLite üzerinde çalışan Mess with DNS'te de kullandı.
SiTech — AI destekli web geliştirme
Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.