Yapay Zekayla Oluşturduğunuz Uygulama Gerçekten Ne Zaman Bir Veritabanına İhtiyaç Duyar (Ve Ne Zaman Duymaz)
Bir veritabanı; iki kişi uygulamanızı aynı anda düzenlemeye başladığında, veri arttıkça uygulama yavaşladığında ya da kayıtları birden fazla koşula göre filtrelemeniz gerektiğinde gerekli hale gelir — dosyalar bunu güvenli şekilde kaldıramaz.
Bir Veritabanı Aslında Ne İşe Yarar?
Bir veritabanının tek işi, aynı uygulamayı kullanan iki kişinin birbirinin çalışmasının üzerine yanlışlıkla yazmasını ya da onu yok etmesini engellemektir — hız, yapı ve karmaşık arama, sadece bu tek problemi çözmenin yan etkileridir.
Uygulamanızı yapay zekayla oluşturdunuz. Çalışıyor. Verileri dosyalara ya da bir e-tabloya kaydediyor. Her şey yolunda gibi hissettiriyor.
Sonra şu iki şeyden biri oluyor:
- Biri uygulamayı her kullandığında uygulama biraz daha yavaşlıyor.
- İki kullanıcı aynı anda uygulamayı kullanmaya çalışıyor ve bir şeyler bozuluyor.
Bu arızaların ikisi de iş işten geçene kadar fark edilmez. İkisi de kılık değiştirmiş birer veritabanı sorunudur.
Hâlâ dosya ya da e-tablo kullanıyorsanız, muhtemelen henüz bir veritabanınız yok. Bu gayet normal. Ama yakında bir veritabanına ihtiyaç duyacağınızın uyarı işaretlerini bilmelisiniz.
Ne Zaman Veritabanı Yerine Sadece Dosya Kullanmak Sorun Olmaz?
Uygulamayı kullanan tek kişi sizseniz ve değişiklikler nadirse dosyalar gayet iyi çalışır — bütün mesele bu.
Bir serbest çalışanın portföy sitesi mi? Dosyalar mükemmel. Kişisel bir gider takip uygulaması mı? Dosyalar gayet yeterli. Tek kullanıcılı bir hobi projesi mi? İşi gereksiz yere karmaşıklaştırmayın.
Dosyaların işe yaradığına dair gerçek işaretler:
- Uygulamayı aynı anda sadece bir kişi kullanıyor (ya da diğerleri çalışırken kullanıcılar çevrimdışı).
- Veriyi nadiren güncelliyorsunuz (günde bir, haftada bir, ayda bir kez).
- Son 30 saniyelik çalışmayı kaybetmek kabul edilebilir (builder’ınız tekrar deneyebilir).
- Veri dosyası e-postayla gönderilebilecek kadar küçük (10 MB’ın altında).
Bu dördü de geçerliyse, dosyalarla devam edin. Cidden. Bu sadelik bir kısıtlama değil, bir özelliktir.
Yapay Zekayla Oluşturduğum Uygulama Neden Yavaşlıyor?
Uygulamanız yavaşlıyor çünkü kaydettiği dosya büyümeye devam ediyor ve builder’ınız herhangi bir şeyi değiştirmesi gerektiğinde dosyanın tamamını belleğe yüklüyor — bu maliyet başta neredeyse fark edilmezken dosya büyüdükçe can sıkıcı hale geliyor.
Bunu bir his olarak fark edersiniz. Uygulamanız eskisinden daha yavaş hissettirir. Bir düğmeye tıklamak bir saniye daha uzun sürer. Arama gözle görülür şekilde yavaşlar. Kodu değiştirmediniz — peki neden yavaşladı? İşte örüntü:
- Uygulama veri dosyasının tamamını yükler (100 satır, hızlı).
- Kullanıcı bir kayıt ekler (şimdi 101 satır).
- Uygulama, kontrol etmek için dosyanın tamamını yeniden okur (hâlâ hızlı).
- 2.000 kayıttan sonra dosyayı okumak 2 saniye sürer.
- 10.000 kayıttan sonra bu süre 20 saniyeye çıkar.
Bu üstel bir artış değil, ama yaklaşık 5.000 kayıtta fark edilir hale gelir ve 20.000 civarında can sıkıcı olur.
İlk çözüm (veritabanı eklemeden önce): Builder’ınızdan veriyi talep üzerine yüklemesini isteyin. Sadece ekranda gösterdiğiniz kayıtları ya da sadece gösterdiğiniz sütunları yükleyin. Birçok uygulama, neyi yüklediği konusunda daha akıllı davranarak dosyalarla yoluna devam edebilir.
Ne zaman veritabanına geçmeli: 50.000’den fazla veri kaydınız varsa ya da yükleme optimizasyonundan sonra bile yavaşlık devam ediyorsa.
İki Kişi Aynı Anda Kullandığında Uygulamam Neden Veri Kaybetti?
Bu, iki kişinin aynı dosyayı aynı anda düzenleyebilmesinden ve uygulamanın bunu fark etmesinin hiçbir yolu olmamasından kaynaklanır — kim daha sonra kaydederse o kazanır ve ilk kişinin değişiklikleri sessizce yok olur. Buna “çakışan yazma” (conflicting write) denir ve klasik bir veri kaybı hatasıdır.
İki kişi de ekranında kendi değişikliklerini görür. İkisi de “kaydet”e tıklar. Şu durumlardan biri yaşanıyorsa bunun olduğunu anlarsınız:
- Kullanıcılar zaman zaman kayıp veri bildiriyor (özellikle birden fazla kişi aynı anda uygulamadaysa).
- Kullanıcılar, başka kişilerin değişikliklerinin açıklamasız şekilde “geri alındığını” gördüklerini bildiriyor.
- İki kullanıcı aynı kaydı düzenliyor ve bir kişinin düzenlemeleri kayboluyor.
- “Yemin ederim bunu dün eklemiştim, şimdi yok oldu” gibi mesajlar alıyorsunuz.
Bu uygulamanın hatası değil. Bu, dosyaların çalışma şeklinden kaynaklanan bir kısıtlama. Bunu bir veritabanı olmadan iyi bir şekilde çözmenin yolu yok.
Ne zaman veritabanına geçmeli: Henüz bir arıza yaşanmamış olsa bile, iki kişi uygulamayı aynı anda kullanmaya başladığı an.
Uygulamam Dosyalarla Neden Karmaşık Aramaları Kaldıramıyor?
Çünkü dosyalarla çalışırken builder’ınız tek bir soru sorup tek bir cevap almak yerine, ilgili her veri kümesini tek tek elle yüklemek ve filtrelemek zorunda kalır — bir veritabanı aynı işi tek bir sorguyla milisaniyeler içinde yapar.
“Kaliforniya’da yaşayan ve son bir haftadır iletişime geçilmemiş müşterilerin ödenmemiş tüm faturalarını” bulmak istediğinizi varsayalım. Dosyalarla builder’ınızın yapması gereken şu:
- Tüm faturaları yükle.
- unpaid = true olanları filtrele.
- Tüm müşterileri yükle ve ID’ye göre eşleştir.
- state = “CA” olanları filtrele.
- Tüm iletişim kayıtlarını yükle ve müşteri ID’sine göre eşleştir.
- date > bir hafta önce olanları filtrele.
Bir veritabanıyla tek bir sorgu yazarsınız ve bütün bunlar milisaniyeler içinde gerçekleşir.
Ne zaman veritabanına geçmeli: Builder’ınız “bu soruyu cevaplamak için özel kod yazmam gerekir” dediğinde. Ya da uygulamanın size filtrelenmiş veriyi göstermek için çok fazla iş yaptığını fark ettiğinizde.
Bir Veritabanına İhtiyacım Olduğunda Builder’ıma Ne Söylemeliyim?
Neyin yanlış gittiğini açıkça söyleyin ve bir plan isteyin — şöyle bir şey: “Uygulama [yavaşlıyor/veri kaybı yaşadı/daha karmaşık aramalara ihtiyaç duyuyor]. Bence bir veritabanı eklemeliyiz. Bu ne kadar büyük bir değişiklik olur?”
Çoğu builder, küçük uygulamalarda bir uygulamayı dosyalardan veritabanına 1-2 günde, daha büyük uygulamalarda ise birkaç günde taşıyabilir. Süreç şöyle işler:
- Uygulamayı büyük ölçüde aynı tutar (kullanıcılar büyük bir değişiklik görmez).
- Bir veritabanı arka ucunu bağlar (kodun geri kalanına hâlâ dosya gibi görünür, ama altta bir veritabanı vardır).
- Her şeyi didik didik test eder (çünkü veri taşımak hassas bir işlemdir).
- Emin olana kadar bir hafta boyunca ikisini paralel çalıştırır.
Builder şunları sorabilir:
- “PostgreSQL mi, MySQL mi, yoksa başka bir şey mi kullanmalıyız?”
- Cevabınız: “Sen hangisinde daha rahatsan onu kullan. Aradaki farkı bilmiyorum ama sana güveniyorum.”
- “Bu 3 gün sürecek. Buna değer mi?”
- Cevabınız: “Zaten taşımamız gerekiyorsa, veri daha da artmadan şimdi yapmak daha sonra yapmaktan iyidir.”
- “Eski veriyi taşıyalım mı?”
- Cevabınız: “Evet, 100 kayıttan azsa sıfırdan başlamak da sorun değil.”
Veritabanlarını Kendim Anlamam Gerekir mi?
Hayır — veritabanının ne olduğunu bilmenize, SQL öğrenmenize ya da PostgreSQL ile MySQL’i karşılaştırmanıza gerek yok. Builder’ınıza söylemeniz gereken tek şey şu: “İki kişi, birbirinin çalışmasını kaybetmeden uygulamayı aynı anda kullanabilsin.”
Hepsi bu kadar. Veritabanını builder’ınız seçebilir. SQLite gibi basit bir seçenek (10’dan az eşzamanlı kullanıcısı olan kişisel ya da ekip uygulamaları için) ya da PostgreSQL (daha büyük her şey için) — ikisi de bu işi görür.
Uygulamamın Bir Veritabanına İhtiyacı Olduğunu Nasıl Anlarım?
Şu dört maddeden hangilerinin sizin için geçerli olduğunu işaretleyin — iki veya daha fazla kutu işaretliyse, artık bir veritabanı eklemenin zamanı gelmiş demektir.
- Yavaşlık: Uygulama 3 ay önce daha hızlı hissettiriyordu, şimdi daha yavaş. Veri dosyası 20 MB’ın üzerinde ya da 10.000’den fazla kayıt içeriyor.
- Veri kaybı: Birinin değişiklikleri kayboldu ya da birden fazla kullanıcı kayıp düzenlemeler bildirdi.
- Karmaşıklık: “Bana Y’ye göre filtrelenmiş X’i göster” gibi sorular sormak istiyorsunuz ve builder “bunu dosyalarla yapmak zor” diyor.
- Kullanıcılar: Birden fazla kişi uygulamayı aynı anda kullanıyor (ara sıra bile olsa).
İki ya da daha fazla kutu işaretlediyseniz, uygulamanız bir veritabanına hazır demektir.
Hiç kutu işaretlemediyseniz, dosyalarınız gayet iyi. Onları koruyun. Sadelik değerlidir.
Bir kutu işaretlediyseniz, builder’ınıza sorun: “Bununla 6 ay daha yaşayabilecek kadar hızlı mı?” Cevap evetse bekleyin. Hayırsa hemen taşıyın.