Farklı ihtiyaçlar için farklı veri tabanları
Veri tabanı ile bağlantı kurabilmek için veri kavramından başlayarak, verilerin saklanılması ve veri tabanlarından ilişkisel olmayan veri tabanı nedir sorusuna cevap verildiği ve kurulumu ile ilgili kısımlardan bahsetmeye çalışacağım.
Teknolojinin her geçen gün gelişmesi, akıllı cihazların ve uygulamaların artmasıyla beraber her geçen saniye bir hareketle birlikte bir veri(data)üretilmektedir.
Günlük yaşantımızda her anımızda veri kavramı yer almaktadır. Buna görselden örnek verilecek olunursa, 2017 yılında Google arama motoru günlük search sayısı 3.5 milyon iken bu 2018 yılında 3.8 milyondur. Aynı zamanda yakın gelecekte hayatımızda büyük yer alacak olan ödeme ve yatırım aracı olan bitcoin ,2018 verilerine göre bir günde 1.25 yeni bitcoin oluşturulmuştur. Sayısal verilere başka örnek verilecek olunursa , netflix video sayısı — spotify şarkı sayısı artışı , uber kullanıcı sayısı , instagram post sayısı her geçen gün artış göstermektedir. Bu verilerin saklanılması ve güncellenmesi büyük önem taşımaktadır.
Görüldüğü gibi bu verilerin ele alınması ve işlenilmesi için, özellikle değişken yapıda olan verilerin işlenmesi konusunda veri tabanı seçimi önemli bir husustur. Veri kaybını önlemek aynı zamanda da hızlı bir şekilde güncelleme yapılabilmesi için ilişkisel olmayan veri tabanları kullanılabilmektedir. İlişkisel veri tabanları üzerinden yapılandırma yapılırsa, tablo- kolon- index gibi özelliklerin aktif bir biçimde güncellenmesi gerekmektedir. (Örnek verilecek olunursa; Twitter- Facebook , her saniye hatta mili saniye de veri girişi olmaktadır. Aktif ve hızlı bir güncelleme olabilmesi gerekmektedir.)Aktif bir biçimde güncelleme yapılamayacağı için ,aktif bir biçimde güncelleme gerektiren durumlarda, NoSQL(Not Only SQL) data yapısı kullanılmaktadır.
Mongo DB, açık kaynak kodlu NoSQL veri tabanı uygulamasıdır. Mongo DB geliştirme ve ölçekleme kolaylığına odaklanmış, en çok tercih edilen veri tabanı ve NoSQL çözümü olan, dinamik şemalı ve JSON ile sorgulama yapılan doküman tabanlı bir veri tabanı sistemidir.
NoSQL, ilk olarak 1998 yılında Carlo Strozzi tarafından ortaya çıkarılan bir kavramdır. SQL arayüzü olmayan bu veri depolama sistemine tasarımcısı Carlo Strozzi, ilişkisel olmayan anlamında bir isim konulması gerektiğini belirtmiştir.
NoSQL kavramı 2009 yılı başlarında, Rackspace şirketinin çalışanlarından Eric Evans tarafından, açık kaynak dağıtık veri tabanları sistemlerinin görüşüleceği bir toplantı düzenlenmek istendiği dönemlerde tekrardan kullanılmaya başlanmıştır. Eric Evans aslında bu isimle sürekli olarak ortaya çıkmaya başlayan, ilişkisel olmayan dağıtık veri depolama sistemlerine bir damga vurmayı amaçlamıştır.
NoSQL ilişkisel olmayan bir veri tabanı çeşididir. İlişkisel veri tabanlarına alternatif bir çözüm olarak ortaya çıkmıştır. NoSQL veri tabanı sisteminin ortaya çıkmasındaki en büyük etkenlerden birisi, internetin hızlanması ile birlikte büyümekte olan ve yapısal olmayan internetteki verinin İlişkisel Veri Tabanı Yönetim Sistemlerinde performanslı bir şekilde işlenememesidir. Açık kaynak Veri Tabanı kullanan firmalar, dikey büyüme maliyetli olduğundan, yatayda büyüyebilmek için daha fazla önbellek kullanımı, verinin programatik olarak dağıtılması gibi teknikleri denemektedirler. Bu uygulamaların da yetmediği durumlarda NoSQL sistemleri ortaya çıkmaya başlamıştır.
NOT:
Dikey büyüme sistem kaynaklarının yetersiz kalması durumunda sistemi yenilemek veya sisteme ek donanım almak ile sağlanmaktadır.
Yatay büyüme ek sunucu alınarak işlem yüklerini sunuculara bölmek ile sağlanmaktadır. Dağıtık sistemlerde birden fazla birbirine bağlı düğümden oluşan ve aralarında kurallara göre veri paylaşılabilen bir sistem bulunmaktadır. Yatay Büyüme ile hayatımıza giren CAP Teoremi, temel kural olarak ifade edilmektedir.
CAP Teoremi nedir sorusuna karşılık verilecek olunursa, 1988 yılında California Üniversite’sinde bilgisayar bilimcisi olarak görev yapan Eric Brewer tarafından ortaya konulmuştur. Brewer tarafından ortaya atıldığı için, Brewer Teoremi olarak da bilinmektedir. CAP Teoremi,
- Consistency (Tutarlılık)
- Availability (Erişebilirlik)
- Partition Tolerance(Bölünebilme Toleransı)
baş harflerinin birleşiminden oluşmaktadır.
Consistency: Tüm düğümlerde aynı anda aynı veri görülmektedir. Yapılan en son değişikliklerin tüm düğümlerde yer alması gerekmektedir. Bu durum tutarlılığı sağlamaktadır.
Availability: İstekler sistem tarafından cevaplanmaktadır. Sistem hatalı veya başarılı tüm taleplere istenildiği biçimde karşılık vermektedir.
Partition Tolerance: Bazı düğümler çalışmasa da veya ağda herhangi bir sorun olma durumunda , büyük hasarlar olmadığı sürece sistemin çalışmaya devam etmesi durumudur.
CAP Teoremi gereği, dağıtık sistemlerde en fazla bu özelliklerden iki tanesi sağlanabilmektedir. Bunlar ;
- Consistency ve Availability — CA
Tüm değişiklikler aynı anda tüm düğümlerde görülebilmektedir ve sistem tüm isteklere cevap vermektedir.Ancak sistemde herhangi bir düğümün zarar görmesi durumunda sistem kilitlenmektedir. Veri tutarlılığının ön planda olduğu sistemler için ideal durumdur. (Örnek: para transfer işlemleri gibi.)
- Consistency ve Partition Tolerance — CP
Sistemin bir kısmının zarar görmesi durumunda , sistem çalışmaya devam etmektedir ve tüm düğümlerde aynı veri görülmektedir. Tutarlı olmayan verilerin gösterilmemesi için bazı verilere erişim sağlanılamamaktadır. Ancak erişim sağlanan verilerde de, tutarlık sağlanmaktadır.
- Availability ve Partition Tolerance — AP
Sistemin bir kısmı zarar görse de, sistem hizmet vermeye devam etmektedir.Veri okuma yapılan Tutarlılık ve Erişebilirliğin ön planda olduğu iş modelleri için ideal bir durumdur.
NoSQL Veri Tabanı Türleri
· Anahtar-Değer
· Belge
· Grafik
· Bellek içi
· Arama
Key-Value veri tabanları yüksek oranda bölümlendirilebilir ve diğer veri tabanlarının ulaşamayacağı ölçeklerde yatay ölçeklendirmeye imkan sağlamaktadır.
Document, veriler genellikle uygulama katmanında bir JSON belgesi olarak temsil edilmektedir.Yazılım geliştiriciler aracılığıyla, veri tabanındaki verileri uygulama kodlarında kullandıkları belge modeli biçimini kullanarak kalıcı hale getirebildiği için , belge veri tabanlarının popülerliği artmaktadır.
Grap DB, grafik veri tabanlarının amacı bağlı veri kümeleriyle çalışan uygulamalar oluşturup çalıştırmayı kolaylaştırmaktadır.Grafik veri tabanları yaygın olarak, sosyal ağlar, öneri alt yapıları, dolandırıcılık algılama ve bilgi grafikleri yer almaktadır.
Column Family, klasik veri tabanı yapısına benzemektedir.
İlişkisel Veri Tabanları, verileri satır ve sütunlardan oluşan tablolar halinde oluşturmaktadır. Tablolar, satırlar, sütunlar, dizinler, tablolar arasındaki ilişki diğer veri tabanları ögeleri ile birlikte şemasal olarak tanımlanmaktadır.İlişkisel Veri Tabanı,
· Bölünmezlik
· Tutarlılık
· Yalıtım
· Dayanıklılık
(ACID)özelliklerini sağlamaktadır.
NoSQL Veri Tabanları, anahtar-değer , belge, grafik , bellek içi ve düşük gecikme süreli uygulamaları içeren çeşitli veri erişimine yönelik olarak OLTP(sürekli işlem yapılan veri tabanları)için tasarlanmıştır. NoSQL veri tabanları ölçeklendirilebilen daha esnek bir model sağlamak için ACID özelliklerini zaman zaman göz ardı etmektedir.
Mongo DB kurulumu için https://www.mongodb.com/download-center/community adresinden indirip, kurulum işlemini başlatabilirsiniz.
Kurulum işlemi tamamlandıktan sonra, ilgili uygulama açılır.
Açılan ekranda bağlantı kurulduktan sonra veri tabanı oluşturma işlemine geçiş yapmış olmaktayız.
İlişkisel veri tabanlarına kıyasla;
- Tablo yerine Collection’
- Satır yerine Document
- Kolon yerine Field
kullanılmaktadır.
Create Database butonuna tıklanarak, açılan ekranda database ismi ve collection ismi yazılarak veri tabanı oluşturma işlemi tamamlanmaktadır.
Veri Tabanı Oluşturma ekranında, çıkan ekranda Capped Collection ve Use Custom Collation kavramları ile karşılaşmaktayız.
- Capped Collection: Yerleştirme sırasına göre belge ekleyen ve alan yüksek verimli işlemleri destekleyen sabit boyutlu koleksiyonlardır. Bir koleksiyon ayrılan alanını doldurduğunda, koleksiyondaki en eski belgelerin üzerine yazarak yeni belgelere yer açmaktadır.
- Custom Collation: Collation, kullanıcıların harf karşılaştırması ve işaretler için kurallar gibi dize karşılaştırması için dile özgü kuralları belirlemelerine olanak tanır. Bir Collation’da aşağıdaki alanlar bulunmaktadır;
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
Veri Tabanı oluştururken aslında collection kısmını da doldurduğumuz için ilişkisel veri tabanlarında tabloya karşılık gelen collection kısmı da oluşturulmuş olmaktadır.
Veri Tabanı ve collection oluşturulduktan sonra, document oluşturularak aslında collection içerisine index ve primary key belirleyerek, veri eklenilmesi sağlanmaktadır.
Veriler eklendikten sonra, aynı veriden tekrar oluşturmak istediğimizde ya da kolon isimlerini tekrar tekrar yazmak durumunda kalmamak için , verinin sağ tarafında çıkan sarı ile işaretli bölümden faydalanılabilmektedir.
Sonraki yazılarda görüşmek üzere …