NoSQL, geleneksel SQL (Structured Query Language) destekleyen ilişkisel veritabanlarından (Relational Database) farklı veri saklama modeli sağlayan veritabanlarına verilen genel bir isim. Aslında No SQL ifadesi "SQL e Hayır" demek değil. Not Only SQL in (Sadece SQL değil fazlası gibi bir anlam) kısaltması. Aslında bu veritabanlarının adı Not Only Relation Database No-RD olmalıydı :)Veritabanı (database) kavramı bilgisayar dünyasında, bilgileri kalıcı olarak ve düzenli bir şekilde saklayan ve bu verilere erişmeniz için yöntemler sağlayan sistemler. Uygulamalar kapandığında çalışma sırasında hafızada oluşturdukları verileri saklamazlar. Kalıcı olması için ya dosya sistemlerine ya da veritabanlarına saklamaları gerekir. Veritabanı sistemleri verileri sorgulamanız için de araçlar sağlarlar. İlişkisel Veritabanları (Relational Database) denilen veritabanı sistemleri size SQL (Structured Query Language) adı verilen bir sorgulama aracı verir.
İlişkisel Veritabanları (Relational Database) 1970’lerin ortalarından beri bilgisayar dünyasında olan bir sistem. Veriler tablo (table) adı verilen birimlerde satır satır (row) saklanır. Tıpkı bir Excel sayfası gibi. Ancak bu tabloların sütunları (column) baştan verilmiş ve belirlenmiştir.
Resimde görüldüğü gibi bir üye (member) tablosu resimdeki gibi olabilir. Bu üye tablosunun ID , username, mail, name ve surname adlı sütunları (column) vardır. Bu tabloya veritabanın izin verdiği sayıda satır girebilirsiniz.
Bu sistemlere adını veren İlişkisel (Relational) kavramı da bu tablolar arasında ilişkiler kurabilmenizden gelmektedir. Yani üye tablosuyla üyenin eserleri adlı başka bir tabloyu bağlayabilirsiniz. Örneği eser tablosunun içeriği şu şekilde olabilir :
Burada üye tablosunun ID'si ile eser tablosunun artistID'si üzerinden bir ilişki (relation) vardır. Örneğin adı Neşet soyadı Ertaş olan bu müzik dahisinin eserlerini getir diyebilirsiniz. Çünkü üye tablosunda Neşet Ertaş'ın IDsi bulunup, bu ID'den Neşet Ertaş'ın eserlerine ulaşabilirsiniz.
Bugün en ünlü ilişkisel veritabanı sistemleri Oracle, MySQL, MariaDB, PostgreSQL, SQL Server, SQLLite olarak verilebilir.
Peki NoSQL veritabanları bu güzel sistemin neyini beğenmiyorlar ?
En beğenmedikleri şey muhtemelen tablolarda sütunların baştan belirlenmiş olması. Yani daha önceden veritabanının "şema”sını belirlemeniz gerekiyor. Halbuki NOSQL veritabanları şemaya bağımlı olmadan verileri ekleyebiliyorlar. Tabi bunun bazı kötülükleri var ancak çok büyük esneklik de sağlamaktadır.
İkinci konu ise ölçeklendirme konusudur. Ölçeklendirme, bir sistemin kaynakları zorlandığı zaman nasıl büyüyebileceği, işini düzgün yapmaya nasıl devam edeceğini belirleyen en önemli faktördür. Yani veriler büyüdükçe verilerin farklı disklere, sunuculara dağılması gerekir. NoSQL sistemlerinin belki de İlişkisel Veritabanlarına göre en iyi yaptığı şey budur. NoSQL sistemleri doğrudan İlişkisel Veritabanlarına sonradan eklenmeye çalışılan ölçeklendirme üzerine kurulur. Yani baştan "dağıtık" bir sistemi vardır. No SQL veritabanları istediğiniz kadar node (verileri saklayan her bir sunucu gibi düşünülebilir) ekleyebilirsiniz.
Üçüncü en önemli konu ise hız konusu. NoSQL sistemleri verileri genellikle bir key vererek saklar. Ve o key vererek bir içeriği kolayca elde edebilir. Örneğin Neşet Ertaş için bir belge (document) yaratılabilir. O belge içinde Neşet Ertaş'ın üyelik bilgileri ile birlikte eserleri de saklanabilir. Bu şekilde neset.ertas key'i ile saklanan bilgiler tek seferde alınabilir. İlişkisel veritabanlarında ise diğer kişi ve eserlerle aynı yerde saklanan veriler için arama yapılması gerekiyor. Çünkü Neşet Ertaş'ın eserlerini içeren tabloda başka sanatçıların da eserleri var.
Görüldüğü gibi Neşet Ertaş ile ilgili tüm bilgiler tek bir belge üzerinde saklanabilir. Bu şekilde veri çekme süresi hızlanmaktadır.
En ünlü NoSQL veritabanları ise MongoDB, Couchbase, Cassandra, HBase, Neo4j, DynamoDB şeklinde verilebilir.
Bugün hala iki veritabanı sistemi dünyada yoğun bir şekilde kullanılmaktadır. Hatta bazı sistemler iki veritabanı sistemini birlikte kullanmaktadır. İkisinin bazı avantajları ve bazı dezavantajları olmasından dolayı birlikte kullanmayı tercih edenler vardır. Bazıları ilişkisel veritabanında belirli aralıklarla verilerini NoSQL sistemine aktarmaktadır. Bazıları da tersini yapmaktadır.