NoSQL (kavram)

Vikipedi, özgür ansiklopedi
Atla: kullan, ara

Bilgisayar bilimleri'nde NoSQL, klasik ilişkisel veritabanı yönetim sistemlerinden (İVTYS) bir şekilde farklı olan veritabanı yönetim sistemleri için kullanılan bir kavramdır.

Bu veri depolarının sabit tabela düzenlerine ihtiyaçları olmayabilir, alışılagelmiş join işlemleri kullanılmaz, tipik olarak yatay ölçeklemeye gidilir. Akademisyenlerce ve makalelerde tipik olarak böyle veri depolarına yapılanmış bellek (structured storage) denir.[1][2][3][4] Bu kavram klasik ilişkisel veritabanlarını altküme olarak görür.

Tarihçesi[değiştir | kaynağı değiştir]

NoSQL kavramı 1998'de çıkarılan SQL arayüzü olmayan hafif bir açık kaynak ilişkisel veritabanı. Tasarımcısı Carlo Strozzi, NoSQL hareketi "ilişkisel modelden tamamen ayrılırken ona bundan dolayı daha uygun olarak ilişkisel olmayan anlamında 'NoREL' (İng. no relation) veya benzeri bir ad vermek gerektiğini ileri sürer."[5]

Rackspace'ın bir çalışanı olan Eric Evans, NoSQL kavramını Last.fm'den Johan Oskarsson açık kaynak dağıtık veritabanlarının görüşüleceği bir toplantı plânlamak istediğinde 2009 başında tekrar kullanmaya başlandı.[6] Bu adla artan sayıda ortaya çıkan ve ilişkisel olmayan ve çoğu zaman ACID garantisini vermeyi amaçlamayan dağıtık veri depolarına damgasını vurmak istemişti. ACID, IBM DB2, MySQL, Microsoft SQL Server, PostgreSQL, Oracle İVTYS, Informix gibi klasik ilişkisel veritabanı sistemlerinde sağlanan temel özelliklerdendir.)

2009'da Atlanta'daki "no:sql(east)" konferansının NoSQL tartışması üzerinde derin etkileri oldu. Kendisini "ilişkisel olmayan veri depolarıyla ilgili bir konferansı" olarak görmekte olan ve sloganı eğlenceyi seç, ilişkisel=yanlış; olan gerçek Dünyâ'dan faydalan (İng. "select fun, profit from real_world where ilişkisel=false;") olan bu konferansın NoSQL tartışmasına etkisi olmuştur. Böylece "NoSQL" 'in en genel yorumu, anlamı anti-İVTYS olmayıp anahtar-değer depoları, belge veritabanları ve Graph veritabanlarının kullanımının altını çizmesine rağmen "ilişkisel olmayan"'dır .[kaynak belirtilmeli]

Mimarisi[değiştir | kaynağı değiştir]

Tipik modern ilişkisel veritabanları çok sayıda belgeyi indeksleme, yoğun trafiği olan sunan Web sayfalarında ve streaming medya sağlama gibi kimi yoğun veri uygulamalarında yetersiz edim göstermişlerdir.[7] Tipik İVTYS uygulamaları ya küçük fakat sıkça oku/yaz işlemleri ya da ender yazaz büyük komut listesi komut liste (İng. batch) hareketleri (işlemleri) ayarlanır. Diğer taraftan NoSQL, yoğun oku/yaz hizmeti verir.[7] Gerçek Dünya NoSQL yerleşimleri green badges (sosyal ağlarda başkalarınca değerlendirilen hikâyeleri gösteren belirleyiciler) için Digg'in 3 TB'lı çözümü,[8] Facebook'un gelen postaları arama için 50 TB ve eBay'in bütün verileri için 2 PB.

NoSQL mimarileri çoğu zaman sonunda tutarlı (İng. eventual consistency) veya tek veri maddesiyle sınırlı işlemlerde zayıf tutarlılık garantisi verir. Fakat kimi sistemler, yardımcı özel yazılım tabakası ekleyerek bâzı oluşumlarda tam ACID garantisi verirler(mesela CloudTPS).[9] Sütun depoları için şipşak yalıtım sağlayan iki sistem geliştirilmiştir. Bunlar Google'un BigTable'e dayanan Percolator sistemi[10] ve Waterloo Üniversitesi'nde HBase için geliştirilmiş hareketsel sistem (İng. transactional system).[11] Ayrı ayrı geliştirilmiş bu sistemler, benzer kavramlar şipşak yalıtım kullanarak veri yönetimi için fazladan işlemlere, ara yazılım yerleştirmesi (İng. middleware system deployment) veya ara yazılım tabakasından kaynaklanan bakıma gerek duymadan altındaki sütun deposu için garantili çok satırlı dağıtık ACID işlemleri sağlar.

Birçok NoSQL sistemi, verilerin farklı sunucularda yedeklemesini yapan dağıtık mimariyi kullanır. Bu saklamalar genelde dağıtık hash çizelgeleri ile yapılır. Böylece sistem kolayca yeni sunucular eklenerek büyütülebilir ve bir sunucunun arızalanmasına katlanılabilir.[12]

Kimi NoSQL savunucularıŞablon:Who birleşik dizinler (İng. associative array) veya anahtar-değer çiftleri gibi çok basit arayüzlerine ağırlık verir. Doğal XML veritabanları gibi diğer sistemler XQuery standardını destekler.[kaynak belirtilmeli] CloudTPS gibi daha yeni sistemler ayrıca join sorgulamalarını da içermektedir.[13]

Sınıflandırma[değiştir | kaynağı değiştir]

NoSQL uygulamalarını yapılışlarına göre sınıflamak mümkündür:

Döküman tabanlı[değiştir | kaynağı değiştir]

Ad Dil Notlar
BaseX XQuery XML veritabanı
CouchDB Erlang
eXist XQuery XML veritabanı
Jackrabbit Java
Lotus Notes  ??? birden çok değerli
MarkLogic Server XQuery XML veritabanı
MongoDB C++
SimpleDB Erlang
Terrastore Java

Çizelge[değiştir | kaynağı değiştir]

Ad Dil Notlar
AllegroGraph SPARQL RDF GraphStore
Neo4j Java
DEX Java, .NET Yüksek performanslı Graph veritabanı
FlockDB Scala

Anahtar-değer deposu[değiştir | kaynağı değiştir]

Anahtar-değer depoları düzeni olmayan veri depoları olup uygulamaların verilerini saklamaya yararlar. Veri alışılageldiği şekilde seçilen programlama dilinin veri türünde veya bir nesnede saklanır. Böyece sâbit bir veri modeline gerek yoktur.[14] Şu türler vardır:

Sonunda tutarlı anahtar-değer deposu[değiştir | kaynağı değiştir]

Aşamalı anahtar-değer deposu[değiştir | kaynağı değiştir]

Konuklanmış hizmetler (İng. hosted services)[değiştir | kaynağı değiştir]

Anahtar-değer RAM'da ön bellekte[değiştir | kaynağı değiştir]

Paxos algoritmasını uygulayan anahtar-değer depoları[değiştir | kaynağı değiştir]

Diskte anahtar-değer depoları[değiştir | kaynağı değiştir]

Çoklu değer veritabanları[değiştir | kaynağı değiştir]

Nesnel veritabanları[değiştir | kaynağı değiştir]

Kerte anahtar-değer deposu[değiştir | kaynağı değiştir]

Çizelge halinde[değiştir | kaynağı değiştir]

Değişkenler grubu deposu[değiştir | kaynağı değiştir]

Ayrıca bakınız[değiştir | kaynağı değiştir]

Kaynakça[değiştir | kaynağı değiştir]

  1. ^ Hamilton (3 November 2009). "Perspectives: One Size Does Not Fit All". http://perspectives.mvdirona.com/CommentView,guid,afe46691-a293-4f9a-8900-5688a597726a.aspx. Erişim tarihi: 13 November 2009. 
  2. ^ Lakshman, Avinash; Malik. Cassandra — A Decentralized Structured Storage System. Cornell University. http://www.cs.cornell.edu/projects/ladis2009/papers/lakshman-ladis2009.pdf. Erişim tarihi: 13 November 2009. 
  3. ^ Chang; Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach, Mike Burrows, Tushar Chandra, Andrew Fikes, and Robert E. Gruber. Bigtable: A Distributed Storage System for Structured Data. Google. http://labs.google.com/papers/bigtable-osdi06.pdf. Erişim tarihi: 13 November 2009. 
  4. ^ Kellerman. "HBase: structured storage of sparse data for Hadoop". http://www.rapleaf.com/pdfs/hbase_part_2.pdf. Erişim tarihi: 13 November 2009. 
  5. ^ "NoSQL Relational Database Management System: Home Page". Strozzi.it. 2007-10-02. http://www.strozzi.it/cgi-bin/CSA/tw7/I/en_US/nosql/Home%20Page. Erişim tarihi: 2010-03-29. 
  6. ^ "NOSQL 2009". Blog.sym-link.com. 2009-05-12. http://blog.sym-link.com/2009/05/12/nosql_2009.html. Erişim tarihi: 2010-03-29. 
  7. ^ a b Agrawal, Rakesh et al. (2008). The Claremont report on veritabanı research. 37. ACM. ss. 9–19. Hata: Kötü DOI belirtildi. ISSN 0163-5808. http://db.cs.berkeley.edu/claremont/claremontreport08.pdf. 
  8. ^ "Looking to the future with Cassandra | Digg About". About.digg.com. 2009-09-09. http://about.digg.com/blog/looking-future-cassandra. Erişim tarihi: 2010-03-29. 
  9. ^ "CloudTPS: Scalable Transactions for Web Applications in the Cloud". Globule.org. http://www.globule.org/publi/CSTWAC_ircs53.html. Erişim tarihi: 2010-03-29. 
  10. ^ "Large-scale Incremental Processing Using Distributed Transactions and Notifications". The 9th USENIX Symposium on Operating Systems Design and Implementation (OSDI 2010), Oct 4–6, 2010, Vancouver, BC, Canada. http://www.google.ca/url?sa=t&source=web&cd=3&ved=0CCQQFjAC&url=http%3A%2F%2Fwww.usenix.org%2Fevents%2Fosdi10%2Ftech%2Ffull_papers%2FPeng.pdf&rct=j&q=Large-scale%20Incremental%20Processing%20Using%20Distributed%20Transactions%20and%20Notifications&ei=eM24TOYnjqedB_mHmLUN&usg=AFQjCNGGm1Xfaml5lq6Aj1R2BlX7WilIuQ&sig2=ZZcPWxhiMVSnY-DmewIFIg&cad=rja. Erişim tarihi: 2010-10-15. 
  11. ^ "Supporting Multi-row Distributed Transactions with Global Snapshot Isolation Using Bare-bones HBase". The 11th ACM/IEEE International Conference on Grid Computing (Grid 2010), Oct 25-29, 2010, Brussels, Belgium. http://www.cs.uwaterloo.ca/~c15zhang/ZhangDeSterckGrid2010.pdf. Erişim tarihi: 2010-10-15. 
  12. ^ "Cassandra: Structured Storage System over a P2P Network" (PDF). http://static.last.fm/johan/nosql-20090611/cassandra_nosql.pdf. Erişim tarihi: 2010-03-29. 
  13. ^ "Consistent Join Queries in Cloud Data Stores". Globule.org. http://www.globule.org/publi/CJQCDS_ircs68.html. Erişim tarihi: 2011-01-31. 
  14. ^ Marc Seeger (2009-09-21). "Key-Value Stores: a practical overview". http://www.slideshare.net/marc.seeger/keyvalue-stores-a-practical-overview: slideshare. http://dba.stackexchange.com/questions/607/what-is-a-key-value-store-database. Erişim tarihi: 2010-03-09. "Key value stores allow the application developer to store schema-less data. This data is usually consisting of a string that represents the key, and the actual data that is considered to be the value in the "key - value" relationship. The data itself is usually some kind of primitive of the programming language (a string, an integer, an array) or an object that is being marshalled by the programming languages bindings to the key value store. This replaces the need for fixed data model and makes the requirement for properly formatted." 
  15. ^ "Riak: An Open Source Scalable Data Store". 28 November 2010. https://wiki.basho.com/display/RIAK/Riak. Erişim tarihi: 28 November 2010. 

Dış bağlantılar[değiştir | kaynağı değiştir]