NoSQL Buğra Çakır
Sunum Planı 1. Veritabanı sistemleri, tarihsel gelişim 2. NoSQL Dünyası 3. Hadoop Ekosistemi
RDBMS Sistemleri 1. System R, IBM SEQUEL 2. Ingres QUEL 3. Objeler ve bunların ilişkileri -> Edgar Frank "Ted" Codd A Relational Model of Data for Large Shared Data Banks, Larry Ellison Oracle 4. Objeler ve ilişkiler üzerinde işlem yapmayı sağlayan operatörler -> SQL 5. Veri bütünlüğünü sağlayan yöntemler 3
Büyük Balıklar 4
RDBMS Pastası IBM Oracle Microsoft Other 5
Açık Kaynak Alternatifler 6
Neden başka bir veritabanı? Yeni başlayan her projede ilişkisel veritabanı tercih ediliyor??? 7
EES - Eşzamanlılık Veri üstünde aynı anda yapılan işlemler Koordinasyon gerekiyor. Veri kaybı riski var. 8
EES - Entegrasyon Farklı uygulamalar birbirleriyle iletişime geçmek istiyor. Aynı veritabanı üzerinde birden fazla uygulama işlem yapabilir. Enterprise Integration Patterns : [Hohpe ve Woolf] 9
EES - Standartlaşma SQL sürümleri birbirine benziyor. Öğrenmek çok kolay. Birinden diğerine geçmek kolay. 10
Veri Modeli-Nesne Tasarımı Nesne modeli ile veri tabanındaki veri modelini birleştirmek gerekiyor. Birindeki değişiklik diğerini etkiliyor. Eşleme yöntemleri devreye giriyor. ibatis Hibernate 11
Kullanım Modeli -RDBMS 12
Big Data Sosyal ağlar Internete bağlanan cihazlardaki artış Bu veriler nereye depolanacak? Büyük diskler Büyük birincil hafıza Çoklu işlem birimleri (CPU) Maliyet yükseliyor. 13
Bir uygulama - Bir veritabanı Her uygulamaya bir veritabanı. Web servisleriyle bağlıyoruz. JSON veya XML ile veriyi tanımlıyoruz. 14
Kullanım Modeli -NoSQL 15
Kullanım Modeli -NoSQL-SOA 16
Kümeleme Aksaklıklar Donanımdaki arızalar Donanıma kolayca ulaşamama problemi Kolay donanım (commodity) Ucuz Bozulduğunda yenisini takabilme imkanı 17
Kümeleme İlişkisel veribanları doğası gereği kümeler üzerinde çalışmaya elverişli değiller. Paylaşımlı Disk Mimarileri Oracle RAC Microsoft SQL Server Tek noktadan arıza Paylaşımlı disk mimarisi çöktüğü zaman 18
Sharding Birden çok ilişkisel veritabanı sunucusu veri kümesinin alt kümelerini tutar. Uygulama alt kümelerin hangisinde işlem yapılacağını tayin ederek veriye ulaşır. 19
Google ve Amazon Maliyetlerin artması Arızalardaki geçişlerin uzun sürmesi Kümelemedeki fonksiyonel yetersizliklerden dolayı Veri depolama için yeni arayışlar başladı... BigTable - Google Dynamo - Amazon 20
NoSQL in Farkları SQL kullanmıyor. Teknolojik anlam ifade etmiyor, bir hareket! 21
Hareketin Sonucu İlişkisel veritabanları dışındaki alternatifler günyüzüne çıktı. Entegrasyon veritabanlarından -> Uygulama veritabanlarına geçiş başladı. Kümeleme üzerinde çalışabilen veritabanlarına sahibiz. Açık kaynak 22
İlişkisel Veri Katmanları Uygulama Veri Modeli - ER diyagram Veritabanı Saklama Modeli - RDBMS Satırlar ve Sütunlar... 23
NoSQL Veri Katmanları Key-Value Document Column Family Graph Toplam Modeli (Aggregates) - KeyValue, Document, Column Family 24
Toplamlar Birbirine bağlı nesnelerin bir arada tek bir nesne gibi değerlendirilmesi 25
Kümeleme Modelleri Scale Up - Sunucu gücünü yükseltme Scale Out - Yeni sunuculara dağıtma Toplam (Aggregate) bu modele uygun. 26
Veri Dağıtımı Yöntemler; Replikasyon ve sharding Master-slave Peer to peer 27
Tek sunucu Hiçbir dağıtım stratejisi yok. Bütün işlemler tek makina üzerinde gerçekleşiyor. 28
Sharding Veriyi alt kümelere ayırıyoruz. Her alt küme ayrı bir sunucuda çalışıyor. Sharding önceden tasarlanmalı! 29
Master-Slave Replikasyon Master dakiler Slave e yazılır. Okuma çok yapılıyorsa bu işe yarar. Yazması çok olan uygulamalarda ağır bir yük oluşturur, tavsiye edilmez. Master çökerse, Slave lerden okuma devam eder. Slave ler master olabilir. Read-write uyumsuzluğu olabilir!!! 30
Peer2Peer Replikasyon Her node read-write yapabilir. Node lar write operasyonlarını birbirleriyle paylaşırlar. Master-slave de olduğu gibi read-write ve en önemlisi write-write uyumsuzluğu başgösterebilir. 31
Geçiş için Programcının üretkenliğini artırıyor. Veriye erişim performansını artırıyor. Servis odaklı mimariye geçişi hızlandırır. 32
Key-Value ne zaman? Kullanım Durumları: Oturum Bilgilerinin Tutulması Kullanıcı profil bilgilerinin tutulması Alışveriş kartı bilgilerinin tutulması Önerilmeyen Durumlar: İlişkiler fazlaysa Transaction durumları Key dışında Value ile aramalarda Çoklu anahtarlarla aramalarda 33
Document Stores ne zaman? Kullanım Durumları: Loglama İçerik yönetim sistemleri, blog platformları Analitik platformları E-ticaret siteleri Önerilmeyen Durumlar: Kompleks transactionlar Tasarım çok değişiyorsa 34
Column-Family ne zaman? Kullanım Durumları: Loglama İçerik yönetim sistemleri, blog platformları Web sitesi analitik uygulamaları E-ticaret siteleri Önerilmeyen Durumlar: Hesaplamalar (SUM, AVG) Tasarım çok değişiyorsa 35
Graph ne zaman? Kullanım Durumları: Sosyal ağ siteleri ve buna benzer platformlar Lokasyon tabanlı servisler Öneri sistemleri Önerilmeyen Durumlar: Bulk operasyonların fazla olduğu durumlar. 36
Veri Nasıl Saklanıyor? Hızlı, Boyutu küçük - Birincil Hafıza RAM Yavaş, Boyutu büyük - İkincil Hafıza Hard disk 37
Veri Depolama 1990 da 1.5GB kapasiteye sahip bir sabit disk ile saniyede 4.4MB bilgi okunabiliyordu. 5.5 dk da tüm disk okunabiliyor. 2012 de 1.5TB kapasiteye sahip bir sabit disk ile saniyede 100MB bilgi okunabiliyor. 250 dk da tüm disk okunabiliyor. 1.5 GB => 0.25 dk da okunabiliyor! 38
Veri Depolama Diske Yazmak Diskten Okumaktan daha yavaş! Peki bunu hızlandırmak için ne yapmalıyız.? Verileri paralel şekilde okuyabiliriz. Örneğin elimizde 100 disk olsun. Her diske verinin 100 de birini yazarız. 100 diski paralel olarak birlikte okuruz. Böylece tüm veriyi yaklaşık 2.5dk dan az bir zamanda okumuş oluruz. 39
Bunları Bilmek Lazım! Hacim Veri hacmi (Örn: 1 MB lık bloklar) Hız Verinin akış hızı birim zamanda bize işlememiz gereken veri. (Örn : Saniyede 100 mesaj) Çeşitlilik Log, XML, Yapısal olmayan veri tipleri... 40
Sonuç? Farklı senaryolar için yenilikçi özelliklere sahip veritabanları kullanılabilir... 41
NoSQL Sakla İşle Analiz 42
Yapılan Hata! Her türlü veri tipi için sadece SQL veya NoSQL kullanmak!!! SQL veya NoSQL birlikte kullanılmalı! Elimizdeki verinin karakteristiğini bilmeliyiz, hangi DB tipinde tutulacağına karar verilmeli. SQL ve NoSQL in kullanıldığı ekosistemler oluşturulmalı. 43
Veya SQL in tüm özellikleri kullanılmalı! Eğer performans arttırmak için denormalizasyon ve bunun gibi RDBMS özellikleri kullanılmasına rağmen performans artmıyorsa NoSQL düşünülmeli. 44
Yöntem Karar vermeden önce -> Verini incele!!! 1. Veri tipini incele, karakteristiğini öğren! (Log, gerçek zamanlı veriler, lokasyon bilgileri, web sayfaları) 2. Ne sıklıkla veriye ulaşıyorsun? 3. Veri tipi hangi sıklıklı değişiyor? 45
Nasıl bir seçim? Verinin Karakteristiği NoSQL SQL Dinamik, şema değişiyor Statik, şema değişmiyor Veri miktarı çok fazla, şema değişmiyor Gerçek zamanlı veriler geliyor Veri miktarı çok fazla, statik, şema değişmiyor, gerçek zamanlı değil Güncellenme ve okuma fazlaysa X X X X X X 46
NoSQL Tipleri 1. Document Stores Derinin kütüğü => İsim: Derin", Adres: Kavaklıdere", Hobi: oyuncak". 2. Key-Value Store cocuk[ Derin ] = { ilkisim : Derin, Adres : Kavaklıdere, Hobi : oyuncak } 3. Column Stores Tabular Data 4. Graph 47
MongoDB Document Store C++ da geliştiriliyor SQL sorgularına benzer bir sorgulama altyapısı var. Lisansı AGPL Master/slave replikasyonu destekliyor (otomatik failover geçişi sağlıyor) Otomatik Sharding desteği var. Sorguları JavaScript te yazılıyor. Özellikler yerine performans ı ön plana çıkarmışlar. 32bit sistemlerde, 3gb hafıza kullanımı sınırı var. Boş veritabanı dosyası 192 MB tutuyor. Coğrafi bilgi sistemleri için desteği mevcut. Ne zaman kullanılmalı?: Dinamik sorguların olduğu, SQL e benzer indeksleme mekanizmalarını kullanmak istediğinizde veya büyük bir DB de iyi bir performans beklediğinizde. Örnek olarak: MySQL veya PostgreSQL kullanıyorsanız, şemanız dinamikse. 48
MongoDB Veri Tipleri Table eşittir Collection post = { yazar : Bugra, text : Blog post, date : datetime.datetime.utcnow() } posts = db.posts posts.insert(post) posts.find_one({ yazar : Bugra })
MongoDB Kullanım Durumları + Arşivleme, durum loglama + Doküman yönetim sistemleri + Uygulamada JSON kullanıyorsanız uygun olabilir. + Online oyunlarda küçük read/write ların sık olduğu durumlarda. - Karmaşık transaction yapılarında.
MongoDB Python Sürücüleri PyMongo - http://api.mongodb.org/python/ current/installation.html
CouchDB Document Store Erlang programlama dili ile geliştiriliyor. Kolay kullanım ve veri bütünlüğü önemliyse. Apache lisansına sahip HTTP ve REST arayüzleriyle DB operasyonları gerçekleştirilebiliyor. master-master replikasyon yapabiliyor. Yazma operasyonları sırasında Okuma yapabiliyor Veriyi sürüm sistemlerinde olduğu gibi sürümlendirebiliyor. Geçmiş verilere ulaşmak mümkün! jquery ile DB sorgulamak mümkün. Ne zaman kullanılmalı? : Bir verinin geçmiş sürümleri de sizin için önemliyse, master/master replikasyon yapabilmek istiyorsanız 52
CouchDB Kullanım Durumları HTTP/Rest arayüzü üzerinden bilgileri sunmak, veriler üstünde işlem yapmak için Veri bütünlüğüne önem verdiğiniz durumlarda.
CouchDB Python Sürücüleri Couchdb-python http://code.google.com/p/ couchdb-python/
Riak Key-value Erlang programlama dilinde geliştiriliyor. Fault tolerance a açık bir sistem. Apache lisansına sahip HTTP ve REST ile DB işlemleri gerçekleştirilebiliyor. Verinin dağıtımı ve kümelendirme seçeneklerini belirlemek çok basit. Map/reduce algoritmasını veri kümenizde çalıştırabiliyorsunuz. Full-text arama, indeksleme, sorgulama mevcut. (Riak Search Sunucusu ) 55
Riak Kullanım Durumları Yüksek bulunabilirlik Hatayı kaldırır Genişleyebilir Operasyon dostu Düşük gecikme
Riak Python Sürücüleri Riak-python-client https://github.com/ basho/riak-python-client
Redis Key-value store Tüm veritabanı RAM de tutuluyor. Bu yüzden verilere erişim çok hızlı. Basit bir datastore fakat basitliği, kullanım kolaylığı, performansı küçük uygulamalar için vazgeçilmez. 58
Redis Kullanım Durumları Kullanıcı bilgilerini tutmak Hızlı bir şekilde saklamak ve sorgulamak istediğiniz her veritipi için kullanılabilir. Arama motoru oluşturmak için Riak-Search http://wiki.basho.com/riak-search.html
Redis Python Sürücüleri redis-py https://github.com/andymccurdy/ redis-py
Cassandra Dağıtık key-value store, semi column-oriented Java da yazılıyor BigTable ve Dynamo teknolojilerini içinde barındırıyor. Apache lisansına sahip Thrift mesajlaşma altyapısını kullanıyor. Verinin replikasyonu ve dağıtımı için trade-off ayarlarına sahip. Kolona göre arama yapıyor. Yazmak okumaktan daha hızlı! Apache Hadoop ile birleştirilebiliyor (MapReduce )
Cassandra Kullanım Bankalar Finans kurumları Gerçek zamanlı veri analizi yapmak için. Yazmak / Okumaktan daha hızlı!
Cassandra Python Sürücüleri Pycassa - http://pycassa.github.com/ pycassa/
Neo4J Graph Database GPLv3 veya AGPL lisansıyla dağıtılıyor. Java da yazılıyor. Nesneler arasındaki ilişkiler yoluyla veriyi ifade edebiliyor.
Neo4J Kullanım Durumları Nesneler arasındaki ilişkilerin yoğun olduğu durumlarda. İnsan takip uygulamalarında Buğra Çakır ın 03/04/2012 tarihinde Kızılay Metrosuna girdiği anda Buğra Çakır ın arkadaş listesindeki kişilerden hangileri onun 100m yarıçapında bulunuyordu
Neo4J Python Sürücüleri python-embedded https://github.com/neo4j/ python-embedded
HBase Bigtable tipi veritabanı Apache Lisansıyla dağıtılıyor. Java da yazılıyor. Güvenilir read/write desteği var. Tabloların sharding işlemi otomatik olarak yapılabiliyor. Thrift ve HTTP arayüzleriyle veriye ulaşmak, üzerinde işlem yapmak mümkün
HBase Kullanım Durumları Gerçekten çok veriniz varsa Bir kaç değil 10 larca sunucu kullanıyorsanız. Rastgele, gerçek zamanlı read/write durumlarında
HBase Python Sürücüleri Thrift üzerinden erişilebiliyor. http://wiki.apache.org/hadoop/hbase/thriftapi
Performans 20.000 Wikipedia sayfasının indekslendiği bir performans testbed inde Riak-MongoDB-Cassandra-HBase performanslarını karşılaştıralım.
Performans
Performans
Performans DB read/update Performansı MapReduce Performansı Cassandra İyi Çok İyi Hbase Kötü Ortalama MongoDB İyi Zayıf Riak Zayıf Ortalama
Sharding Verilerin hangi makinaya yazılacağını ve nereden okunacağını kendimizin belirlediği yönteme Sharding adı verilir. En popüler algoritmalardan birisi Consistent Hashing dir. 74
Sharding A 0,1,2,3 B 4,5,6,7 C 8,9,a,b D c,d,e,f Hash 71db329b58378c8fa8876f0ec04c72e5 -> node B ye eşleniyor. Okuma/Yazma/Silme/Değiştirme B nodunda gerçekleşecek. 75
Redis Performans Redis Anahtar Sayısı : 6633751 Kullanılan Hafıza : 1GB Kullanılan Backend Dosya : 230 MB 0 dan Ayağa Kalkma Zamanı : 10sn Anahtar Arama Zamanı(Key/Value Perf): 0 ms 76
Grid Hesaplama MPI üzerinden hesaplama yapılıyor. Shared filesystem mimarisi Network Bandwidth Grid mimarisindeki performansı doğrudan etkileyen bir elemandır. 77
İhtiyaç? İhtiyacımız olan; 1. Verinin güvenilir bir şekilde depolanması. 2. Depolanan verinin üzerinde analiz işlemlerinin gerçekleştirilmesi. 78
Apache Nutch - Lucene Doug Cutting Apache Lucene Metin arama kütüphanesi Apache Nutch Açık kaynak web crawling, arama kütüphanesi 79
Arama Motoru Yapmak? Doug Cutting in tahmini : 1 milyar sayfa index e sahip bir arama motorunun donanım için 0.5 milyon dolara ihtiyacı var. Aylık işletme maliyeti tahminen 30.000 dolar. 80
Apache Nutch 2002 yılında web crawling yapmak için oluşturulan bir proje. Milyonlarca web sitesi indekslenebiliyor. Fakat Milyarlar çalışmıyor! Bunun için NDFS ( Nutch Distributed File System ) 81
Arama Motoru Yapmak? Sayfa veritabanı CrawlDB En son güncellenme zamanı Güncellenme aralığı Sayfa içeriği İçerik doğrulaması
Arama Motoru Yapmak? Çekilecek Sayfa Listesi FetchList Gazete sayfaları http://www.hurriyet.com.tr http://www.milliyet.com.tr http://www.sabah.com.tr http://www.sozcu.com.tr
Arama Motoru Yapmak? Ham sayfa verileri PageContent FetchList deki sayfalardan çekilmiş bilgilerin bulunduğu veritabanıdır. Bu bilgiler ham olarak durmaktadır. Üzerinde bir işlem yapılmaz.
Arama Motoru Yapmak? İşlenmiş sayfa verileri - ParsedPageContent Ham verilerin belli kodeklerle işlenmiş hallerinin bulunduğu veritabanıdır. Bu kodeklerle örneğin HTML, PDF, Open Office, Microsoft Office, RSS ve diğer formatlardaki bilgileri çözümlemek mümkündür.
Arama Motoru Yapmak? Bağlantı veritabanı LinkGraph PageRank ile bir web sitesine kaç tane link olduğunu gösteren veritabanıdır.
Arama Motoru Yapmak? Arama Fihristi FullTextSearchIndex Çekilen web sitesi içeriklerinden oluşturulan klasik aramanın gerçekleştirilmesini sağlayan veritabanıdır. Apache Lucene ile oluşturulur.
Apache Nutch Google GFS (Google File System) Google MapReduce 2006 da Nutch daki NDFS algoritmaları Lucene alt projesinden ayrılıp yeni bir kök projesi olan Hadoop u oluşturdu. Doug Cutting Yahoo ya katıldı. 2008 de 10.000 Hadoop core cluster ile Yahoo nun production search index altyapısı tanıtıldı. 88
Apache Hadoop NDFS -> HDFS ( Hadoop File System ) 2008 de Hadoop un kullanıldığı alanlar çeşitlendi. Last.fm Facebook New York Times 89
Soy ağacı 90
Ekosistem 1. Herşey nasıl başladı? Veri miktarı arttı. 2. Apache Nutch ile web crawling yaptık. 3. Büyük verileri kaydettik. HDFS doğdu! 4. Bu verileri nasıl kullanacağız? 5. MapReduce algoritması ile analitik uygulamalar geliştirip, çalıştırdık java, python gibi dillerle. 6. Yapısal olmayan verileri ne yapacağız? Web logs, Click streams, Apache logs, Server logs fuse,webdav, chukwa, flume, Scribe 7. Hiho ve sqoop u bu verileri HDFS e aktarmak için kullacağız RDBMS den bilgileri alabiliyoruz! 8. MapReduce programlayabilmek için yüksek seviyede diller tanımlandı Pig, Hive, Jaql 9. BI araçları türedi, raporlama, Intellicus 10. Yüksek seviye diller için akış kontrol araçları tanımlandı. - oozie 11. Hadoop işlerinin kontrolü için Hive, HDFS i görüntülemek için Hue, karmasphere, eclipse plugin, cacti, ganglia 12. Yardımcı çatılar geliştirildi. Avro (Serialization), Zookeeper (Koordinasyon) 13. Daha yüksek seviyede işlemler için Yapay Öğrenme Mahout, Yeni bir mapreduce tekniği Elastic map Reduce 14. OLTP HBase 91
BigData Ekosistemi 92
Hadoop Ekosistem Ambari Deployment, konfigürasyon ve izleme Flume Log ve event verilerinin toplanması HBase Column-oriented DB HDFS Hadoop un kullandığı dağıtık dosya sistemi Hive SQL-benzeri sorgulanabilen bir datawarehouse MapReduce Kümeler üstünde paralel hesaplamayı sağlayan algoritma Pig Hadoop MapReduce hesaplamaları için üst düzey bir dil Oozie Orkestrasyon ve workflow aracı Sqoop RDBMS lerden verileri almaya yarayan araç Whirr Cloud deployment larını sağlayan araç ZookeeperK ü m e ü y e l e r i n i n k o o r d i n a s y o n u v e konfigürasyonu için kullanılan araç 93
Hadoop Ekosistem Gelen Veriler: Sqoop, Flume Koordinasyon ve Akış: Zookeeper, Oozie Yönetim ve Dağıtım: Ambari, Whirr 94
Apache Sqoop SQL den bilgileri alıp Hadoop ekosistemine aktarmayı kolaylaştırır. Hadoop ekosisteminden SQL e bilgileri aktarmayı kolaylaştırır.
Apache Sqoop
Apache Flume Hadoop dışındaki veri kümelerini ekosisteme aktarmayı sağlar. Akış bazlı bir mimariye sahiptir.
Apache Flume
Apache Oozie Hadoop işlerinin (jobs) yönetimini sağlar. İşlerin akış şemalarında işlemesini sağlar.
Apache Oozie
Apache Zookeper Hadoop ekosistem elemanlarının dağıtık konfigürasyonunu, işlevsel kontrolünü, birlikte çalışabilirliğini sağlar.
Apache Pig Hadoop MapReduce hesaplamaları için yüksek seviyede bir dil arayüzü tanımlar. raw = LOAD 'excite.log' USING PigStorage('\t') AS (user, time, query); clean1 = FILTER raw BY org.apache.pig.tutorial.nonurldetector(query ); uniq_frequency3 = FOREACH uniq_frequency2 GENERATE $1 as hour, $0 as ngram, $2 as score, $3 as count, $4 as mean;
Apache Hive Hadoop için veri ambarı uygulamasıdır. Büyük veriler üzerinde analiz işlemleri yapmayı sağlar. hive> CREATE TABLE pokes (foo INT, bar STRING); hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING); ALTER TABLE pokes ADD COLUMNS (new_col INT);
Apache Hive hive> LOAD DATA LOCAL INPATH './ examples/files/kv1.txt' OVERWRITE INTO TABLE pokes; hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';
Hadoop Dağıtımları Cloudera CDH Dağıtımı Hadoop, Hive, Pig, Hbase, Zookeeper, Flume,Sqoop, Mahout, Whirr, Oozie, Fuse-DFS, Hue Hortonworks Hadoop, Hive, Pig, Hbase, Zookeeper, Ambari, Hcatalog IBM Hive, Oozie, Pig, Zookeeper, Avro, Flume, HBase, Lucene Microsoft Hive, Pig 105
MapReduce Veri işlemek için kullanılan bir yöntem algoritmadır. Büyük veri setlerinin paralel olarak işlenmesinde kullanılır. Verileri liste şeklinde düşündüğümüz zaman bunlar üzerinde fonsiyonel dillerdeki gibi işlem yapmamızı sağlar. 106
MapReduce / Hadoop
Teşekkürler!