NOSQL Nedir?
NoSQL
NoSQL, ilk olarak 1998 yılında Carlo Strozzi tarafından ortaya çıkarılan bir kavramdır. Sql arayüzü olmayan bu veri depolama sistemine, tasarımcısı Carlo Strozzi, ilişkisel olmayan anlamında (İng. No Relation) tarzında bir isim konulması gerektiğini söyler.
NoSQL kavramı 2009 yılı başlarında, Rackspace şirketinin çalışanlarından Eric Evans tarafından, açık kaynak dağıtık veritabanları sistemlerinin görüşüleceği bir toplantı düzenlenmek istendiği dönemlerde tekrardan kullanılmaya başlandı. Eric Evans aslında bu isimle sürekli olarak ortaya çıkmaya başlayan, ilişkisel olmayan dağıtık veri depolama sistemlerine bir damga vurmayı amaçlamaktaydı.
NoSQL
Aslında NoSQL isimlendirme konusunda biraz kafa karışıklığı oluşturmaktadır. Akla gelen ilk anlamı sql değil anlamındadır. Bu adın kullanılmasının en büyük nedeni yeni bir teknolojinin etkileyici bir şekilde sunulmak istenmesidir. Diğer adları çok tercih edilmemiştir. Diğer adlarından bazıları NonRel, NoRDBMS’dir (ilişkisel değil anlamında). NoSQL için “not only sql” tabiri de kullanılmaktadır. Yani sadece sql değil denilmektedir. Bunun nedeni sql sorgularına alışmış geliştiriciler olarak aynı sorgu mantığının adapte edilmeye çalışılmasında yatmaktadır.
NoSQL, ilişkisel veritabanı sistemlerine alternatif bir çözüm olarak ortaya çıkan, yatay olarak ölçeklendirilen bir veri depolama sistemidir. İnternetin hızlanması ile beraber, sistemlerde çok fazla kullanıcının aktif rol alması, birçok ihtiyacın yanında veritabanı şemasının artan bir sıklıkla değiştirilmesi zorunluluğunu ortaya çıkardı. Hepimizin kullandığı ilişkisel veritabanlarındaki hiyerarşi, önce tabloları ve her tabloya ait sütunları oluşturmak sonrasında ise bilgileri satır satır eklemektir. Fakat burada karşımıza çıkan bir sıkıntı, tanımı olmayan alana bilgi kaydetmektir. Bu sıkıntıdan kurtulmak için yapmamız gereken öncelikle tabloyu tekrardan ele alıp yeni sütunlar eklemektir. Tabi bununla birlikte veritabanındaki tüm tablo ve ilişkileri etkileyecek durumlar da ortaya çıkabilmektedir. Bu işlemi gerçekleştirmek sistemi tekrardan ele almayı gerektirdiği için çok maliyetli olabilmektedir.
Özetle söylemek gerekirse İlişkisel Veritabanı Sistemlerinde maliyetin yükselmemesi adına yapıyı önceden çok iyi planlamak gerekmektedir. Fakat NoSQL veritabanları sistemlerinde, bilgilerin kayıt altına alınması adına bu yapıyı sonradan kurmak ek bir maliyet getirmemekte ya da az bir maliyet getirmektedir. Nedeni ise NoSQL sistemlerde tablo ve sütun kavramının olmamasıdır. NoSQL sistemlerde yeni bir alana ihtiyacınız olduğu durumlarda kaydı direk eklemeniz yeterli olmaktadır. NoSQL sizin yerinize alanı oluşturur ve değeri kaydeder. Kayıtların maliyetsizce gerçekleşmesinin nedeni ise verilerin tablo ve sütunlarda saklanması yerine JSON ve XML formatına benzer yapıda saklanmasıdır.
Tüm bu anlatımlardan “NoSQL veritabanları, ilişkisel veritabanlarından çokdaha iyidir” gibi bir sonucu çıkarmamamız gerekmektedir. Çünkü ikisini de yerine göre kullanmakta fayda bulunmaktadır. Örneğin: ilişkisel olayların çok yoğun gerçekleştiği bir bankacılık uygulamasında NoSQL bir veritabanı kullanmamız uygun değildir. NoSQL, Fire and Forget prensibi ile çalıştığı için bankacılık, alışveriş gibi para üzerinden işlem yapılan kritik uygulamalarda kullanılmamalıdır. Aksine verinin %100 önem arz etmediği durumlarda kullanımı daha uygundur.
NoSQL Veritabanlarının Doğmasını Sağlayan Temel Sorun Nedir?
NoSQL sistemlerinin ortaya çıkmasındaki en büyük sebep internetin hızlanması ile büyümekte olan ve yapısal olmayan internetteki verinin İlişkisel Veritabanı Yönetim Sistemlerinde performanslı bir şekilde işlenememesidir. Veri büyüklüğü ve trafik olarak belirli büyüklüğe gelen ve hali hazırda açık kaynaklı veritabanı sistemleri kullanan firmalar bir noktada bu veritabanlarının kısıtlarına takılmaktadırlar. Dikey büyüme maliyetli olduğundan, yatayda büyüyebilmek için daha fazla önbellek (cache) kullanımı, verinin programatik olarak dağıtılması (sharding) gibi teknikleri denemektedirler. Bu uygulamaların da yetmediği durumda NoSQL sistemleri ortaya çıkmaya başlamıştır.
Google bu gereksinimi Big Table adını verdiği NoSQL veritabanı sistemi ile Amazon ise DynamoDB ismini verdiği NoSQL veritabanı sistemi ile çözmektedir. İnternetteki en büyük veri hacmine sahip olduğu bilinen Google firması, internet verisini İlişkisel Veritabanları yerine BigTable’da tutmayı tercih etmektedir. Google firmasının bu tercihi yapma sebebi ise veriye ilişkisel veritabanı sistemlerine nazaran daha hızlı ve daha ucuza erişebiliyor olmasıdır. Daha ucuza erişebilmesini sağlayan önemli bir faktör de dikey büyüme yerine yatayda büyüme ile gereksiz ek maliyetten kurtulmalarıdır.
Yatay Büyüme ve Dikey Büyüme Arasındaki Fark Nedir?
Dikey büyüme sistem kaynaklarınızın yetersiz kalması durumunda sistemi yenilemeniz veya sisteme ek donanım almak ile olur iken yatay büyümede ek bir sunucu alarak işlem yüklerini sunuculara bölmek ile sağlanır. Böylelikle Sunucuyu üst versiyonlara çıkarmak için çıkan karşılaşılan maliyeti ek bir sunucu veya mainframe bir bilgisayarla sağlanmış olunur.
NoSQL Sistemlerin Avantajları Nelerdir?
NoSQL veritabanı sistemleri ilişkisel veritabanlarına göre yüksek erişilebilirlik imkanı sunarlar.
NoSQL veritabanı sistemleri okuma ve yazma performansları olarak göreceli olarak ilişkisel veritabanı sistemlerine göre daha performanslı olabilirler.
NoSQL veritabanı sistemleri yatay olarak genişletilebilirler. Binlerce sunucu birarada küme olarak çalışabilir ve çok büyük veri üzerinde işlem yapabilirler.
NoSQL veritabanı sistemleri esnek yapılarından dolayı programlama ve bakım anlamında kolaylık sağlarlar.
NoSQL veritabanı sistemlerinde farklı özelliklere sahip birçok implementasyon arasından seçim yapma şansınız vardır.
NoSQL veritabanı sistemleri birçok açık kaynak kodlu projelere ve bulut bilişim teknolojilerine uygun olduğu için maliyet olarak ilişkisel veritabanı yönetim sistemlerine göre daha avantajlıdır.
NoSQL Sistemlerin Dezavantajları Nelerdir?
İlişkisel veritabanı yönetim sistemlerini kullanan uygulamaların NoSQL sistemlere taşınması başlangıçta zor olacaktır. Veri başarılı bir şekilde taşınsa bile bağlantıyı (join) kullanan kodlarda düzenlemelerin yapılması gerekecektir.
İlişkisel veritabanı yönetim sistemlerindeki sorgu tabanlı veri erişimi yerine NoSQL sistemlerdeki anahtar tabanlı veri erişimi sağlamak gerekmektedir. Buna göre bir yapılandırmaya gidilmesi zaman alabilmektedir.
İlişkisel veritabanı yönetim sistemlerindeki işlem hareketleri (transaction) kavramı, NoSQL veritabanı sistemlerinde bulunmadığı için veri kaybı söz konusu olabilmektedir.
NoSQL veritabanı sistemleri veri güvenliği konusunda ilişkisel veritabanı yönetim sistemleri kadar gelişmiş özelliklere henüz sahip değiller. BazıNoSQL projelerin dökümantasyon ve profesyonel destek konusunda eksikleri vardır.