Discover millions of ebooks, audiobooks, and so much more with a free trial

Only $11.99/month after trial. Cancel anytime.

Derinlemesine NoSQL
Derinlemesine NoSQL
Derinlemesine NoSQL
Ebook776 pages2 hours

Derinlemesine NoSQL

Rating: 0 out of 5 stars

()

Read preview

About this ebook

Bu kitapta öncelikle, bir çok NoSQL ürününde kullanılan JSON formatı açıklanmaktadır. Belge tabanlı veritabanlarından MongoDB & Couchbase, uygulamalarla anlatılmaktadır. Öteki NoSQL türlerinin her birine örnek olarak Cassandra, Neo4j & Redis içeriğe katılmıştır. Büyük veri ürünlerinden Hadoop, aramalar için kullanılan Elasticseach de kitabın kapsamında bulunmaktadır.

LanguageTürkçe
PublisherOnder Teker
Release dateJan 11, 2019
ISBN9786058252349
Derinlemesine NoSQL

Read more from Onder Teker

Related to Derinlemesine NoSQL

Related ebooks

Reviews for Derinlemesine NoSQL

Rating: 0 out of 5 stars
0 ratings

0 ratings0 reviews

What did you think?

Tap to rate

Review must be at least 10 words

    Book preview

    Derinlemesine NoSQL - Onder Teker

    Derinlemesine

    NoSQL

    JSON

    MongoDB Couchbase

    Cassandra Neo4j Redis

    Hadoop Elasticsearch

    Önder Teker

    Godoro Yayıncılık

    GODORO YAYINCILIK

    Yayıncı Sertifikası No: 18531

    Kitabın Adı:

    Derinlemesine NoSQL

    Copyright © 2018 Godoro Yayıncılık

    Kitabın Yazarı:

    Önder Teker

    Birinci Basım, Nisan 2018, İstanbul

    ISBN:

    978-605-82523-4-9

    Kapak Tasarımı ve Mizanpaj:

    Önder Teker

    Baskı ve Ciltleme:

    NET COPY CENTER

    Özel Baskı Çözümleri

    İnönü Cd. Beytülmalcı Sk. No:23/A

    Gümüşsuyu, Taksim 34427 İstanbul TR.

    GODORO YAYINCILIK

    Çiğdem 2 Sokak No:7 D:8

    Kaptan H. Rıfat Çırak İş Merkezi Mecidiyeköy

    Şişli / İstanbul

    Telefon/Fax : (212) 213-0275

    http://www.godoro.com

    Derinlemesine

    NoSQL

    JSON

    MongoDB Couchbase

    Cassandra Neo4j Redis

    Hadoop Elasticsearch

    Önder Teker

    Godoro Yayıncılık

    Genel Bilgiler

    NoSQL

    Yalnızca SQL Yok

    İlişkisel veritabanları, daha bilinen adıyla SQL veritabanları on yıllardır kullanımda bulunuyor. LDAP, XML Veritabanı (XML Database) ve Nesne Veritabanı (Object Database) gibi bir çok almaşık veritabanı türü bulunsa da veritabanı dünyasında SQL tartışılmaz ve vazgeçilmez olarak kabul edilmektedir. Ancak teknolojilerdeki ve insanların teknoloji kullanımlarındaki değişiklikler SQL'in bilinen kısıtlamalarının daha fazla göze batmasına yol açmış ve yeni alternatifler ortaya çıkarmıştır. Üstelik ilişkisel veritabanlarıyla yarışan ürünler, doğrudan veritabanının her alanında rekabet etmiyorlar, başka bir konuda uzmanlaştıkları için yalnızca belli alanlarda kullanım alanı buluyorlardı. Ancak son zamanlarda ortaya çıkan veritabanları SQL'i hedef almış ve oldukça düşmanca bir ismi koyulmuştur: NoSQL (SQL Yok!). Ancak daha sonra bu ad yumuşatılmış ve NoSQL sözcüğü Not Only SQL (Yalnızca SQL Değil) gibi bir anlama gelmiştir.

    SQL veritabanları verileri çabuk yazmak ve gerektiğinde sorgulamayla bulma mantığında çalışırlar. O yüzden dizinleme (indexing) gibi çeşitli yöntemlerde sorgulama türü erişimlerin hızlandırılmaya çalışılır. Bu durum, çok değişik türler içeren veriler için erişimde yavaşlık anlamına gelebilmektedir. Bir başka konu da verilerin tablolar halinde saklanmasıdır ve tablo demek her kayıtta aynı türde ve sayıda sütunlar olması demektir. Bazı sütunların boş bırakılması, bu düz yapıyı değiştirmemektedir. Bir tabloya bir alan eklenmesi oldukça sorunlu olabilmekte, çoğu kez veritabanın çevrimdışı bırakma zorunluluğu getirmektedir.

    SQL Olmayan Öteki Teknolojiler

    LDAP

    LDAP (Lightweight Directory Access Protocol - Hafif Dizin Erişim Protokolü) verileri ağaç biçiminde tutuyor. Gerektiğinde ağacın yolu göstererek verilere ulaşılabiliyor. Bir şirket içinde bölümler, bölüm içinde çalışanlar, çalışanlar içinde adres bilgisi gibi bir veri gerçekten de bu sırada birbiri içerisinde bulunuyor. LDAP'ın en temel özelliği yazarken, daha sonra kolay erişilebilecek biçimde yazdığı için yavaş çalışması ancak okurken tek seferde, aramadan erişim yapması nedeniyle hızlı çalışması. LDAP doğrulama (authentication) ve yetkilendirme (authorization) alanında yaygın olarak kullanılıyor. Çünkü bir kişi bir alanda bir kere oluşturulur (yani bir kere yazılır), ancak şifresini değiştirmediği sürecek sadece o kişi için okuma yapılır. Bu da, yazmada yavaş ama okumada hızlı olmasının bir yararı olarak, erişimleri kolaylaştırır.

    Bir çok LDAP sunucu ön yakada LDAP protokolü ile çalışırken verileri arka tarafta SQL ile tutabilmektedir. Ancak kullanıcı için görünen şey yine LDAP arayüzüdür. LDAP veritabanlarının bir özelliğini de çalışma zamanında nesnelere alanlar eklenebilmesi ve bunların tablolarda olduğu gibi her kayıt için geçerli olmayabilmesidir. Bir çalışana arabasının plaka numarası gibi bir bilgi eklendiğinde diğer çalışanlarda öyle bir sütun olmak durumunda değildir. Bu da daha esnek bir şema yapısı oluşturuyor ve çalışma zamanında bir nitelik (bir sütun) eklemek çok kolay oluyor. Çünkü eski kayıtlar bundan etkilenmiyor.

    XML

    SQL veritabanlarında tablo yapısı belli tipte verileri yan yana tutulması anlamına geliyor. Örneğin çalışanlar bir tabloda adresler bir başka tabloda tutuluyor. Oysa önceleri örün beti (web page) içeriğini tutmak için düşünülmüş XML (Extensible Markup Language - Genişletilebilir İşaretleme Dili), birbiriyle ilişkili verileri bir arada tutuyor. Bunun anlamı verileri çeşitli tabloları birleştirmekle uğraşılmaması. Ancak bu yaklaşım veri erişiminde mantıklı olarak görülse de veri saklamakta pek başarılı olamamaktadır. O yüzden XML veri saklamaktan çok, veri iletişiminde kullanılıyor.

    Bir SQL veritabanında bir konuyla ilgili veriler çeşitli tablolardan toplanarak bir belge oluşturuluyor ve gönderiliyor. Alıcı da aldığı belgeyi ayrıştırıyor ve gerekiyorsa yine SQL veritabanında çeşitli tablolara yerleştiriyor. SQL veritabanlarının hemen hepsi XML sorgularını destekliyor. Dolayısıyla XML dili SQL diline bir alternatif olmaktan çok onu tamamlayıcı bir teknoloji olarak ortaya çıkıyor. Doğallıkla, veritabanı dışında alanlarda XML kullanımının SQL yakasında hiç bir karşılığı yok. SQL ve XML kesişim kümesi olan iki ayrı bir küme gibi ortaya çıkmaktadır.

    ORM

    SQL veritabanlarında tablo yapısının iki boyutlu olması nesneye yönelik programlamanın sınıf veya nesne denilen yapısını doğrudan uymuyor. Özellikle C++, Java, C#, PHP gibi dillerde nesnelerle çalışan insanlar üç boyut (3B) ile tanımlı veriyi iki boyut (2B) tanımına indirerek SQL veritabanına yazıyor. Gerektiğinde de iki boyutlu verileri toplayarak tekrar nesneler oluşturuyorlar. Nesneye yönelik programlama ciddi ve büyük projelerin neredeyse olmazsa olmaz durumunda olduğu için, bu 2B-3B yansıtma işlemi geliştirici tarafında fazladan geliştirme anlamına geliyor. Bunu önlemek için ORM (Object-Relation Mapping / Nesne-İlişkisel Eşleşme) adı verilen teknikler kullanılıyor.

    Java, C#.NET veya PHP dillerinde ORM çatısı adı verilen bu teknikler geliştiriciyi bu sıkıntıdan kurtarıyorlar. Çok az SQL yazarak geliştirme yapılıyor. Sorgulamada kimi zaman SQL diline benzeyen bazı diller yapmak durumunda kalsalar da, temel işlemlerde SQL kullanılmıyor. Ancak bu tür çözümlerde geliştirici SQL yazmasa da kullanılan çatı bunu yaptığı için SQL diline alternatif sayılmıyorlar. Yalnızca SQL dilini doğrudan kullanmak yerinde dolaylı kullanmak anlamına geliyor. Öte yandan, ORM çatıları SQL diline PL/SQL, T-SQL gibi programlama özelliklerine karşı bir almaşık oluşturuyorlar. Çünkü iş mantığı çoğu kez programlama dilinde yazılıyor, veritabanları yalnızca veri depolama işlevi görüyorlar.

    Nesne Veritabanı (Object Database)

    Nesneleri doğrudan veritabanına yazıp okuyan sistemler de bulunmaktadır. Nesne Veritabanı (Object Database) ya da kısaca ODB adı verilen bu yapılar temel okuma ve yazma işlemelerini doğrudan yapıyorlar. Dahası iç içe verilerde kullanıcının yazarken ayrıştırması ve okurken birleştirmesi gibi işleme gerek duyulmuyor. Basit veri yapılarında daha yavaş olmalarına rağmen karmaşık verilerde nesne veritabanları çok hızlı çalışıyor. Belli alanlardaki açık üstünlüklerine karşın nesne veritabanları çok fazla yaygın değildir. Bunun bir kaç nedeni bulunuyor. En önemlisi yapılarının karmaşık olması ve nesneye yönelik programlama yapmayanlar tarafından pek fazla anlaşılmaması. Ancak en önemli nedenin bilinmemesi nedeniyle çok fazla destek bulunmaması. SQL herkes tarafından bilinirken ODB terimini duymuş olanların sayısı bile oldukça azdır.

    Neden NoSQL?

    SQL dilinin on yıllar süren başat konumunun sorgulanmasının elbette belli nedenleri var. Bunlardan en önemlilerinden Büyük Veri (Big Data). Eskiyle karşılaştırılamayacak oranda veritabanları büyümektedir. Bir başka etmen, bazılarının Büyük Kullanıcılar (Big Users) da dediği kullanıcı sayısının artışı. NoSQL yapılarını gerekli kılan nedenlerden biri de son zamanların en vızıltı sözü (buzzword) Bulut Bilişim (Cloud Computing) konusudur.

    Big Data

    Daha önce veritabanları bir çeşit defter olarak düşünülüyordu. Dolayısıyla bilgisayarlara yazılan kayıtlar daha önce defterlere yazılan verilerden ibaretti. Raporlama gereksinimi de sadece defterde bir kayıt aramaktan ibaretti. Genelde veri girişi denince bir yazma, raporlama denince bir okuma yapmaktan ibaretti. Kurumsal yazılımlar ERP, HCM ve CRM gibi yazılımlarla yapılan her işin neredeyse kaydını tutar oldular. Ancak çalışan sayısı ne kadar büyük olursa olsun, işletmede yapılan işlem sayısı ne kadar çok olursa olsun bir kaç sunucu ile karşılanabilecek düzeydeydi. Kurumsal dünyada ciddi kayıtlar tutulurken şimdi bir kedi videosunun tekrar gönderimi ve yorumlar nedeniyle milyonlarca kayıt üretebiliyor. Üstelik eskiden bir kere yaz gerekirse okursun gibi bir durum da yok. Her şey anında cereyan ediyor. Bir gecede bir uygulama milyonlar tarafından kullanılır hale gelebiliyor ve korkunç miktarda veri üretebiliyor.

    Çok Kullanıcı

    Verideki büyüme kadar önemli bir konu da kullanıcı sayısındaki büyüme. İnternet'in kullanımının sürekli artışı ile ile artık veritabanına yazanlar çalışanlar değil ziyaretçiler oldular ve en basit bir site bile en büyük firmalardan daha fazla kullanıcıya sahip oldu. Yapılan araştırmalar küresel çevrimiçi kullanıcı sayısının milyarlara ulaştığını gösteriyor. Akıllı telefon kullanıcıların sayısı da milyarlar düzeyine çoktan gelmiş durumda.

    Bulut Bilgisayım (Cloud Computing)

    Uygulamaların hem kullanıcılardan hem de firmalardan uzakta, bulutların arasında olduğu uygulama modeline Bulut Bilgisayım (Cloud Computing) adı veriliyor. Daha önce her firma için ayrı uygulamalar, sunucular ve veritabanları varken bulut bilişim, bir çok firmanın verisini aynı veritabanında tutuyor. Firmaların gereksinimlerine göre veritabanlarını kullandırıyor ve ona göre onlara fatura kesiyor. Bu biçimde, önce bir kaç kullanıcı için çalışan bir uygulama binlerce kullanıcıya çok kolay ölçeklenebiliyor. Bir çok firmanın verilerinin aynı veritabanında tutulması, her firmanın verisinin birbirinden farklı olması SQL veritabanlarıyla çalışmayı biraz daha zorlaştırıyor.

    Yapısız Veri (Unstructured Data)

    SQL veritabanları, tasarım mantıkları gereği yapılı verilerle çalışıyorlar. Bir kayıt için hangi veriler tutulacaksa önceden belirleniyor ve veriler buna uygun toplanıyor. Bazı kayıtlarda bazı verilerin olmaması durumunda o sütün boş bırakılıyor. Çalışma zamanında bir sütun daha eklenmesi işlem başarımı açısından çeşitli sorunlara yol açabiliyor. Oysa İnternet'teki bir çok uygulamanın katı bir veri modeline ihtiyacı yok. Bir kayıtta olan alanlar diğerinde olmayabilir.

    SQL veritabanlarının bir başka özelliği de aynı türde verileri bir arada tutması, aynı konudaki verileri ayırması. Örneğin bir kişinin kendisi bir tabloda adresi başka tabloda olmak zorunda. Binlerce kez erişilse dahi SQL bunları iki ayrı tabloyu birleştirerek sorguluyor. Elbette gelişmiş veritabanı sunucular sık kullanılan veriler için başarım artırıcı önlemler alıyorlar. Ancak İnternet ortamında çok veri var ve bunlar aynı sıklıkta erişilmiyor. Bunların çoğu; bir kullanıcıya, bir belgeye veya bir hizmete ait belli bir ögeye ait özel veriler durumunda. Dolayısıyla bir öğeye ait verileri, ayrı türlerde dahi olsa bir arada tutulması önemli bir başarım sorunu oluşturuyor.

    Ölçeklendirme (Scaling)

    SQL veritabanları verinin büyüklüğünde veya erişimindeki artışları yukarı doğru ölçekleme (scaling) yani donanımın gücünü artırarak çözüyorlar. Birden çok sunucuyla salkımlı (clustered) bir yapı olsa bile aynı veri sunuculara kopyalanıyor. Bunun nedeni bir verilerin birbiriyle çok ilişkili olması nedeniyle her sunucudaki veriye erişme ihtiyacının doğabilmesi. Genelağdaki veri ne kadar güçlü olursa, çok çekirdekli işlemciler, katı durumlu diskler kullanılsa da bir sunucuya veya bir kaç sunucuya sığmıyor. Binlerce sunucuya dağıtılmış birbiriyle çok fazla ilişkili olmayan verilerde SQL sunucuların yaklaşımı yeterli veya gerekli olmuyor.

    Yönetim Kolaylığı

    SQL veritabanlarının en büyük özellikleri yönetim zorluğudur. Veritabanı kullanan hemen her firmada bir veritabanı yöneticisi (DBA - Database Administrator) bulunmaktadır. Zira SQL sunucular karmaşık ve gelişmiş özellikleri bırakın sıradan bir bilgisayar uzmanını, veritabanı geliştiriciler için bile oldukça çetin bir iş. Çok sayıda ve karmaşık veriyi bir yere koymak, oldukça hantal bir yapının uzman kişilerce bakımını gerekli kılıyor.

    NoSQL Özellikleri

    SQL'in, daha doğrusu SQL diliyle çalışan İVTYS (RDBMS) yazılımlarının ortaya çıkardığı sıkıntıları giderdiğini iddia eden bir çok veritabanı ürünü var. Bunlar SQL veritabanlarına almaşık olma iddiasındalar ve çok keskin bir ifadeyle Yok SQL (No SQL!) diyorlar. Aslında NoSQL bir ürün olmadığı gibi bir ürün türü de değil. SQL veritabanları az çok birbirine benzer özellikler sunarken NoSQL aslında SQL veritabanları dışında kalan her tür veritabanın ortak adı. NoSQL tanımına uyan ürünler arasında ortak bir yaklaşım yok.

    Yalnızca SQL Değil - Not Only SQL

    NoSQL ifadesi SQL yok anlamına geldiği halde bir çok NoSQL veritabanı SQL veya SQL benzeri bir dille sorgulama yapılmasında izin vermektedir. O yüzden de NoSQL sözcüğünü No SQL (SQL Yok) değil Not Only SQL (Yalnızca SQL Değil) anlamına geldiğini belirtenler bulunmaktadır.

    NoSQL Türleri

    NoSQL kendi arasında çeşitli öbeklere ayrılıyor. Bunlardan kimileri aşağıdaki gibi sayılabilir:

    Belge Veritabanları (Document Databases)

    Anahtar-Değer Depoları (Key-Value Store)

    Çizge Depoları (Graph Stores)

    Sütun Depoları (Column Stores)

    Nesne Veritabanları (Object Database)

    Belge Veritabanları (Document Database)

    Büyük ve karmaşık verilere bir anahtar atanması temeliyle çalışan veritabanlarına belge veritabanı (document database) adı verilir. Belli bir işlemle ilgili bilgileri bir bütün olarak tutan yapıya belge (document) adı verilir. Bir belge, veritabanına belli bir açar (key) ile konulur ve gerektiğinde bu anahtar verilerek veriye ulaşılır. Belge olarak XML ve JSON gibi biçimler gibi doğrudan ofis belgeleri de saklanabilmektedir.

    Açar-Değer (Key-Value)

    Verileri bir anahtarla saklandığı ve gerektiğinde yine o anahtarla erişildiği veritabanlarına anahtar-değer deposu (key-value store) adı verilmektedir. Bu tür veritabanları içerdikleri bilginin yapısını, yani şemayı tutmazlar. Girilen verinin doğruluğu ve geçerliliği veritabanı değil onu kullanan uygulamaca sağlanır.

    Çizge (Graph)

    Ağ türü veriler için çizge deposu (graph store) türü veritabanları kullanılır. Bunlar nesneleri bir düğüm olarak tanımlar ve her düğüm arasında bir veya daha çok çizgi (yani ilişki) kurulur. Toplum Ağları (Sosyal Network) sitelerindeki veriler için birebir olan bu veritabanı türü, sıradan SQL sunucularda çok zor kurulabilecek bir ağ yapısının çok kolay gerçekleştirilmesine olanak tanıyor.

    Sütun Deposu

    Bu tür veritabanları, bir kayıttaki bir çok sütuna erişmek yerine bir sütundaki bütün değerlere erişilmesi durumunda çok yüksek başarımlar veri erişimi sağlar. Verileri satır satır tutmak yerine büyük sütunlar halinde tutan veritabanı türlerine sütun deposu (column store) veya geniş sütun deposu (wide column store) adı verilmektedir.

    Nesne Veritabanları

    Aslında NoSQL olarak ilk akla gelen veritabanı türü olmasa da nesne veritabanı (object database) ya da kısaca ODB veritabanları da SQL kullanmadığı için NoSQL grubuna dahil edilmektedir. Bu tür veritabanları nesneyi tablolara parçalamadan, yani içindeki nesnelerle birlikte doğrudan depolama birimlerinde saklar ve gerektiğinde bir bütün olarak geri verir.

    MongoDB

    NoSQL veritabanları arasında en bilinenlerinden birisi MongoDB adlı üründür. JSON formatında verileri saklama özelliği bulunmaktadır. Aslında Binary JSON (İkilik JSON) olarak işlemleri yaptığı için BSON adını veriyorlar. Erişim için Java, C#, C/C++, PHP ve JavaScript gibi bir çok dil kullanılıyor. Elbette her biri için bir sürücü yüklemek gerekli olabilmektedir. Sunucu tarafında komut satırı arayüzü bulunmakta ve JavaScript diliyle komutlar yorumlanarak çalışmakta.

    Hadoop

    Google MapReduce (Eşle-İndirge) adı verilen büyük verileri paralel ve dağıtık salkımlarda işlemek için özel bir sistem geliştirdi. Apache Hadoop bu sistemin açık kaynaklı sürümü olarak üretildi. Eşleşme-İndirgeme (Map-Reduce) sistemi bir işlemin önce parçalara bölünmesi, yani eşleşme (map) aşamasını sağlıyor. Her bir parça işini yaptıktan sonra indirgeme (reduce) işlemi ile her parçanın ürettiği sonuç özetlenerek tek bir sonuca gidiliyor. Böylelikle aynı işlemi parçalar halinde bir çok sistem gerçekleştirmiş oluyor. MongoDB, Hadoop ile entegre çalıştığında paralel ve dağıtık çalışan bir veritabanı işlevi görüyor.

    Büyük Veri (Big Data)

    Büyük Veri Ne Demek?

    Büyük Veri (Big Data)

    Bilgisayar kullanımın ilk dönemlerinde kurumların bilişim gereksinmelerini karşılayan veri miktarı çok azdı. Genelde veritabanlarında, bilgisayar öncesinde defterlerde tutulan veriler bulunurdu. Ancak bilgisayar ve bilgisayar gibi çalışan akıllı aygıtların yaygın kullanımı ile birlikte bir kurumun çalıştığı veriler kökten bir biçimde arttı. O denli büyük boyuta verilerle çalışılır oldu ki bir işletmedeki bilişim çalışanları bile bütün veriyi tümüyle yönetemez duruma geldiler. Dahası Genelağ (Internet) ve Örün (Web) ile birlikte başka kurumlarla veri alışverişi sonucunda üzerinde çalışılması gereken veri, nitelik ve nicelik olarak son derece genişledi. Çok sayıda veri ve bu veriyle çalışmak için alınan önlemler ve geliştirilen düzenlere büyük veri (big data) adı verilmektedir.

    Bir veya

    Enjoying the preview?
    Page 1 of 1