NoSQL veritabanı (MongoDB, Cassandra) kullanımı nasıl öğrenilir?
NoSQL veritabanı türlerini, hangi işte hangisinin seçileceğini, veri modellemeyi ve MongoDB, Redis, Cassandra ile öğrenme sırasını örneklerle okuyun.
NoSQL nedir, neden kullanılır?
NoSQL, ilişkisel (SQL) veritabanları dışındaki veri depolama yaklaşımlarının genel adıdır. Sabit tablo ve sütun şeması yerine esnek veri yapıları kullanır ve çoğu yatay ölçeklenmeye, yani yükü birden fazla makineye dağıtmaya uygun tasarlanmıştır.
Kullanım nedenleri tipik olarak şunlardır: veri yapısı sık değişiyorsa, çok yüksek yazma ya da okuma hızı gerekiyorsa, veri hiyerarşik ya da bağlantılıysa, büyük hacimde dağıtık depolama gerekiyorsa. NoSQL, SQL'in yerine geçen bir teknoloji değildir; farklı problemlere uyan farklı bir araçtır. Birçok sistem ikisini birlikte kullanır.
Temel NoSQL türleri
NoSQL öğrenirken önce türleri ayırmak gerekir, çünkü her tür farklı bir iş için tasarlanmıştır.
- Belge tabanlı: veri JSON benzeri belgeler olarak saklanır. MongoDB bu türün tanınmış örneğidir. Ürün kataloğu, kullanıcı profili ve içerik yönetimi gibi yapısı değişken veriler için uygundur.
- Anahtar-değer deposu: her veri bir anahtarla saklanır ve çok hızlı okunur. Redis tanınmış bir örnektir. Önbellek, oturum bilgisi ve sayaçlar için kullanılır.
- Sütun yönelimli: çok büyük hacimli, yazma ağırlıklı ve dağıtık verilerde kullanılır. Cassandra tanınmış bir örnektir. Zaman serisi ve olay kayıtları tipik kullanım alanlarıdır.
- Grafik veritabanı: veriler ve aralarındaki ilişkiler düğüm ve kenar olarak saklanır. Öneri sistemleri, sosyal ağ ve sahtekârlık analizi gibi ilişki yoğun işlerde işe yarar.
Hangi işte hangisi seçilir?
Seçim yapmadan önce verinin nasıl okunacağını sormak gerekir. Sorgular çoğunlukla tek bir kaydı anahtarla getirmekse anahtar-değer deposu yeterlidir. Esnek yapılı kayıtlar ve zengin sorgular gerekiyorsa belge tabanlı veritabanı mantıklıdır. Çok büyük yazma yükü ve dağıtık erişilebilirlik öncelikse sütun yönelimli yapılar öne çıkar. Veriler arasındaki bağlantıların kendisi sorgulanıyorsa grafik veritabanı doğru seçimdir.
İşlem tutarlılığının kritik olduğu, karmaşık ilişkili sorguların yoğun yapıldığı, finansal kayıt gibi alanlarda ilişkisel veritabanı çoğunlukla daha güvenlidir. "Yeni olduğu için" NoSQL seçmek yaygın bir hatadır.
Bir karar ölçütü olarak üç soruyu sorun: veriyi hangi anahtarla ya da hangi sorguyla çağıracağım, aynı kaydı aynı anda kaç kişi güncelleyecek ve verinin eski halini okumak ne kadar zararlı? Bu soruların yanıtı, seçeneği çoğu zaman tek bir türe daraltır.
NoSQL'de veri modelleme farklıdır
İlişkisel veritabanında önce veriyi normalleştirir, sorguyu sonra yazarsınız. NoSQL'de yaklaşım çoğunlukla tersidir: önce uygulamanın hangi sorguları yapacağını belirler, veriyi bu sorgulara uygun biçimde modellersiniz.
Belge tabanlı sistemde bu, ilişkili verinin tek belge içine gömülmesi (embedding) ya da ayrı belgelere referansla bağlanması arasında seçim yapmak demektir. Sık birlikte okunan veri gömülür; bağımsız büyüyen ve ayrı güncellenen veri referansla tutulur. Sütun yönelimli sistemlerde ise tablo tasarımı, anahtar seçimi ve verinin düğümlere dağılımı performansı doğrudan belirler.
Bu yüzden NoSQL'de modelleme hatası sonradan düzeltmesi pahalı bir hatadır.
Örneğin bir blog uygulamasında yazı ile yorumlar birlikte okunuyorsa yorumları yazı belgesinin içine gömmek tek sorguyla sayfa üretmeyi sağlar. Yorum sayısı sınırsız büyüyorsa ya da yorumlar ayrıca sorgulanıyorsa ayrı belge olarak tutmak ve referansla bağlamak daha sağlıklıdır. Belge boyutunun sürekli büyümesi, gömme kararının yanlış verildiğinin işaretidir.
Gerçek bir örnek: e-ticaret altyapısı
Örneğin bir e-ticaret platformunda ürün kataloğunun alanları kategoriye göre değişiyor: bir kıyafetin bedeni, bir telefonun belleği vardır. Belge tabanlı bir veritabanı her ürünü kendi alanlarıyla saklayarak bu esnekliği sağlar. Sepet ve oturum bilgisi, hızlı erişim gerektirdiği için anahtar-değer deposunda tutulur. Sipariş geçmişi gibi kritik kayıtlar ise ilişkisel veritabanında kalır. Tüm kullanıcı tıklama olayları yoğun yazıldığından sütun yönelimli bir sistemde toplanır. "Bu ürünü alanlar şunları da aldı" önerileri için müşteri ve ürün ilişkileri grafik yapıda modellenir.
Burada tek bir teknoloji yerine, her veri türü için uygun aracın seçilmesi esas ilkedir.
Performans ve ölçekleme
NoSQL sistemlerde performans, doğru indeks, uygun veri modeli ve dağıtım stratejisine bağlıdır. Belge veritabanında sorgulanan alanlara indeks tanımlamak, okuma süresini belirgin biçimde etkiler. Dağıtık sistemlerde verinin düğümlere nasıl bölüneceği (parçalama) ve kopyalanacağı (replikasyon), hem hızı hem erişilebilirliği belirler.
Dağıtık sistemlerde tutarlılık, erişilebilirlik ve ağ bölünmesine dayanıklılık arasında denge kurmak gerekir; her sistem bu dengede farklı bir noktayı seçer. Hangi tutarlılık düzeyinin işiniz için kabul edilebilir olduğunu bilmek, ölçekleme kararlarının temelidir.
İndeks eklemek okumayı hızlandırır ama yazmayı yavaşlatır ve depolama harcar; bu yüzden yalnızca gerçekten sorgulanan alanlara tanımlanır. Dağıtık kurulumda parçalama anahtarı kötü seçilirse verinin ve yükün bir düğümde yığılması (sıcak nokta) oluşur ve ölçeklemenin faydası kaybolur.
Başlangıçtan ileri düzeye öğrenme yolu ve hatalar
Başlangıçta SQL ve ilişkisel mantığa hâkim olmak, farkı anlamanın etkili bir yoludur. Ardından türleri tanımak ve belge tabanlı bir veritabanında temel işlemleri yapmak gelir. Orta düzeyde anahtar-değer ve sütun yönelimli sistemler, veri modelleme ve indeksleme çalışılır. İleri düzeyde ölçekleme, replikasyon, tutarlılık ayarları ve çoklu veritabanlı mimariler yer alır.
Sık hatalar şunlardır. • Her işi NoSQL ile çözmeye çalışmak. • Sorgu ihtiyacını düşünmeden modellemek. • İndeks tanımlamamak. • Tutarlılık ödünlerini bilmeden dağıtık sisteme geçmek. • Yedekleme ve güvenliği ihmal etmek.
Mindset programında nerede çalışılır?
Mindset kataloğundaki NoSQL Veritabanı Sistemleri ve Uygulamaları programı şu başlıklardan oluşur: NoSQL'e giriş ve temel kavramlar, MongoDB ile belge tabanlı veritabanları, Redis ile anahtar-değer deposu, Cassandra ile sütun yönelimli veritabanı, grafik veritabanı ve performans optimizasyonu ile ölçeklendirme.
İlgili Mindset programı
NoSQL Veritabanı Sistemleri ve Uygulamaları
Sık sorulan sorular
NoSQL öğrenmek için önce SQL bilmek gerekir mi?
Zorunlu değil ama çok yararlıdır. SQL'i bilmek, veri modelleme ve sorgulama mantığını kavramanıza yardımcı olur ve NoSQL'in neyi farklı yaptığını anlamanızı kolaylaştırır. Ayrıca gerçek projelerde çoğu zaman ikisi birlikte kullanıldığı için her iki dile de ihtiyaç duyarsınız. Önce temel SQL sorgularını rahatça yazdıktan sonra NoSQL'e geçmek öğrenme süresini kısaltır.
MongoDB mi Redis mi önce öğrenilmeli?
Genel amaçlı uygulama geliştirme için çoğu kişi belge tabanlı MongoDB ile başlar, çünkü veri modelleme ve sorgulama kavramlarını kapsamlı öğretir. Redis'i ise önbellek ve hızlı erişim ihtiyacı doğduğunda eklemek yaygındır. Seçim, hedeflediğiniz işe göre belirlenir. İkisi farklı sorunları çözdüğü için sonunda ikisini de bilmek avantajdır.
NoSQL veritabanları ACID işlem desteklemez mi?
Bu genelleme doğru değildir. Destek sistemden sisteme değişir. Bazı NoSQL veritabanları belirli kapsamlarda işlem desteği sunar, bazıları performans ve dağıtım için tutarlılıktan ödün verir. Kullandığınız sistemin işlem ve tutarlılık davranışını resmî dokümantasyondan kontrol etmek gerekir. Bu nedenle ürün seçmeden önce işlem ihtiyacınızı netleştirmek önemlidir.
NoSQL veri analitiği için uygun mudur?
Bazı türleri uygundur. Grafik veritabanları ilişki analizinde, sütun yönelimli sistemler büyük hacimli olay verisinde işe yarar. Ancak raporlama ve çok boyutlu analiz için genellikle ilişkisel veri ambarları ya da analitik platformlar tercih edilir. Seçim, analizin türüne göre yapılmalıdır. Çoğu kurumda NoSQL ve analitik katman birlikte çalışır.