22 Mart 2015 Pazar

NoSQL Dünyası - 1 (Veri Yönetiminin Evrimi ve Yeni Cesur Dünya)

İ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.

Bu yazımızda bazı safhaları baypas eder verinin evrimine odaklandık. Büyüyen veriye, yüksek hız tutkusuna, daha fazla paydaşın olduğuna ve veri türlerinin çeşitliliğine vurgu yaptık. Geleneksel veritabanlarının yıllar içerisinde tutarlılığı sağlama konusunda çok güçlü hale geldiğine fakat yeni dünyada bu gücü besleyen yeteneklerin dezavantaj oluşturduğuna değindik. Hız için tutarlılıktan taviz vermek ve değişen talebe ayak uydurmak için dağıtık mimarinin avantajlı olduğunu ifade ettik. Bir sonraki yazımızda dağıtık mimariler hakkında ortaya atılan ve NoSQL çözümlerini doğrudan etkileyen CAP teoremine ve BASE-ACID yaklaşımlarına odaklanacağız.

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

4 yorum:

  1. Çok faydalı ve açıklayıcı bir yazı olmuş elinize saglik

    YanıtlaSil
  2. Çok güzel bir paylaşım. Teşekkürler

    YanıtlaSil
  3. NoSQL'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ıtlaSil
  4. Elinize sağlık çok ufuk açıcı bir yazı olmuş.

    YanıtlaSil