Günümüzde yazılımla uğraşıp, SQL (Structured Query
Language) bilmeyen ve duymayan kalmamıştır herhalde. Nasıl yabancı dil eğitimi
İlkokullara kadar indiyse, SQL’in temellerinin de İlköğretim Eğitim Programı
içine alıp, gençleri erken yaşta veritabanı ve onun küresel dili olan SQL ile
tanıştırmanın zamanı geldi de geçiyor. Buradan Milli Eğitim Bakanlığı’na bir
mesaj vermiş de olayım.
Ama bu yazının temel konusu SQL değil, NoSQL!
SQL kullanan veritabanlarının geleneksel
nimetlerini anlatmayacağım. 1970’lerde IBM için çalışan iki bilim insanı, Donald
D. Chamberlin ve Raymond F. Boyce tarafından tasarlanan bu veri işleme dili,
bütün ilişkisel veri tabanları için neredeyse standart hale geldi ve günümüze
kadar ulaştı.
Öncelikle şu fark ile başlayalım.
SQL; ilişkisel veri tabanlarında, saklanan verileri
yönetmek için kullandığımız, veritbanı bağımsız bir dil.
NoSQL ise yeni bir veritabanı sistemi veya modeli
olarak adlandırılabilir.
Geleneksel veri tabanı üreticileri (IBM, Oracle,
Microsoft vb.) geliştirdikleri veritabanlarıyla (DB2, Oracle, SQLServer)
geleneksel veri tiplerini saklamak, yönetmek üzerine tasarlanmış, verinin
doğruluğunu, herzaman tutarlı ve kararlı olarak saklanabilmesini, ulaşılabilir
olmasını temel kriterleri olarak önceliklendirmişler ve bunlara göre çok sağlam
motorlar geliştirmişlerdir. Bu veritabanları yıllar boyunca öncelikle “mission-critical”
veri saklanmasını gerektiren bütün alanlarda görevlerini yapmaya devam
etmektedirler.
NoSQL olarak adlandırılan model, yukarıdaki
geleneksel modelin dışında, veri saklama, veriye ulaşma ve tutarlılığının
ikinci planda kaldığı ihtiyaçların daha öne çıkması ile gözüktü. Bıg Data
ihtiyaçları, Web ve Mobile uygulamaların ciddi derecede artması NoSQL olgusunu
çok geliştirdi. Bu modelde saklanan veriler “yapısal olmayan” verilerden
oluşuyor ve “mission-critical” ihtiyaçlar genel olarak yok. Böyle beklentilerin
olmadığı NoSQL veritabanları bu anlamda yatay ölçeklemeye daha yatkın olarak
düşünülebilir. Daha çok iş yükünü çalıştırmak için daha güçlü sunucular
kullanarak dikey büyüme yöntemi yerine, daha ucuz sunucular ile yatay büyümenin
tercih edildiği, “High Availability” çözümlerinin veritabanı olanaklarından
çok, yazılım geliştirme teknolojileri ile sağlandığı yeni bir dünya burası. Bu
dünyada merkezi veritabanından çok, dağıtık veritabanı özendirilir. Geleneksel
veritabanlarının olmazsa olmazı ACID (Atomicy, Consistency, Isolation,
Durability) kuralları NoSQL dünyasında sağlanmayabilir.
NoSQL veritabanlarında, SQL dili kullanılmıyor
anlamı çıkmasın. Bazı yazarlar bunu “Not Only SQL” olarak da tanımlıyorlar yani
bir nevi SQL’de kullanabildiğiniz ilişkisel model olmayan veritabanı gibi.
NoSQL veritabanları veriyi saklama metodlarından
dolayı “çok büyük” veriyi, ilişkisel olarak saklama ihtiyacının olmadığı, bu
veriyi daha hızlı getirmek ön koşulu
üzerine tasarlanmışlardır. Yani geleneksel veritabanlarındaki gibi
birbiri ile ilişkili tablolar arasındaki verileri bulup, filtreleyip, işleyip
getirmek gibi ihtiyaçlara burada cevap bulmak zordur. İlişkisel Model, veriyi
alır birbiri ile ilişkili tablolarda kolon/satır şeklinde saklar. Örneğin
“Document Store” modelini kullanan bir NoSQL veritabanı, JSON formatında gelen
verilerin her bir kümesini ayrı bir veritabanı nesnesi gibi saklar.
Istatistik Hesaplar, Gerçek-Zamanlı Analizler,
sürekli, hızlı ve kontrolsüz büyüyen verilerin saklanması (Twitter) gibi alanlar
en yoğun kullanım şekilleridir. Özellikle Twitter gibi uygulamalar, “extreme
scale” diyebileceğimiz şekilde büyük ve ucuz ölçekleme ihtiyacı göstermektedir.
NoSQL bu alanı adreslemektedir.
Günümüz uygulama geliştirme süreçleri çok hızlı
beklentiler içinde olduğundan (rapid application development) ve DBA
gereksinimini en aza indirmek içinde NoSQL veritabanları ilgi görmektedir.
Klasik veritabanı API’lerinin veri erişimindeki
göreceli olarak “overhead”leri daha fazla olduğundan ve NoSQL API’leri bu anlamda
uygulama geliştiriciler tarafından daha revaçta olmaktadır.
Şu günlerde 122’den fazla kendini NoSQL sınıfına
koyan veritabanı bulunmaktadır. Daha derin teknik detayları bir başka yazı
konusuna bırakarak, kendini NoSQL veritabanı olarak tarifleyenlerin 4 ana
grubundan bahsedeyim. 122 ününün yaklaşık %65’i bu 4 modelden birini
benimsiyor.
Key Value
Stores: Key değerleri, hash olarak
tutuluyor. Key kısmındaki veri kısmı ise binary olarak saklanıyor. MemcacheD,
REDIS, WebSphere eXtreme Scale bu modele uyan örnekler.
Document
Stores: Saklanan
veriler/dökümanlar tagged elementler gibi tutuluyor. MongoDB, couchDB bu modeli
kullanan NoSQL veritabanları
Column
Family: Her Storage bloğunda
sadece bir kolon veya kolon kümesine ait veriler saklanıyor. Hbase, Cassandra
güzel iki örnek
Graph
Store: Key değerleri “graph
yapısı” denen bir modelleme ile ilişkilendirilip saklanıyor. Jena, Sesame iki
örnek.
Öyleki, en yukarıda örneklerini verdiğim klasik
veritabanları da, mevcut motorlarına yukarıdaki dört modelden birisini seçerek,
ek “NoSQL” özellikleri ekliyor.
Örneğin Oracle, Key
Value Stores, kullanarak, NoSQL desteği verirken, IBM - DB2 ise Graph
Store modelini kullanarak yollarına devam edeceklerini açıkladılar. Bunun
anlamı, JSON dökümanlarına, SQL ile erişilebilecek olması çok yakında. Bu
olanak geldiğinde yılların SQL bilgisine sahiplik yok olup gitmeyecek ve aynı
becerileri kullanarak NoSQL veritabanlarını kullanabileceğiz.
Şimdilik görünen bunlar ama bu alanda o kadar hızlı
gelişmeler oluyor ki siz bu satırları okurken bile bazı şeyler değişmiş olacak.