Eğer veritabanları ile ilgili biraz bilginiz varsa SQL (Structured Query Language – Yapılandırılmış Sorgu Dili) kelimesini mutlaka duymuşsunuzdur. Uzun yıllar neredeyse bütün veritabanları bu alt dil ile kullanılırdı. Fakat günümüzde verilerin büyüklüğü ve kullanım alanları o kadar yaygınlaştı ki geliştiricilerin bazı uygulama türlerinde daha fazla performans için alternatif modellere yönelmeleri gerekti.
NoSQL Nedir ?
“NoSQL” (Not Only SQL) kavramı, ilişkisel olmayan veritabanı (non-relational database) türlerini ifade etmektedir. Bu, büyük ölçekli verilerin ilişkisel tablolardan farklı bir formatta depolanarak yüksek performanslı bir şekilde işlenmesi için tasarlanmış, dağıtılmış bir modeldir. Verilerin çok yoğun kullanıldığı bir NoSQL veritabanında, hem okuma hem de yazma işlemi son derece performanslı çalışır.
NoSQL veritabanları, birden çok makinenin veri sağlamak için kümeler halinde birlikte çalıştığı çoğaltılmış ve dağıtılmış sistemlerdir. Büyük miktarda veriyi dağıtılmış bir şekilde depolama yeteneği, NoSQL veritabanlarının hızla popülerleşmesinde etkili olmuştur. NoSQL tipindeki veritabanları belirli veri modelleri için oluşturulmuş esnek şemalara sahiptir.
NoSQL Veritabanları Nerede Kullanılır ?
NoSQL veritabanları esnek şemaları sayesinde büyük verileri barındrırırken düşük gecikme sağlar. Ayrıca veri alışverişinde kullanılan NoSQL tarzı API’lerin perforansları son derece yüksektir. Bu yüzden gerçek zamanlı web uygulamalarında, online oyunlarda yaygın olarak kullanılmaktadır.
NoSQL Avantajları Nelerdir ?
NoSQL ile geliştiriciler gerçek zamanlı verilere daha hızlı yanıt veren uygulamalar oluşturabilirler. NoSQL veritabanlarının çoğu günümüz modern programlama dilleri ile uyumludur.
NoSQL veritabanları yüksek kullanılabilirliği sağlamak için ilişkisel veritabanları mimarisiyle gelen karmaşıklığı önlemek için tasarlanmıştır.
NoSQL veritabanlarının yüklenmesi ve yapılandırılması ilişkisel veritabanlarına oranla daha kolaydır. Hizmet sağlayıcılar, geliştiricilerin bu veritabanlarına daha kolay adapte olması için birçok “araç” (tool) üretmiştir.
NoSQL, geliştiriciler için esnek veri modelleri uygulama yeteneği sunar. Esnek bir veri modeli, geliştiricileri tanımlanmış bir şema ile sınırlamaz. Dinamik şemalar, uygulama geliştiricilerinin veritabanını çevrimdışı duruma getirmeden bir yapı üzerinde şema değişiklikleri yapmasına olanak tanır. Bu esneklik uygulama kullanım durumuna en çok uyan veri türlerinden ve sorgu seçeneklerinden yararlanabilmelerini sağlar. Böylece veritabanının kullanımı basitleşir ve daha hızlı sonuç vermesini (performans) sağlar.
NoSQL veritabanları dağıtılarak, verileri birden çok sunucu veya veri merkezi arasında otomatik olarak çoğaltarak gecikmeyi ve kullanıcıların bulunduğu her yerde aynı performansta kullanmasını sağlar.
NoSQL ile SQL Karşılaştırması
İlişkisel veritabanlarında veriler, tablo adı verilen veritabanı nesnelerinde saklanır. Tablolar satır ve sütunlardan oluşur. Bu veritabanlarına veriyi okumak ve yazabilmek için tüm sütunların ve bunlarla ilişkili veri türlerinin önceden bilinmesi, yani şemaların tanımlanması gerekir. Ayrıca tabloların birbiri ile ilişkilerini “Anahtarlar” belirler. Bu yüzden verilerin işlenmesi veya okunması için genellikle bu anahtarların kullanılması lazımdır. NoSQL veritabanlarında veriler ise şemayı tanımlamadan depolanabilir. Bu durum performans açısından fayda sağlamaktadır.
NoSQL veritabanlarının yatay olarak ölçeklendirilebilmesi için “parçalama” adı verilen yapı kullanılır. Bu, birden çok sunucuda verileri işlemek için daha fazla makinenin eklenebileceği anlamına gelir. Bu yüzden NoSQL veritabanları ile yatay ölçeklendirme yaparken, son derece büyük miktarda veri daha verimli bir şekilde işlenebilir. SQL veritabanlarında ise dikey ölçeklendirme yüzünden mevcut makineye daha fazla güç ve bellek eklemek gerekebilir. Bu durum SQL’in barındğı makinenin kapasitesi kadar olacaktır.
NoSQL Türleri Nelerdir ?
NoSQL veritabanı türü genel olarak 4 ‘e ayrılır.
Anahtar-Değer (Key-Value) : Anahtar-değer çifti depolama veritabanları, her anahtarın benzersiz olduğu ve değerin bir JSON vb. bir formatta karma tablo olarak verileri depolar. Değer alanında herhangi bir kısıtlama yoktur.
Sütun (Column) : Birçok makineye dağıtılan çok büyük miktarda veriyi depolamak ve işlemek için oluşturulmuştur. Sütunlar, sütun ailesine göre düzenlenmiştir. Verileri tablolar, satırlar ve sütunlar biçiminde depolar ve yönetir. Sütun tabanlı NoSQL veritabanları, veri ambarları ve iş zekası uygulamalarında yaygın olarak kullanılmaktadır.
Grafik (Graph) : Grafik türündeki NoSQL veritabanları, verileri temsil etmek ve depolamak için düğümler ve özellikler içeren sorgular için grafik yapılarını kullanır. Bir bağlantı veya ilişki ağını (Sosyal ağlar vb.) depolamak için kullanılırlar.
Belge (Document) : En çok kullanılan NoSQL veritabanı modeli denebilir. Veriler, yarı yapılandırılmış şekilde JSON gibi formatlarda saklanır. Belge veritabanları, iç içe geçmiş değerlere izin verir. Belge veritabanları, sorgulamayı daha verimli şekilde destekler. Örnek olarak bir makale verisi saklamak istiyoruz, ilişkisel bir veritabanında yazar bilgisini, yorumları, makalenin kendisini parçalayıp veritabanının farklı tablolarında tutarız. Belge türündeki NoSQL veritabanında ise hepsi tek bir belge formatında saklanır.