Veritabanları
Önce erişim deseni, sonra motor
SQL ve NoSQL, PostgreSQL, SQL Server ve Oracle arasındaki gerçek farklar, transaction izolasyonu, MVCC ve kilitler, replikasyon ve şema migration'ları. Hangi veritabanının değil, hangi davranışın gerektiğini sormak.
21 ders 181 dk toplam süre Sertifikan
Bu konunun dersleri şu çalışma yollarında: Veriyle Barışmak (20) , Adım Adım Backend (3) , Üretimde Ayakta Kalmak (2)
Başlangıç
- 1/3 yıldız2/3 yıldız3/3 yıldız SQL mi, NoSQL mi? — Önce Erişim Desenini Yaz NoSQL tek bir şey değil, dört farklı dolap tipi: her biri başka bir soruyu hızlı cevaplar. İlişkisel veritabanı ise çok tabloya birden dokunan işlerde ve önceden bilinmeyen sorularda güçlüdür. Seçimi, veriye nasıl soru soracağın belirler. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Normalizasyon — Aynı Bilgi Neden Tek Yerde Durmalı? ✦ yeni Müşterinin telefonu her havale satırında ayrı yazılıysa, birini değiştirince öbürleri eski kalır; son havaleyi silince müşteri de kaybolur. Normalizasyon her bilgiyi tek yere koyar. Bedeli okurken yapılan bir JOIN'dir. 8 dk
Orta
- 1/3 yıldız2/3 yıldız3/3 yıldız İzolasyon Seviyeleri — Aynı İsim, Üç Farklı Davranış İki kişi aynı anda aynı hesaptan para çekerse biri kaybolabilir, transaction kullansan bile. Veritabanlarının koruma ayarları (izolasyon seviyeleri) aynı adı taşısa da her motorda farklı davranır. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Aynı Sorgu, Üç Lehçe — PostgreSQL, SQL Server, Oracle SQL ortak bir dil, ama her veritabanı onu kendi şivesiyle konuşur. Yazım farkları hemen hata verir ve kolay bulunur. Asıl tehlike sessiz farklardır: Oracle'da boş metin NULL'dır, SQL Server çoğu zaman büyük-küçük harfi ayırmaz. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Doküman Modelleme — Göm mü, Referans mı? Doküman veritabanında en büyük karar şu: ilgili veriyi aynı dokümanın içine mi koyacaksın, ayrı tutup bağlantı mı vereceksin? Birlikte okunan ve sınırlı olan içeri girer; sınırsız büyüyen dışarıda durur. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Bağlantı Havuzu — Büyük Havuz Hızlı Havuz Değildir Veritabanına bağlanmak pahalıdır, bu yüzden bağlantılar bir havuzda hazır bekletilir. Havuzu büyütmek sorunu çözmez, kuyruğu veritabanının içine taşır. Zaman aşımlarının çoğu, bağlantıyı gereğinden uzun tutan koddan gelir. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Sharding ve Shard Anahtarı — Veriyi Bölmenin Tek Önemli Kararı ✦ yeni Sharding veriyi birden çok veritabanına böler. Hangi satırın nereye gideceğini shard anahtarı seçer ve bu seçim hangi sorgunun ucuz, hangisinin her shard'a sorulacağını, yazmaların dağılıp dağılmayacağını belirler. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Sayfalama — OFFSET mi, Keyset mi? ✦ yeni OFFSET ile sayfalama basittir ama derinleştikçe her sayfa daha çok satır okur, veri değişince de satırlar tekrar görünür ya da kaybolur. Keyset sayfalama son görülen satırdan devam eder: her derinlikte aynı ucuzluk, tekrarsız sonuç. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Tam Metin Arama — LIKE '%kira%' Neden Hem Yavaş Hem Eksik? ✦ yeni Metinde kelime aramak için LIKE '%...%' bütün tabloyu okur ve büyük harf, ek ya da Türkçe İ yüzünden sonuç kaçırır. Ters indeks her kelimeyi geçtiği satırlara bağlar; dili bilen bir analizle hem hızlı hem doğru arar. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Pencere Fonksiyonları — Ekstrede Yürüyen Bakiye Nasıl Hesaplanır? ✦ yeni Ekstrede her hareketin yanına o ana kadarki bakiye yazılır. Her satırda öncekileri yeniden toplamak karesel büyür; hepsini çekip Java'da toplamak da son sayfa için bütün geçmişi taşır. SUM() OVER tek geçişte, veritabanında hesaplar. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Tablo Bölümleme — Eski Yılı Silmek Neden Bütün Geceyi Aldı? ✦ yeni Hareket tablosu büyüdükçe hem aylık raporlar hem de eski veriyi silmek ağırlaşır. Tabloyu aylara bölmek, tarihe göre süzen sorguların gereksiz ayları hiç okumamasını ve eski ayların satır satır silinmek yerine bir anda atılmasını sağlar. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Materialized View — Pano Her Açılışta Neden Bütün Günü Yeniden Topluyor? ✦ yeni Şube panosu her açılışta günün bütün hareketlerini yeniden toplar. Materialized view sonucu saklar; okumak hızlanır, ama veri son yenileme kadar günceldir. CONCURRENTLY, yenileme sırasında okuyucuları bekletmez. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Yedek ve Geri Dönüş — WHERE'siz Bir DELETE Kaç Saatlik Veriyi Götürür? ✦ yeni Gece alınan yedek, öğlen yapılan bir hatada yarım günlük veriyi kaybettirir. Replika hatayı da kopyalar. Sürekli arşivlenen WAL ile veritabanı hatadan hemen önceki ana döner; ama yalnızca geri dönüş daha önce denendiyse. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Liquibase — Bir Satırı Düzelttim, Uygulama Neden Açılmadı? ✦ yeni Liquibase her changeset'i bir kez çalıştırır ve checksum'ını kaydeder. Uygulanmış bir changeset'i düzenlemek doğrulamayı kırar; değişiklik yeni bir changeset olur. Öldürülen bir deploy'un bıraktığı kilit ise herkesi bekletir. 9 dk
İleri
- 1/3 yıldız2/3 yıldız3/3 yıldız MVCC ve Kilitler — Eski Satır Sürümleri Nerede Yaşar? Biri bir satırı okurken başkası onu değiştiriyorsa iki yol var: ya okuyan bekler, ya da ona eski kopya gösterilir. Motorlar bu eski kopyaları farklı yerlerde saklar; uzun süren işler de her birinde başka bir sorun çıkarır. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Sorgu Planı ve Join Algoritmaları — Planner Neden Bu Yolu Seçti? Veritabanı iki tabloyu üç farklı yolla birleştirebilir ve hangisini seçeceğine 'kaç satır gelir?' tahminiyle karar verir. Tahmin yanlışsa beş kişilik plan beş yüz kişiye uygulanır. Planı okurken önce tahmini gerçekle karşılaştır. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Replikasyon ve Okuma Replikaları — Yazdım Ama Göremiyorum Veritabanının kopyaları (replikalar) okuma yükünü paylaşır, ama asıl veritabanının biraz gerisinden gelir. Kullanıcı kendi yaptığı değişikliği göremeyebilir; asıl makine çökerse son yazılanlar kaybolabilir. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Tutarlılık Seviyeleri ve Quorum — CAP'ı Doğru Okumak Verinin birkaç kopyası varsa her yazma ve okumada 'kaç kopya cevap versin?' diye seçersin. Yazdığın ve okuduğun kopyalar kesişiyorsa son yazılanı görürsün. Daha sıkı seçim daha tutarlıdır, ama arızada daha kolay reddeder. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Kesintisiz Şema Değişikliği — Genişlet, Taşı, Daralt Yeni sürüm yavaş yavaş yayılırken bir süre eski ve yeni kod aynı tabloya bakar. Bir sütunun adını tek hamlede değiştirmek eski kodu düşürür. Değişikliği küçük, geri alınabilir adımlara bölmek kesintiyi önler. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız LSM Ağacı — Yazmayı Ekleyerek Hızlanan Veritabanları ✦ yeni B-tree her değişikliği diskteki yerinde günceller. LSM ağacı değişiklikleri bellekte toplar, dolunca diske sıralı bir dosya olarak yazar. Yazma ucuzlar; okumanın bedelini Bloom filtresi ve sıkıştırma öder. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız SQL Server'da Kilit Yükseltme — Gün Sonu İşi Neden Müşteriyi Bekletti? ✦ yeni SQL Server, tek bir ifade bir tabloda çok fazla satır kilidi aldığında bunları tek bir tablo kilidine çevirir. Böylece dokunulmayan satırlar da kilitlenir. Güncellemeyi eşiğin altında parçalara bölmek, tabloyu başkalarına açık tutar. 9 dk