İnsanoğlu daha rahat düşünme, kendini ifade etme, birbirleri
ile haberleşme, bir hatırayı ölümsüzleştirme, bir bölgenin haritasını çıkarma, sanatsal
ve kültürel miras aktarma gibi daha birçok ihtiyaca, yüzlerce yıl önce yazı
veya çizimlerle cevap verebildiğini fark etmiştir. Olayları ve fikirleri kalıcı
hale getirmek için birçok teknik denemiş, talep arttıkça devrimsel
değişiklikler yapmaya cesaret bulmuştur. Bilgileri daha uzun süre saklayabilme
ve yayma isteği taş duvarları, kil tabletleri, bitki temelli papirüsü, hayvan derisinden parşömeni ve en son günümüzde yaygın
olarak kullanılan selülozdan yapılma kâğıdı
kullanmaya sevk etmiştir.
Eski çağlardan beri kütüphanelerinde yazılı metinlerin çok
olduğu bölgelerde daha fazla bilim ve sanat üretilmiş, bu yönetimler daima
güçlü olmuşlardır. Amerika’daki “Library of Congress” ve İngiltere’deki
“British Library” kütüphaneleri, bünyesinde
barındırdıkları 150 milyon kayıtlı
öge ve kabul ettikleri yıllık 1.75
milyon ziyaretçi sayısı ile dünyanın en büyük kütüphaneleri olmuşlardır. Türkiye’nin
en iyi kütüphanesi olarak kabul edilen “Atatürk
Kitaplığı” kütüphanesinde ise yaklaşık 500
bin yazılı eser bulunmaktadır. Vatikan
Kütüphanesi’nde bulunan Osmanlı
arşivlerinin elimizdekilerden daha iyi durumda olduğunu da düşünürsek içinde
bulunduğumuz dünyanın dinamiklerinin bu şekilde olmasına şaşırmamalıyız.
Elektrik ve elektronik devrimi
Tarihin derinliklerinden gelen daha fazla veri toplama ve analiz edip anlam çıkarma çabası 1940’larda kullanılan ve bugünkü bilgisayarlar ile benzer mantıkta çalışan 30 tonluk ENIAC’ı üretmeyi de tetiklemiştir. İlk olarak Amerika tarafından savaşta kullanılması planlanan bu alet, topu topu hafızasında 200 sayı saklayabiliyor, saniyede 385 adet çarpma işlemi yapabiliyor, 60 saniye yol alan bir savaş topunun menzilini 20 saatlik bir çalışma ile hesaplayabiliyordu. Yine de devrim niteliğinde bir veri depolama ve işleme aracı olarak kabul gördü, geliştirildi ve bu sayede günümüzde çok yüksek işlem gücüne sahip bilgisayarlar üretilebildi.
Bilgisayarlar ilk üretildiklerinden bu yana veri depolama ve
işleme konusunda bir hayli önemli noktalarda konumlandırıldı. Bilginin bir güç olduğunu çok önceden fark
eden insan, doğal olarak daha fazla bilgi depolama ihtiyacı hissetti. Bu sebeple
verinin tutarlılığının korunması,
belli bir düzende olması, kolay ve
hızlı erişim sağlanabilmesi,
gerektiğinde zahmetsizce bakımının
yapılabilmesi, karar vermeyi kolaylaştıracak şekilde sonuçlar üretilebilmesi ve güvenlik
altında olması için çeşitli veri yönetim sistemleri geliştirildi.
Veri yönetim sistemleri neler?
1960’lardan bu yana birçok veritabanı yönetim sistemi (DBMS)
kullanıldı ve kısmen veya tamamen terkedildi. Bazen veriler bir ağaç yapısında hiyerarşik
(HDBMS) olarak, bazen bir ağ
mantığında birbirleri ile ilişkilendirilerek (NDBMS), bazen de bağımsız varlıklar (entity) ve aralarındaki özel ilişkiler
şeklinde (RDBMS) depolandı. Gerçek
dünyanın nesne yönelimli (Object Oriented) programlama yaklaşımı ile rahatça ifade
edilebildiğine karar verildiği dönemlerde, aynı sistem veritanları için de
kullanılmaya çalışıldı (ODBMS - ORDBMS).
Tüm bu sistemler bir dönem popüler olsa da en çok talep gören ve standartları
oturmuş olan ilişkisel veritabanı yönetim sistemi yani RDBMS oldu.
İlişkisel veritabanı yönetim sistemi nasıl çalışır?
Uzun zamandır en fazla kabul gören ilişkisel veritabanı
yönetim sistemi, MSSQL, ORACLE, MySQL gibi ürünlerin mimarisini oluşturmaktadır. Bu sistem gereği veriler
satır ve sütunlar halinde tablo
dediğimiz yapılarda tutulur, tablolar arası ilişkiler primary ve foreign key
olarak isimlendirilen anahtarlar
yardımıyla ifade edilir ve verilere hızlı erişim için indeksler dediğimiz çeşitli ağaç yapıları kullanılır. İstemciler
RDBMS’de belirli yapıda tutulan verileri ANSI/ISO
standartları ile geliştirilip korunan SQL
dili ile çağırır. Bununla birlikte karar yapıları, döngüler gibi programatik
çalışmalar ise tercih edilen ürünün SQL temelli genişletilmiş hali (T-SQL,
PL/SQL, SQL – PL ) ile gerçekleştirilir.
RDBMS verinin bütünlüğünü, sağlamlığını, tutarlılığını,
güvenliğini sürdürme konusunda çok güçlüdür. Birden fazla istemcinin aynı
kaynağa erişmesi sırasında çıkabilecek tutarsızlıkları en aza indirmek için sistem
ACID (Atomicity, Consistency,
Isolation, Durability) özelliklerini sağlamakla yükümlüdür. Bu özellikler bazen
bir satır kaydı bazen komple veritabanını kilit
altına alarak diğer istemcilerin mantıksız bir işlem yapmasını engelleme
eğilimindedir. Bununla birlikte yıllarca veri girişi sırasında gerçekleşen
insan hataları sebebiyle çeşitli anomaliler oluşsa da bunun sebebi sistem değil
sistemden yeterince faydalanamamak olmuştur. Neyse ki veritabanlarını ekleme,
silme, güncelleme konusunda en uygun hale getirmek için çeşitli fikirler ortaya
atılmış ve bu fikirler tasarımcılar tarafından benimsenmiştir. Bunlara normalizasyon kuralları denir. Tüm bu sistemsel
yaklaşımlar RDBMS’in güçlü yanını oluşturur. Tabi aynı zamanda en zayıf yanını
da.
Depolanan verilerden nasıl kolayca fayda üretebilirim?
Verileri işe yarar şekilde depolayabilmek için geliştirilen
sistemler ve tutarlılığını sağlayabilmek için ortaya konulan bir nevi etik kurallar,
belli yapıdaki verileri saklama problemlerini neredeyse çözmüştür. Tabi bu
durum insanları başka bir ihtiyaca cevap aramaya yönlendirmiştir. Verileri daha kolay nasıl analiz edebilirim
ve yolumu belirlemek için sonuçları nasıl birleştirebilirim? Bu ihtiyaca
cevap bulabilmek için geleneksel veritabanlarına farklı bir bakış açısı ile
yaklaşılmış ve veriambarları
doğmuştur. Veriambarı temel olarak günlük hayatta sayısal konular üzerinde
düşünürken aklımızdan geçirdiklerimize bakılarak ortaya konulmuş bir modeldir. Basitçe
bir biri ile alakalı sayısal ağırlıklı veriler bir tabloda (Fact – örneğin satış), o sayısal verileri incelemek istediğimizde
kullandığımız metinsel ağırlıklı veriler diğer tablolarda (Dimension – örneğin müşteri, bölge, zaman) tutulur ve bunlar arasında
sayısal tablolardan konu odaklı metinsel ağırlıklı tablolara ilişkiler kurulur. Bu yaklaşım
sayesinde veri giriş etkinliğini arttırmak için normalizasyon kurallarını
uyguladığımız OLTP modelden çok daha
hızlı analiz yapma imkânı veren
denormalize OLAP model doğdu.
Özellikle firmalar arasında giderek artan rekabet yüzünden birim zamanda verilecek karar miktarı
da arttı. Dolayısıyla insanüstü bu ihtiyaç karşısında karar vermeyi
kolaylaştıracak sistemlere daha fazla kafa yorulur oldu (iş zekâsının doğuşu). Bu uğraş nihayet veriambarı mantığında
çalışan ancak bazı hesapların önceden yapılıp içerisinde saklandığı yapıları,
yani OLAP küplerinin (Cube)
hayatımıza girmesini sağladı. OLAP küpleri sayesinde muhtemel soruların
cevapları önceden hazır olduğu için
geleneksel sistemlerden çok daha fazla analiz performansı ve esnekliği
sağlanmaktadır.
Acaba her şey bu kadar mı?
Buraya kadar konuştuğumuz yolda çeşitli safhalarda yeni
yaklaşımlar geliştirilmeye devam ediliyor. Ortaya atılan tüm bu sistemler birçok
açıdan güvenilir ve tutarlı olduğu için kabul gördü ve yaygın olarak kullanıldı.
Ancak artık göz ardı edilemeyecek kadar büyüyen ve kuruluşların kararlarını
doğrudan etkileyebilecek güce sahip dünyaya açılan başka bir yol daha var. Nihayet
kuruluşlar bu dünyayı görüp ciddiye alınması gerektiğine ikna oldular ve merakları
sayesinde temelleri 2000’lerde atılan yeni veritabanı yönetim sistemlerinin (NoSQL, NewSQL) geliştirilmesine motivasyon
oluşturdular.
Bu yeni cesur dünyada verileri RDBMS’te olduğu gibi belli kalıptaki satır ve sütunlara
sahip tablolarda tutmak bazen mümkün
olmaz. Farklı gruptaki veriler arasında ilişki kurmak veya verilerin doğruluğunu, tutarlılığını sağlamak
için kilit mekanizması kullanarak
erişimi kısıtlamak işimize gelmez. Veriler
bazen o kadar hızlı üretilir ki onu yakalayıp saklamak yerine o anda bir şeye karar vermek isteyebiliriz.
Yeni cesur dünyada neler var?
Bu yeni dünyada daha fazla veri (Big Data), çok daha fazla kullanıcı (Big User), çok çeşitli veri türleri (structed, semi-structered, unstructured), bulut tabanlı hizmetler ve
sadece bir birleriyle konuşarak kararlar alabilen geveze akıllı cihazlar yer
alır (IoT). Mobil cihazlar, televizyonlar,
SMS/MMS, GPS cihazları, log üreten yazılımlar ve cihazlar, sensorlar, konuşmayı
metne çeviren yazılımlar, Web uygulamaları, bulut hizmetleri, video ve fotoğraf
üreten dijital kamera teknolojileri, sosyal iletişim araçları, bilgisayar
oyunları devasa miktarda veri üretir. 64
KB’lık belleğe sahip bir bilgisayar desteğiyle aya çıkan insanoğlu artık sıradan bir günde sadece Twitter’da 1 terabayt mesaj üretmektedir.
IDC'nin bir araştırmasına göre 3 milyar insan 2013-2014
yıllarında aylık olarak 35 milyar saat
internet ortamında vakit geçirmektedir. Bu popülasyonun 1.75 milyarı akıllı telefon kullanıcıları olarak tespit edilmiştir.
Bu araştırma sonucunda internete bağlı
20 milyar cihazın 2014 yılında 4.4
Zetabayt (1 zetabayt = 1 milyar terabayt) veri ürettiği gözlenmiş ve bu
sayıların 2020 yılına kadar 44 zetabayt veriye ve 32 milyar internete bağlı cihaza
erişeceği ön görülmüştür.
Bu kadar büyük veriyi ve hızla değişen istemci talebini
yönetebilmek için sisteminizi iki farklı modelde ölçeklendirebilirsiniz:
Dikey Ölçeklendirme (Vertical
Scaling – Scale Up): Tek bir cihaza donanım yatırımı yapmak manasına gelir.
Örneğin CPU, Memory, Disk artırımı yapmak bu kapsamdadır. Sanallaştırma ile bu yöntem
daha pratik hale gelmiş olsa da donanım yatırımı yapmak pahalı ve riskli olabilmektedir.
Yatay Ölçeklendirme (Horizontal
Scaling – Scale Out): Daha ucuz cihazları birleştirerek güçlü bir sistem
oluşturma esasına dayanır. Böyle bir sistemi büyütüp küçültmek daha az
maliyetli ve daha az risklidir.
Aslında her şey yolunda gidiyor gibiydi.
Cihazları güçlendirmek veya sisteme yeni bir cihaz eklemek
yeni dünyanın getirilerine kısmen cevap verebilmektedir. Kısmen diyoruz çünkü
mesele sadece çok veri (Big Data) veya çok kullanıcı (Big User) değil. İşi daha
da zorlu hale getiren, veriyi yazma-okuma işlemlerinde belirli bir kalıpla sınırlanmama ve yüksek hızda cevap alma tutkusudur. Geleneksel
veri tiplerinin yanı sıra, bir belge,
koordinat, hiyerarşik bir düzen, bölgesel türde bilgi, grafiksel gösterim veya
bir video saklanmak istenebilir. Hatta her bir kayıt bir birinden farklı özelliğe de sahip olabilir. Örneğin en basiti müşteriler
hakkında bilgi toplamak istediğinizde bazı müşteriler için bir, bazı müşteriler
için birden fazla telefon numarası ile
karşılaşırsınız. Bununla birlikte bazı müşterileriniz telefon numarası vermeyip
e-posta veya fiziksel adres
bilgilerini sizlerle paylaşmak isteyebilir. Belki sadece koordinat bilgilerini tutmak zorunda kalacağınız müşterileriniz
bile olabilir. Kim bilir belki de bazı müşteriler ile iletişime geçmek için bir
prosedürle ilerlemeniz gerekebilir.
Bu durumda gerekli belgeleri müşteri
bilgileri ile birlikte tutmak isteyebilirsiniz. RDBMS yapısal verileri (Structured) yani bir tabloda tutulmaya
uygun verileri yönetme konusunda uzmandır. Ancak etrafımıza baktığımızda birçok
kaynak yapısal olmayan (unstructured)
türden verileri üretmektedir. Buna cevap olarak NoSQL çözümlerinde veri girişi
için bir şema zorunluluğu bulunmamaktadır (elbette kurallar var). Yapısal
olmayan veriler için en uygun ortamı NoSQL çözümleri sağlamaktadır.
Geleneksel sistemlerde yeni dünya için çözümler üretildi mi?
Microsoft SQL Server yıllar içerisinde yeni yetenekler
kazandı ve yapısal olan veya olmayan veriyi binary da olsa tutma becerisine
kavuştu. Compression, Partition,
FileStream, FileTable, InMemory OLTP, ColumnStore, Buffer Pool Extention, AlwaysOn
gibi yenilikler ile bir yere kadar ihtiyaçlara cevaplar üretilebildi. RDBMS
ürünleri yeni dünya ihtiyaçlarına cevap verme konusunda çokça çabalasa da yeterince
tatmin etmiştir diyemeyiz. Çünkü RDBMS ürünleri verilerin tutarlı olması
konusuna (Consistency) odaklanmış
durumdadır ve ACID özelliklerini sağlama konusunda son derece yeteneklidir. Bu yetenekler
daha az makinenin daha fazla kısıtla çalışmasına veya tek bir süper makinenin
saniyeler içerisinde inanılmaz boyutlara ulaşan taleplerin altında ezilmesine
sebebiyet vermektedir.
Peki, nasıl mücadele edilebiliyor?
Bu hız tutkusu bazı tavizler vermeyi zorunlu hale getirmiştir.
Yeni dünya tutarlılıktan (Consistency)
daha çok erişebilirliğe (Availability)
önem vermektedir. Bu eğilime cevap vermek için ortaya atılan NoSQL çözümleri tek bir makinenin sınırlarından kurtulup binlerce makinenin birlikte
çalışmasına olanak vermiştir. Tutarlılık derdi ön planda olmayan NoSQL
çözümleri geleneksel veritabanlarındaki kilit mekanizmasına benzer bir
mekanizmayı kullanmayıp eşzamanlı
çalışma imkânı sunmaktadır. Zaten CAP
Teoremi gereği dağıtık sistemler
birlikte çalışabilmesi için tutarlılık (Consistency),
erişebilirlik (Availability) ve
sistemin bir kısmı zarar gördüğünde işleyişin devam etmesine olanak tanıyan parça
toleransı (Partition Tolerance)
özelliklerinden en fazla ikisini
sağlayabilmektedir. Verileri bu türden yönetme yaklaşımına BASE (Basically Available Soft-state services
with Eventual-consistency) adı verilmektedir. Bir sonraki yazımızda
bu konulara odaklanacağımız için bu kısmı özet bir ifade ile geçmek istiyorum;
RDBMS ürünlerindeki ACID yaklaşımı veri
tutarlılığına odaklanırken, NoSQL ürünlerindeki BASE yaklaşımı daha çok erişebilirliğe odaklanmaktadır. Mesela
Facebook’ta bir arkadaşlık isteğini kabul ettiğinizde başka bir bilgisayarda
henüz kabul edilmemiş olarak göründüğünü fark etmişsinizdir. Tabi ki iş yüküne
bağlı olarak güncel bilgiler diğer makinelere de bir süre sonra yansımaktadır.
Artık tamamen NoSQL çözümlerine mi yönelmeliyiz?
Yeni dünyada ihtiyaca özel çözümlerin bir arada kullanılması
fikri ön plana çıkmaktadır. RDBMS ürünleri verinin tutarlılığının kritik olduğu yerlerde (mesela finans) tercih
edilmesi gereken ve genelde ücretli
ürünlere ait bir sistem olarak karşımıza çıkarken, NoSQL ise işlemlerin sürekli devam etmesi gereken durumlarda
(mesela sosyal medya) tercih edilen ve genelde
ücretsiz ürünlere ait sistemler olarak kaşımıza çıkmaktadır.
Serinin Devamı;
NoSQL Dünyası - 2 (Veri Tutarlılık Modelleri ACID vs BASE)http://www.abdullahkise.com/2016/02/nosql-dunyas-2-veri-tutarllk-modelleri.html
NoSQL Dünyası - 3 (CAP Teoremi)http://www.abdullahkise.com/2017/01/nosql-dunyas-3-cap-teoremi.html
Çok faydalı ve açıklayıcı bir yazı olmuş elinize saglik
YanıtlaSilÇok güzel bir paylaşım. Teşekkürler
YanıtlaSilNoSQL'e müthiş bir giriş. anlatım şekli,tutarlılığı,bütünlüğü her açıdan kusursuz. türkçe'ye kazandırdığınız bu kaynak için sonsuz şükranlar..
YanıtlaSilElinize sağlık çok ufuk açıcı bir yazı olmuş.
YanıtlaSil