Bilgi/Açıklama

NoSQL Kursu

NoSQL

NoSQL, SQL veritabanları dışındakilere verilen genel bir addır. Çoğunlukla veritabanı yerine depo (store) sözcüğü kullanılır. Çoğunun temel mantığı, belli bir işlemler ilgili tüm bilgileri içeren belgelere bir bütün olarak erişmek, SQL veritabanlarındaki gibi belli bir işle ilgili olan verileri parçalamak zorunda kalmamaktır. Bir başka özellikleri de verilerin içeriğini ve türünü belirleyen şema (schema) konusunda katı davranmamalarıdır. SQL veritabanlarında bir tabloda olabilecek sütunlar uygulama kullanılmaya başlamadan belirlenmelidir. Sonradan değiştirilmesi çoğu kez sunucunun, geçici olarak da olsa, durdurulmasını gerektirir. Veya değişiklikler önemli ölçüde yavaşlamaya neden olur. Oysa NoSQL veritabanları daha esnektir. Verilerde neler tutulduğunun baştan belirlenmesini istemez ve sonradan ekleme-çıkarma yaplabilir.
NoSQL veritabanları dört öbeğe ayrılabilir:
  • Belge Tabanlı Veritabanı (Document-Based Database)
  • Açar-Değer Veritabanı (Key-Value Database)
  • Sütun / Dikeçli Veritabanı (Columnar Database)
  • Çizge Veritabanı(Graph Database)

NoSQL Türleri

Belge Tabanlı Veritabanı(Document-Based Database)

NoSQL seçeneklerinden belge-tabanlı veritabanı (document-based database), ya da belge-yönelimli veritabanı (document-oriented database) JSON ya da XML gibi, içinde belli bir konuyla ilgili verileri tutan belgeleri saklamaya yarar. Örneğin bir satış (sales) işlemi için satışın kendisi, satılan ürünler, alımcı, vergi, bulunak (address) gibi bir çok varlık bulunabilir. Bunlar belge tabanlı veritabanlarında tek bir belge olarak saklanmakta ve gerektiğinde tek bir belge olarak geri alınmaktadır. Oysa ilişkisel veritabanları birbiriyle ilişkili de olsa her veri türünü ayrı bir tabloda sakladığı için öncelikle veriyi ayrıştırmayı gerekli kılar. Örneğin satışın kendisi ayrı bir tabloda, satıştaki ürünler ayrı bir tabloda tutulur. Söz gelimi, üç ürün içeren bir satış için satış tablosuna bir satır, satış ürünü tablosuna ise üç kayıt olmak üzere 4 kayıt atılır. Oysa belge veritabanları için tüm içerik tek bir kayıt olarak saklanır. Yazma işleminin tersi, okuma işleminde de SQL veritabanların her kayıtı kendi tablosundan katma (join) işlemiyle toplamak durumundadır. Oysa belge-tabanlı veritabanları bunu tek bir işlemde çözer.

Belge veritabanlarına örnek olarak MongoDB ve Couchbase verilebilir. Bunlardan NoSQL JavaScript kullanarak JSON belgeleri saklar. Ancak Couchbase ise N1QL adı verilen (Nickel - Nikel okunan), SQL benzeri bir sorgulama dili içerir. Her ikisi için de Java, C# ve PHP gibi dillerden erişim için betiklik (library) seçenekleri bulunmaktadır.
Belge saklamaya yarayan bir çok ürün de belge-tabanlı veritabanı olarak kullanılabilir. Örneğin özünde dolu yazı arama (full-text search) yapmak için kullanılan ElasticSearch belgeleri tuttuğu ve gerektiğinde üzerinde arama yapılmasına olanak verdiği için bir veritabanı olarak kullanılabilmektedir.

Açar-Değer Veritabanı (Key-Value Database)

NoSQL adı altında toplanan ürünlerden açar-değer veritabanı (key-value database) adı verilen tür, verileri bir açar (key) ve ona karşılık gelen bir değer (value) olarak tutar. Örneğin Türkiye üzerine bilgiler tutan bir nesne tr biçiminde bir açar ile saklanabilir, daha sonra yine tr açarı ile erişilebilir. Bu biçimiyle açar-değer veritabanı bir veritabanı olmaktan çok geçici bir veri tutma birimi olarak yaygın olarak kullanılmaktadır. Dolayısıyla oturum (session) gibi, belli bir süreç içinde tümlenip biten işlemleri için uygun bir seçenek olarak görülebilmektedir. Özlelikle dağıtık (distributed) uygulamalar için yeğlenebilmektedir.
Açar-Key veritabanlarının bir özelliği de bellekte veritabanı (in-memeory database) olarak çalışabilmeleridir. Bunun anlamı, verinin teker (disk) adı verilen, manyetik olarak ve yavaş biçimde çalışan aygıtlarda tutulması yerine doğrudan bellekte tutulmasıdır. Buna göre teker yalnızca yedekleme (back-up) için kullanılır ve işlemler hep bellekten yürütülür. Bellek aygıtları elektrikle çalıştıkları için disklere göre çok daha hızlıdır.

Açar-Değer veritabanlarından en çok bilinenlerinden biri Redis adını taşımaktadır. Bu veritabanı açar-değer ikililerini bellekte tutmaktadır. Çok kullanılan dizelge (list), küme (set) ve çırpı çizelgesi (hastable) / sözlük (dictionary) biçimindeki veri yapılarını desteklemektedir. Bu göre ülkeler biçimindeki bir açara karşılık bir dizelge verilebilir ve bunun içine ülkeler konabilir.

Dikeçli Veritabanı (Columnar Database)

NoSQL seçeneklerinden dikeçli veritabanı (columnar database) verileri sütun olarak tutar. SQL veritabanında her kayıt bir tabloya bir satır / yataç (row) olarak eklenir. Örneğin satış tablosunda her bir satışın bilgileri birer kayıt olarak eklenir. SQL veritabanları kayıtlara bütün olarak bakar. Ancak bilgiye bütün olarak erişmek istemeyen, yalnızca belli değerlerle çalışma isteyen uygulamalar için süreç çok yavaş çalışır. Örneğin satışların toplam tutarıyla işlem yapmak isteyen bir uygulama satışın kime yapıldığını kime gönderildiğiyle ilgilenmez. Ancak çok sayıda satış içinde tek bir sütun değerinin alınması ilişkisel veritabanları için tüm tabloyu ilgilendiren uzun bir işlemdir. Öte yandan dikeç veritabanları satış tutarı gibi sütunları ayı olarak saklar. Buna tüm satışlar için satış tutarları bir yerde, kime gönderileceği başka bir yerde tutulur. Dolayısıyla tek bir dikece erişim gerektiğinde işler çabuk sonuçlandırılır.

Dikeç veritabanlarına örnek olarak Apache kurumunun Cassandra adlı ürünü sayılabilir. Bu veritabanında CQL (Cassandra Query Language - Cassanda Sorgu Dili) adı verilen bir dil kullanılır. Bu dil olabildiğince SQL diline benzetilmiştir. Ayrıca CQLSH (CQL Shell - CQL Kabuğu) adlı buyruk çizgisi (command-line) uygulamasıyla erişim sağlanır.

Çizge Veritabanı (Graph Database)

Olağan ilişkili veritabanları için varlık (entity) birimleri veriyi tutar ve onların arasında ilişki (relation) bulunur. Ancak bu ilişiler baştan bellidir uygulama çalışmaya başlamadan önce bildirilmelidir. Bu yüzden, veriden çok ilişkinin bulunduğu, aynı türdeki verilerin başka verilerle ayrı ilişkiler kurabildiği, ilişkilerin sürekli değiştiği ve çalışma sırasında yeni ilişkilerin eklenebildiği durumlarda ilişkisel veritabanları yetersiz kalmaktadır. Bu durumlar için çizge veritabanı (graph database) adı verilen ürünler geliştirilmiştir. Buna göre her veri bir düğüm (node) olarak düşünülür. İki düğüm arasında ilişki (relation) kurulabilir. Örneğin bir kişi bir düğümdür onun yazdığı bir betik / kitap bir başka düğümdür. İkisi arasında yazmıştır biçiminde bir ilişki kurularak bir kitabın yazarı belirlenebilir. Ancak bir kişinin bir betikle yazmıştır ilişkisi dışında eğirmiştir (edited) ya da tasarlamıştır (designed) gibi çok sayıda ilişkisi olabilir. Çizge veritabanları bu tür işlemleri kolayca gerçekleştirir.

Çizge veritabanlarına örnek olarak Neo4J verilebilir. Bir çok NoSQL veritabanı gibi Java ile yazılmış bu ürüne bir çok dilden erişim olanaklıdır. Bu veritabanı CQL (Cypher Query Language - Şifre Sorgu Dili) adlında bir dil ile erişim sağlamaktadır. Öncelikle düğüm (node) yaratma ile işlemler yapılır. Sonrasında düğümler arasında ilişki (relation) kurulur. Gerek düğümler gerekse ilişkiler üzerinde sorgulama yapılarak sonuçlar alınabilir. Örneğin hangi kişiler bir kitap yazmış ya da bu kişi neler yapmış gibi sorgular yapılabilir.

Büyük Veri (Big Data)

Doğrudan ilişkili olmasa da büyük veri (big data) çoğu kez NoSQL ile birlikte anılmaktadır. Çünkü büyük veri düzenleri veritabanı olarak genellikle NoSQL ürünlerini kullanmaktadır. Bunun tümüyle tersi olarak, NoSQL ürünleri de verileri ayrı ayrı sakladıkları için bütüncül işlemler için büyük veri ürünlerinin kullanımını gerekli kılmaktadır.
Büyük veri uygulamalarının en bilinenleri arasında Hadoop sayılabilir. Java ile geliştirilmiş bu düzene öteki dillerden de erişim sağlanabilmektedir. Hadoop, tüm büyük veri ürünleri gibi eşle-indirge (map-reduce) işlemini gerçekleştirir. Buna göre ilk aşamada tüm veriler içinden belli bir kesimi kullanılacak verilere eşlenir. Sonrasında veriler daha özet verilere indirgenir. Örneğin tüm satışlara ilişkin veriden satış tutarları alınacak biçiminde eşleme yapılır sonrasında da satış tutarları toplanır ya da belli bir özelliğe göre öbeklenir. Hadoop çok bilgisayarla çalışmayı sağlamak için özkaynak oylaşması (resource negotiation) uygulaması içerir. Buna göre hangi bilgisayarın ne ölçüde boşta olduğu diri olarak gerçek zamanda belirlenir ve işlemler daha az yoğun makinelerde gerçekleştirilir. Hadoop, birden çok diske erişmek için dağıtık sırtlı / dosya düzeni (distributed file system) adı verilen bir özellik içerir. Bununla bir çok depolama birimi tek bir dizinin altındaymış gibi görünür ve ağdaki bir çok bilgisayardan aynı içimde erişilir.
Detaylı bilgi için: Tıklayınız
tekzaf tarafından 15.10.2018 tarihinde eklenmiş/güncellenmiştir.

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir

Misafir Yorumları




Bu Sayfayı Paylaş:

İletişim/Bize Yazın   mh@fibiler.com   Google+   Facebook   Twitter   fibiler@googlegroups.com
Her Hakkı Saklıdır
Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir.
Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir