SQL mi, NoSQL mi? — Önce Erişim Desenini Yaz
30 saniyede özet
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.
Ekip sipariş sistemini “şema esnek olsun” diye bir doküman veritabanında kurdu. Altı ay sonra finans, siparişleri müşteri ve ürünle birleştiren raporlar istedi. Şimdi her gece veriyi bir SQL veritabanına kopyalayan bir iş çalışıyor.
Adım adım oku
- Siparişi müşteri ve ürünle birleştiren rapor, tablolar ve anahtarlarla çalışan ilişkisel veritabanının işidir.
- Bir siparişi bütün kalemleriyle tek parça getirmek, doküman veritabanının güçlü olduğu yerdir.
- Bir oturumu anahtarıyla anında bulmak anahtar-değer deposunun, arkadaşın arkadaşını bulmak graf veritabanının işidir.
- NoSQL tek bir şey değil, dört ayrı dolap. Önce en çok soracağın soruyu bil, dolabı ona göre seç.
-
Bayt: Şema esnek olsun diye sipariş sistemini doküman veritabanında kurduk.
-
Sen: Altı ay sonra ne oldu?
-
Bayt: Finans siparişi müşteri ve ürünle birleştiren raporlar istedi. Şimdi her gece veriyi SQL'e kopyalıyoruz!
-
Bayt: Veritabanı seçmek, en çok hangi soruyu soracağını bilmektir.
İlişkisel model neyi garanti eder?
İlişkisel veritabanı veriyi tablolara böler ve tabloları anahtarlarla birbirine bağlar. Aynı bilginin tek yerde durmasına normalizasyonAynı bilginin veritabanında tek bir yerde durması için veriyi tablolara bölmek. Müşterinin adı her siparişte değil, müşteri tablosunda bir kez yazılır.Sözlükte gör → denir.
İki güçlü yanı var. Birincisi ACIDTransaction'ın dört garantisi: ya hepsi ya hiçbiri (atomicity), kurallar korunur (consistency), eşzamanlı işler birbirini bozmaz (isolation), onaylanan kalır (durability).Sözlükte gör → transaction: sipariş ve stok birlikte değişir ya da hiçbiri değişmez. İkincisi SQL: yarın sorulacak ve bugün bilinmeyen bir soruyu da cevaplar.
PostgreSQL, SQL Server ve Oracle bu modelin üç motorudur. Farkları gerçektir ve sonraki derslerin konusu; ama modelleri aynıdır.
Kafam karıştı, daha basit anlat
İlişkisel veritabanı, her bilgiyi tek bir yerde tutan düzenli bir dolap gibidir. Müşterinin adresi bir kez yazılır, siparişler ona yalnızca işaret eder.
İlişkisel bir veritabanını, NoSQL modellerinin çoğundan ayıran iki güçlü yan hangisi?
NoSQL tek bir şey değil
“NoSQL” dört farklı modelin ortak adıdır. Ortak noktaları, belirli bir erişim desenini ucuz yapmak için ilişkisel modelin bir kısmından vazgeçmeleridir.
| Model | Örnek | Ucuz yaptığı şey |
|---|---|---|
| Doküman | MongoDB | Birlikte okunan veriyi tek dokümanda getirmek |
| Key-value | Redis | Anahtarla çok hızlı okuma ve yazma |
| Wide-column | Cassandra | Çok yüksek yazma hızı, yatay büyüme |
| Graph | Neo4j | İlişkiler üzerinde çok adımlı gezinme |
Kafam karıştı, daha basit anlat
NoSQL tek bir veritabanı değil, dört farklı dolap türünün ortak adıdır. Her biri belli bir işi hızlandırmak için başka bir kolaylıktan vazgeçer.
Her ihtiyacı, onu en doğal karşılayan veri modeline yerleştir.
Cassandra'da `orders_by_customer` tablosu var. Ürün ekibi şimdi "bir ürünü alan tüm müşteriler" sorusunu soruyor. Wide-column modelinde tipik cevap ne?
Kendin gör
İş yükü mü, veritabanı mı — hangisi önce seçilir?
Tohum 164447- Siparişi oluştur ve stoğu düş — ikisi birlikte ya da hiçbiri
- Finans ekibinin ad-hoc raporları: JOIN, GROUP BY, önceden bilinmeyen sorgular
- Siparişi id ile getir
Şu an ne oldu?
Sipariş ve stok için Doküman (MongoDB)
İş yükünün erişim desenleri tek tek bu veri modeline karşı denenecek.
Görevler0/3
En az iki ihtiyacın modelle kavga ettiği bir seçim yapaçık
İpucu
Sipariş raporlarını anahtar-değer deposunda düşün.
Değişken özellikli kataloğu ilişkisel modelde doğal çalıştıraçık
İpucu
Esnek şema tek başına NoSQL gerektirir mi?
Üç adımlık arkadaş önerisini doğal çalıştıran modeli bulaçık
İpucu
İlişkinin kendisinin veri olduğu model.
Olay günlüğü (0)
Henüz olay yok. Oynat veya adımla.
- Varsayılanla oynat. Siparişler dokümanda: raporlar ve çok tablolu işlem bedelli.
- Veri modelini key-value yap. İki ihtiyaç modelle kavga ediyor.
- Ürün kataloğu ve ilişkisel model seç. Değişken özellikler de doğal.
- Arkadaş önerisini dene. Yalnızca graph üç adımı doğal yapıyor.
- IoT ölçümlerinde wide-column ile ilişkiseli karşılaştır.
Simülatörde sipariş iş yükü key-value deposuyla iki ihtiyaçta 'modelle kavga' verdi. Hangi ikisi ve neden?
Hangi soruyu soracaksın?
Katalogda her kategorinin farklı özellikleri var: ekran boyutu, kumaş, ISBN. Bu, doküman veritabanı gerektirir mi? Cevabı göster
Gerektirmez. Ortak alanlar kolonda, değişen alanlar bir JSON kolonunda durabilir. PostgreSQL’in JSONB tipi indekslenebilir; SQL Server ve Oracle da JSON’u destekler.
“Şemasız” veri yoktur. Şema veritabanında değilse uygulama kodunda yaşar; buna schema-on-readVerinin biçimini veritabanının değil, veriyi okuyan uygulamanın bilmesi. Şema ortadan kalkmaz; koda taşınır ve eski biçimler yenileriyle yan yana birikir.Sözlükte gör → denir. Kontrol eden kimse olmadığı için eski ve yeni biçimler yan yana birikir.
Karar için önce soruları yaz: hangi veri birlikte okunuyor, neyin atomik değişmesi gerekiyor, hangi sorgular önceden bilinmiyor? Veritabanı, bu listeye en az kavga eden modeldir.
Bir bankanın ödeme ekibi bu listeyi yazsa nasıl görünürdü, merak ettin mi? Aşağıda önce sorular, sonra her soruya uyan dolap var.
Derinleş · Ödeme ekibi: önce sorular, sonra dolaplar 4 dosya · ~63 satır · ilk okumada atlayabilirsin
Kafam karıştı, daha basit anlat
Şemasız veri diye bir şey yoktur. Kuralı veritabanı tutmuyorsa, kodun tutmak zorundadır, ve kod bunu unutabilir.
"MongoDB şemasız, o yüzden şema değişikliği derdimiz olmayacak." Bu cümledeki eksik ne?
Tuzaklar
“NoSQL ölçeklenir, SQL ölçeklenmez.” İlişkisel veritabanları çok büyük yükleri taşır; yatay büyümenin bedeli ise transaction ve sorgu esnekliğinden verilen tavizdir.
Doküman içinde kopya veri. Müşteri adı yüz siparişe gömülüyse, ad değiştiğinde yüz dokümanı güncellemek gerekir.
Cassandra’da “sonra sorgularız”. Tablolar sorguya göre tasarlanır; yeni bir soru çoğu zaman yeni bir tablo demektir.
İki veritabanı, iki kat işletme. Her yeni motor yedekleme, izleme ve nöbet ister.
Siparişler doküman veritabanında, müşteri adı her siparişin içine gömülü. Müşteri adını değiştirdi. Ne olur?
Kendini sına
NoSQL tek bir veritabanı türünün adıdır.
Bu durumda hangi veri katmanıyla başlarsın?
Aklında kalacak üç şey
- 1 NoSQL dört ayrı modelin ortak adıdır: doküman, anahtar-değer, geniş sütun ve graf. Her biri farklı bir soruyu ucuz yapar.
- 2 İlişkisel model, birden çok tabloya dokunan işlerde ve önceden bilinmeyen sorgularda güçlüdür. PostgreSQL, SQL Server ve Oracle bu modelin üç motorudur.
- 3 Esnek şema tek başına NoSQL sebebi değildir: şema bu kez uygulama kodunda yaşar, ilişkisel veritabanları da JSON sütunlarını destekler.
5 kart sonraki derste seni bekliyor
Bu dersin üstüne kurulanlar
Bunlar bu dersi temel alıyor; hazır olduğunda devam edebilirsin.
- VeritabanlarıAynı Sorgu, Üç Lehçe — PostgreSQL, SQL Server, OracleAynı SQL bir veritabanında çalışıyor, ötekinde hata veriyor. Hangisi haklı?Derse git
- VeritabanlarıDoküman Modelleme — Göm mü, Referans mı?Siparişin kalemlerini siparişin içine mi koymalı, ayrı mı tutmalı?Derse git
- VeritabanlarıNormalizasyon — Aynı Bilgi Neden Tek Yerde Durmalı?Müşterinin telefonunu güncelledin. Üç havaleden ikisinde hâlâ eski numara yazıyor. Nasıl?Derse git