NoSQL (Not Only SQL), geleneksel SQL veritabanı yönetim sistemlerine (RDBMS) alternatif olarak geliştirilen bir veritabanı yaklaşımıdır. NoSQL veritabanları, yapısal olarak esnek, yüksek ölçeklenebilir ve farklı veri türlerini (örneğin, belge, grafik, anahtar-değer, zaman serisi) depolamak ve sorgulamak için tasarlanmıştır. NoSQL veritabanları, büyük veri miktarlarını işleme, hızlı okuma/yazma işlemleri yapma ve karmaşık veri modellerini ele alma gibi özellikler sunar.
NoSQL veritabanları genellikle şu temel özelliklere sahiptir:
Esnek Veri Modeli: NoSQL veritabanları, veriye herhangi bir yapısal kısıtlama getirmeksizin saklamanıza izin verir. Veri modelleri, belge tabanlı (örneğin, JSON veya XML), anahtar-değer tabanlı, sütun tabanlı veya grafik tabanlı gibi çeşitli şekillerde olabilir.
Yatay Ölçeklenebilirlik: NoSQL veritabanları, büyük veri hacimlerini işlemek için yatay olarak ölçeklenebilirler. Bu, daha fazla sunucu ekleyerek veritabanı performansını artırmanızı sağlar.
Yüksek Performans: NoSQL veritabanları, özellikle hızlı okuma/yazma işlemleri gerektiren uygulamalarda yüksek performans sunar. Dağıtılmış mimarileri sayesinde bu hızlı erişim sağlanır.
Yapısal Olmayan Veri: NoSQL veritabanları, yapısal olarak farklı ve karmaşık veri tiplerini kolayca saklayabilirler. Bu, özellikle büyük ve değişken veri türlerinin saklandığı analitik veya büyük veri uygulamaları için önemlidir.
ACID Yerine BASE: NoSQL veritabanları, klasik ACID (Atomiklik, Tutarlılık, İzole, Dayanıklılık) veritabanı işlemlerinin yerine BASE (Temel olarak Uygun, Esneklikte Sezgisel, Kesinlik Olmadan) prensiplerini benimserler. Bu, daha fazla esneklik ve hız sunar, ancak bazı durumlarda veri bütünlüğü açısından daha az katı olabilir.
NoSQL veritabanları, özellikle büyük veri ve çevik yazılım geliştirme projeleri için uygun seçenekler olabilir. Ancak, her tür NoSQL veritabanının kendi avantajları ve kullanım senaryoları vardır, bu nedenle hangi NoSQL veritabanının kullanılacağını seçerken projenin gereksinimlerini ve özel ihtiyaçlarını dikkate almak önemlidir.
NOSQL yıllardır kullanılan MSSQL ve MYSQL gibi ilişkisel kullanılan veri tabanı sistemlerine (RDBMS) alternatif olarak türetilmiş bir veri tabanı sistemidir. NOSQL sistemlerinde bildiğimiz anlamda sql dili kullanılmadığı için NOSQL olarak adlandırılmıştır. Henüz teknolojik bir standart olmadığı için bazı kişiler tarafından “Not Only SQL” olarak da isimlendirilir. Bazılarına göre yeni, hızlı ve esnek olan bu sistem kimilerine göre henüz yeterli değil. Ancak bunun üzerine düşünmek yerine şöyle bir şey düşünelim, BigData... Son yıllarda duyduğumuz bu isim yıllardır biriktirdiğimiz verilerin anlamlı hale dönüştürülme çabasıdır. Bu veri o kadar büyük boyuta ulaşır ki ilişkisel veri tabanı sistemlerinde tutulamaz. Burada tutulamadığı içinde veriler anlamlandırılamaz ve bilgi çöplüğü olarak kalır. Ancak bu bilgi çöplüğü diye tabir ettiğimiz aslında çok önemli ve yararlı verileri barındırır. İşte bu durumda başvurulan sistem NOSQL çözümleridir.
NOSQL'in önemini şöyle vurgulayabiliriz. Google yıllardır indekslediği sitelerin bilgilerini RDBMS'de değil Big Table üzerinde tutuyor. Bu sayede RDBMS gibi büyük verileri performanslı bir şekilde işleyemeyen pahalı sistemler yerine açık kaynaklı ucuz ve performanslı sistemleri tercih ediyor.
NOSQL, RDBMS gibi işlem tabanlı çalışmaz. Bunun yerine yatay büyüme yaparak, performans kazancı sağlar. Verileri bölerek kopyalarını dağınık sistemin farklı parçalarına ekler böylelikle tutarlılık sağlar ve her bir parça için harcanan yük azaltılmış olur.
RDBMS önceden tasarlanıp sütunları belirlenir ve satır satır eklenir. Ancak NOSQL de bu tip bir tanıma gerek yoktur. Bunun yerine daha esnek bir yapı bulunur. Bu kafanızda soru işareti bırakıyorsa şöyle düşünün. 2 adet kolonu olan bir tablonuzda integer verileri tutuyorsunuz yeni satırınızda bunlar yerine varchar eklemeniz gerekiyor. Hiçbir değişikliğe gerek kalmadan verinizi ekleyebilirsiniz. A kolonu B kolonu varken C ve D'ye gerek yok.
NOSQL birincil indeks değerine ihtiyaç duyar ve bunun üzerinden erişim sağlar. RDBMS de bu zorunlu değildir. Oluşan indeks üzerinden belirli aralığa hızlıca ulaşılabilir.
Aralarındaki en önemli fark bizce veri tabanı tasarımında oluşuyor. RDBMS bir sistem için kullanacağınız veriyi nasıl depolayacağım diye düşünürken, NOSQL için depoladığım veriyi nasıl kullanacağım diye düşünüyorsunuz. Bu da proje yazarken sadece projenizi yazmanızı sağlıyor.
Döküman (Document) tabanlı: Bu tip veri tabanları JSON yapısında kayıt yapar. Bu yapılarda sınırsız alan oluşturabilirsiniz. Hatta sınırsız alanların içine sınırsız alanlar ve onların da içine şeklinde devam edebilirsiniz. MongoDB, CouchDB, Amazon Simple DB, Cassandra, HBase...
Anahtar / Değer (Key / Value) tabanlı: Bu sistemlerde anahtarlara karşılık gelen tek bir bilgi bulunur. Kolon yapısı yoktur. MemcacheDB, Berkeley DB, Azure Table Storage...
Grafik (Graph) tabanlı: Bu sistemler diğerlerinden farklı olarak verilerin ilişkisini saklayan Graph Theory modelindeki sistemlerdir. Neo4J, FlockDB...
Bunca zamandır RDBMS kullanmıştım ne gerek var NOSQL'e diyebilirsiniz. Hatta NOSQL kullanmak çok anlamlı da gelmeyebilir. Ancak sürekli büyüyen veri toplayan sitelerde belli bir limitiniz var bunu aştığınız anda yavaşlamalar performans azalmaları başlıyor. Bu noktalara ulaşacak projelerde NOSQL tercih edilmelidir. En önemlisi her proje NOSQL'e uygun olmayabilir. Bunun değerlendirmesinin iyi yapılıp karar verilmesi gerekiyor.