NoSQL nedir?
Son zamanlarda sıklıkla duymaya başladığımız NoSQL kavramı, yıllardır bilişim dünyasında vazgeçilmez bir yere sahip olan ilişkisel veritabanı sistemlerine (RDBMS) alternatif olarak ortaya çıkan, aslen internetin gün geçtikçe artan verisini depolayabilmek ve yüksek trafiğe sahip sistemlerin ihtiyaçlarına cevap verebilmek amacıyla ortaya çıkmış yatay olarak ölçeklendirilebilen sistemlere verilen genel addır.NoSQL sistemlerinde RDBMS’de kullanılan SQL dili kullanılmadığı için “No SQL” adı verilmiştir. Kendini kanıtlamış bir çok örneği olmasına rağmen henüz endüstri standardı olarak kabul görmemesinden dolayı kimi zaman ”Not Only SQL” olarak da adlandırılır. Bazılarımız bunu yeni ve muhteşem bir teknoloji olarak görürken, bazılarımız bu sistemlerin tek başına yeterli olamayacağını düşünüyor. Yani bilişim dünyası profesyonelleri henüz NoSQL kavramı konusunda ortak bir görüş sahip değil. Bu konu bir tarafta tartışıla dursun, aslında çok da yeni olmayan bu kavramın en bilinenleri Big Table ve DynamoDB yıllardır Google ve Amazon tarafından kullanılan NoSQL sistemleridir. Google indekslediği inanılmaz büyüklükteki internet verisini RDBMS’de değil, Big Table üzerinde tutuyor. Üstelik bu verilere RDBMS üzerinden erişebileceğinden çok daha hızlı ve belki en önemlisi, çok daha ucuza erişebiliyor.NoSQL sistemlerin ortaya çıkışı genel olarak büyüyen internet verisinin RDBMS’de performanslı bir şekilde işlenememesinden kaynaklanıyor. 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ılıyorlar. Dikey büyüme maliyetli olduğundan, yatayda büyüyebilmek için daha fazla önbellek (cache) kullanımı, verilerin programatik olarak dağıtılması (sharding) gibi teknikleri deniyorlar. Bunların da yetmediği durumda NoSQL sistemleri ortaya çıkmaya başlıyor.
NoSQL sistemlerin RDBMS’lerden farkı nedir?
RDBMS’ler işlem (transaction) tabanlı çalışan sistemlerdir. Bu işlemlerin stabil çalışması ve veri bütünlüğü için ACID (Atomicity, Consistency, Isolation, Durability) kuralları bulunur. NoSQL sistemleri bu kuralların tamamına uymaz. Örneğin birçok NoSQL sisteminde “transaction” kavramı bulunmuyor. Zaten CAP teorisine göre herhangi dağıtık bir sistem aynı anda Tutarlılık (Consistency), Müsaitlik (Availability) ve Parçalanma payı (Partition tolerance) kavramlarının hepsini birden asla sağlayamaz. Yani dağıtık bir sistemin her bir parçasından aynı veriye erişebilme, aynı anda bütün isteklere cevap verebilme, kaybedilen paketlere rağmen verinin bütününü kaybetmeme özelliklerine aynı anda sahip olamaz. Bunlardan mutlaka birinde problem çıkacaktır. NoSQL sistemlerde ise bu kavramlar esnetilerek yatayda büyüme ile performans kazancı amaçlanmıştır. Örneğin veriyi bölerek, belirli sayıdaki kopyalarını da dağıtık sistemin farkı parçalarına göndererek tutarlılık sağlanabilir. Bu sayede paket kaybı yaşansa da verinin tamamı kaybedilmez, aynı zamanda veri bölündüğü için her bir parçaya düşen yük dengelenmiş olur.
RDBMS’lerde veriler tablolarda, tanımlı sütunlarda satır satır bulunurken, NoSQL sistemler sabit tablo tanımlarına bağımlı değillerdir. Yani daha sonradan özel bir işlem yapmadan yeni kolonlar eklenebildiği gibi, kayıtlar arasında kolon farklılıkları olabilir. Örneğin 1. satırda a ve b kolonları varken 2. satırda bambaşka kolonlar bulunabilir. Bu esnek yapı bize denormalizasyon kolaylığı sağlar. RDBMS’lerde veriler ilişkilerine göre ayrı tablolara düzenli bir şekilde yerleştirilerek normalize edilirken, verilere erişim için birleştirme (join) kullanılır. Dağıtık sistemlerde birleştirme operasyonu sıkıntılara sebep olur. Çünkü birleştirilmek istenen veriler farklı parçalarda olabilir. Bu yüzden dağıtık sistemlerde birleştirme işlemi elle yapılmalıdır. Yani önce a verisi çekilir, sonra bununla ilişkili b verisi çekilip programatik olarak birleştirilme yapılır. Normal sistemlerde bu işlemler performans kaybına sebep olurken, dağıtık sistemlerde bu performans kaybı sistemin genel performansı yanında önemsizdir. İşte bu sebeple dağıtık sistemlerde birleştirme operasyonu yapmak yerine veri denormalize tutularak verilere erişim kolaylaştırılır. Denormalize edilmiş veriler içerisinde veriler kendini tekrar edecektir ancak bu da dağıtık sistemlerin çalışma performansını arttırdığı için önemli değildir. NoSQL sistemler de bu sebeple sabit tablo tanımı içermez, verilerin denormalize tutulmasını kolaylaştırır.
RDBMS’lerde verilerin tekil birer anahtar (primary key) ile birbirlerinden ayrılması zorunlu değildir. Ancak NoSQL sistemler temel olarak verilere tekil anahtarlar üzerinden erişir. Her NoSQL sisteminde ikincil indeks (secondary index) yeteneği de bulunmayabilir. Bu yüzden verilere erişim SQL sorguları ile yapıldığı gibi kolay yapılamaz. Uygulamanın özelliğine göre birincil anahtarlar belirli bir mantığa göre verilir ve bu sayede veriye erişmeden önce zaten bu anahtar biliniyor ya da oluşturulabiliyor olur. Örneğin zamana göre artan ön ek (prefix), kaydın anahtarı ile birleştirilerek tek seferde ilgili kaydın belirli bir zaman aralığındaki kayıtlarına erişmek mümkündür. Bu sayede herhangi bir sorguya gerek olmaksızın tamamen anahtarlar üzerinden verilere hızlıca erişim sağlanmış olur.
NoSQL sistemlerin bazılarında map reduce yeteneği bulunmaktadır. Bu sayede RDBMS üzerinde SQL ile gerçekleştirilmesi çok kompleks olan analizler, map reduce ile kolay bir şekilde gerçekleştirilebilir.
NoSQL sistemlerin kendi aralarındaki farklılıkları nelerdir?
NoSQL sistemlerinin SQL-92 gibi bir standardı olmadığı için yukarda yazılanların genel özelliklerin dışında kendi aralarında farklılıklar göstermektedir. Her sistemin veri tutarlılığı ve erişimi ile ilgili farklı özellikleri ve yetenekleri bulunmaktadır. Fakat NoSQL sistemlerini genel olarak 3 grupta toplayabiliriz:
Döküman (Document) tabanlı: Bu sistemlerde bir kayıt döküman olarak isimlendirilir. Dökümanlar genelde JSON formatında tutulur. Bu dökümanların içerisinde sınırsız alan oluşturulabilir. MongoDB, CouchDB, HBase, Cassandra ve Amazon SimpleDB bunlara örnektir.
Anahtar / Değer (Key / Value) tabanlı: Bu sistemlerde anahtara karşılık gelen tek bir bilgi bulunur. Yani kolon kavramı yoktur. Azure Table Storage, MemcacheDB ve Berkeley DB bunlara örnektir.
Grafik (Graph) tabanlı: Diğerlerinden farklı olarak verilerin arasındaki ilişkiyi de tutan, Graph theory modelindeki sistemlerdir. Neo4J, FlockDB bunlara örnektir.
NoSQL sistemlerin artıları ve eksileri nelerdir?
NoSQL sistemleri yüksek erişilebilirlik sunarlar. Okuma ve yazma performansları olarak RDBMS’lerden göreceli olarak daha performanslı olabilirler. Yukarıda bahsettiğimiz özelliklerinden dolayı yatay olarak genişletilebilirler. Binlerce sunucu birarada küme olarak çalışabilir ve çok büyük veri üzerinde işlem yapabilirler. Esnek yapılarından dolayı programlama ve bakım anlamında kolaylık sağlarlar. Farklı özelliklere sahip bir çok implementasyon arasından seçim yapma şansınız vardır. Çoğu açık kaynaklı ve bulut bilişime uygun olduğu için maliyet anlamında avantajlıdır.
Öte yandan RDBMS sistemlerini kullanan uygulamaların NoSQL sistemlere taşınması başlangıçta zor olacaktır. Veriler başarılı bir şekilde taşınsa bile bağlantı (join) kullanan kodların değiştirilmesi gerekicektir. Aynı şekilde sorgu tabanlı veri erişimi yerine anahtar tabanlı veri erişimi sağlamak gerekebilir. Ttransaction kavramı bulunmadığı için veri kaybı sözkonusu olabilir. Veri güvenliği konusunda da RDBMS’ler kadar gelişmiş özelliklere henüz sahip değiller. Bazı projelerin dökümantasyon ve profesyonel destek konusunda eksikleri olabilir.
Sonuç
Uzun yıllardır RDBMS kullanıyorsanız NoSQL sistemlere geçmek size çok anlamlı gelmeyebilir. Ancak internet işiyle uğraşanlar için RDBMS ile bir tıkanma noktası var. Bu noktaya ulaştığınızda NoSQL çözümleri sizin için çok faydalı olabilir. Şu anda olgunlaşmış durumda bir çok NoSQL proje mevcut, bunları alıp sisteminize adapte edebilirsiniz. Elbette her durum için NoSQL çözümleri uygun olmayacaktır, önemli olan uygun alanlarda kullanabiliyorsanız NoSQL çözümlerini değerlendirmenizdir.
Sitemizde amacımız NoSQL çözümlerini sizlere tanıtmak, artıları ve eksilerini değerlendirmek ve tecrübelerimizi paylaşmaktır.
Alıntıdır …
Yazar : Hakan İlter
Kaynak : http://devveri.com/nosql-nedir