NoSQL Veritabanlarına Genel Bakış ve Kullanım Senaryoları
Veritabanları, verilerin organize edilmesi, saklanması, güncellenmesi ve erişilmesi için kullanılan yapısal bir araçtır. İşletmeler, kurumlar, web siteleri ve uygulamalar gibi çeşitli alanlarda veritabanlarına ihtiyaç duyulur.
Günümüzde birçok firmada hala ağırlıklı olarak SQL veritabanları (Oracle, MySQL, SQL Server gibi) kullanılsa da, bu veritabanları ihtiyaçlarımızı her zaman istediğimiz ölçüde karşılayamamaktadır. Bu ihtiyaç doğrultusunda da karşımıza birçok farklı amaç doğrultusunda kullanılabilen NoSQL veritabanları çıkar.
NoSQL veritabanlarının kendi içerisinde birçok alt başlığı bulunur. Bunları birazdan inceleyeceğiz, ancak genel olarak SQL ve NoSQL veritabanlarının kullanım senaryolarını kıyaslamak için aşağıdaki tabloya göz atalım.
Yukarıdaki veri modelleme yaklaşımlarından da görebileceğimiz üzere farklı amaçlar ve gereksinimler doğrultusunda kullanılan farklı NoSQL veritabanları vardır.
Hadi şimdi bunların en çok kullanılanlarını örneklerle tanımaya çalışalım :)
1. Document DB (Belge Tabanlı Veritabanları)
Belge tabanlı veritabanı, diğer tüm NoSQL veritabanı türlerinde olduğu gibi ilişkisel olmayan bir veritabanıdır. Verileri tablolar (satırlar ve sütunlar) halinde depolamak yerine, belge formatında depolar. Bir belge veritabanı, verileri JSON, BSON veya XML formatındaki belgelerde depolar. Belge veritabanlarındaki bu belgelerin her biri ise collection olarak adlandırılır.
Bu terimlerin karşılığını daha net anlamak için aşağıdaki karşılaştırmalı tabloyu kullanabilirsiniz.
Örneğin aşağıdaki örnek verileri belge tabanlı bir NoSQL veritabanında saklamak, bize şema esnekliği vererek tablo formatındaki her sütun için değişmez olan veri tipini istediğimiz gibi yönetmemize ve karmaşık veri yapılarıyla daha kolay bir şekilde çalışmamızı sağlar.
En çok bilinen ve kullanılan belge tabanlı (document) veritabanları ve zaman içerisindeki kullanım popülerlikleri ise aşağıdaki gibidir.
2. Key-Value DB (Anahtar-Değer Veritabanları)
Key-Value veritabanları, verileri depolamak için Python’da bulunan Dictionary (sözlük) yapısı gibi basit bir anahtar/değer yöntemi kullanan bir veritabanı türüdür. Bir anahtar-değer veritabanı verileri, bir anahtarın benzersiz bir tanımlayıcı (primary key benzeri) olarak hizmet ettiği bir anahtar-değer çiftleri koleksiyonu olarak depolar.
Hem anahtarlar hem de değerler, basit nesnelerden karmaşık nesnelere kadar her şey olabilir. Anahtar/değer veritabanları yüksek oranda bölümlenebilirdir ve diğer veritabanlarının elde edemediği ölçeklerde yatay ölçeklendirmeye izin verir.
En çok bilinen ve kullanılan anahtar-değer (key-value) veritabanları ve zaman içerisindeki kullanım popülerlikleri ise aşağıdaki gibidir.
3. Wide Column DB (Geniş Sütun Veritabanları)
Wide Column veritabanları, verileri satırlar yerine sütunlarda depolayan bir veritabanıdır. Bu durum, az sayıda sütunda analitik çalışma yapmak istediğimizde, istenmeyen verilerle belleği tüketmeden bu sütunları doğrudan okuyabileceğiniz anlamına gelir.
Wide Column veritabanları, verileri daha verimli bir şekilde okumak ve verileri daha hızlı almak için tasarlanmıştır. Büyük miktarda veriyi depolamak için Wide Column bir veritabanı kullanılır.
En çok bilinen ve kullanılan geniş sütun (wide column) veritabanları ve zaman içerisindeki kullanım popülerlikleri ise aşağıdaki gibidir.
4. Graph DB (Grafik Veritabanları)
Bir Graph veritabanı, verileri tablolar veya belgeler yerine, varlıklar ve ilişkiler ağı olarak depolar. Grafik veritabanları, ilişki modellemede çok daha verimlidir. Özellikle karmaşık veri bağlantılarına sahip kullanım örnekleri için uygulama performansını önemli ölçüde artırırlar.
Örneğin, iki nesne arasında kurulabilecek birçok bağlantı, her biri için bir tablo oluşturmak ve farklı birçok bağlantı oluşturmak yerine varlıklar aracılığıyla çok daha rahat temsil edilebilir.
En çok bilinen ve kullanılan grafik (graph) veritabanları ve zaman içerisindeki kullanım popülerlikleri ise aşağıdaki gibidir.
5. Time-Series DB (Zaman Serisi Veritabanları)
Zaman serisi verileri, belirli bir zaman aralığında izlenen, alt örneklemesi yapılan ve toplanan basit ölçümler veya olaylardır.
Zaman damgalı metrikleri ve olayları veya ölçümleri işlemek için özel olarak bir zaman serisi veritabanı oluşturulur. Bir Time-Series veritabanı, zaman içindeki değişimleri ölçmek amacıyla optimize edilmiştir.
Zaman serisi verilerini diğer veri iş yüklerinden çok farklı kılan özellikler, veri yaşam döngüsü yönetimi, özetleme ve birçok kaydın geniş aralıklı taramalarıdır.
En çok bilinen ve kullanılan zaman serisi (time-series) veritabanları ve zaman içerisindeki kullanım popülerlikleri ise aşağıdaki gibidir.
6. Search Engines DB (Arama Motoru Veritabanları)
Bir Search Engines veritabanı, adından da anlaşılacağı üzere arama işleviyle donatılmış arama moturu olan bir veritabanıdır. Arama özellikleri, veritabanındaki bilgileri hızlı bir şekilde bulmanıza yardımcı olur.
Ayrıca bu arama motoru, Unstructured veya Semi-Structured büyük hacimli veriler (örneğin, bir araştırma veritabanında akademik bir arama yapıyorsanız bulacağınız veriler) için özel olarak optimize edilmiştir.
En çok bilinen ve kullanılan arama motoru (search engines) veritabanları ve zaman içerisindeki kullanım popülerlikleri ise aşağıdaki gibidir.
Buraya kadar konuştuklarımızı göz önünde bulundurursak NoSQL veritabanlarının bizlere sağladığı birçok avantajı bulunuyor. Ancak bu tabiki SQL veritabanları kullanılamaz veya yetersiz demek değil, vereceğiniz karar tamamen sizin kullanım senaryonuza ve ihtiyaçlarınıza bağlı.
Kısacası çalışma amacınızı göz önünde bulundurarak her zaman bir kenarda NoSQL seçeneğinin de bulunması en doğrusu :)
NOT: Farklı veritabanı türlerini ve kullanım senaryolarını incelemek için https://db-engines.com/en/ranking adresini ziyaret edebilirsiniz.