Veri Tabanı Tipleri ve Karşılaştırması
Bir proje geliştirmeye başlarken yazılım mimarisinde hangi veri tabanı kullanılacağının kararı, proje için oldukça önemlidir. Hangi servis için hangi tip bir veri tabanı (RDBMS, NoSQL, Graph vs.) seçmeli? Bu soruya cevap verebilmek için veri tabanı tiplerini biliyor ve bunların karşılaştırmasını yapabiliyor olmamız gerekir. Bu yazımda sizlere veri tabanı tipleri ve karşılaştırmasından bahseceğim.
Veri Tabanı Tipleri
İlişkisel veri tabanları ve yönetim sistemleri(RDBMS) ile ilişkisel olmayan (NoSQL-Not Only SQL) veri tabanları olmak üzere iki tip veri tabanı vardır.
1- İlişkisel Veri Tabanları ve Yönetim Sistemleri (Relational Database Management System — RDBMS)
Günümüzde en yaygın kullanılan veri tabanı sistemlerinden biridir. Satır ve sütunların meydana getirdiği tablolardan oluşmaktadır. Tablolardaki veriler, birbirleri ile ilişkilidir. Dolayısıyla veri tabanında en az iki adet tablo olması gerekmektedir. Veri tabanı tasarımı ve tablolar arasındaki ilişkiyi göstermek için Varlık-İlişki Diyagram belgesi hazırlanır.
İlişkisel veri tabanın çoğu, veri tabanına erişim için SQL(Structured Query Language) kullanılır.
Bazı popüler veri tabanları:
- MySql (Ücretsiz)
- PostgreSQL (Ücretsiz)
- MsSql
- IBM DB2
- Oracle
Özellikler
a) Scale Up: İlişkisel veri tabanı scale up’tır. Scale up nedir? Veri tabanını bir kutu gibi düşünebiliriz. Biz veri tabanındaki verimizi büyüttükçe bu kutu büyür. Veri tabanımızı sınırlı bir şekilde büyütebiliriz. Bu nedenle çok büyük veriler için çok büyük kutulara ihtiyacımız vardır.
b) Structured Data: Yapılandırılmış veri, etkili analiz için öğeleri adreslenebilir olan verilerdir. Çoğu RDBMS veri tabanına erişim ve etkileşim için SQL (Structured Query Language) dilini kullanmaktadır.
c)ACID Prensibi
ACID, değişikliklerin bir veri tabanına nasıl uygulanacağını yöneten 4 adet prensip sunar.
c.1) Bölünmezlik (Atomicity): En ksıa ifadesiyle ya hep, ya hiç. Arda arda çalışan transaction’lar için iki olası senaryo vardır. Ya tüm transaction’lar başarılı olmalı ya da bir tanesi bile başarısız olursa tümünün iptal edilmesi durumudur.
“Transaction: Veritabanı üzerinde yapılan işlemlerin her birisi bizim için bir transaction’dır.”
c.2) Tutarlılık (Consistency): İlişkisel veri tabanlarında bir tablodaki kayıtlar birbirleriyle ilişkili olduğu gibi tablolar arasında da ilişki olabilir. Bu ilişkiler RDBMS’lerin veri tutarlılığını (data consistency) sağlamasındaki en önemli etkendir.
Veri tabanındaki datalarımızın tutarlı olması gerekir. Eğer bir transaction geçersiz bir veri üreterek sonuçlanmışsa, veritabanı veriyi en son güncel olan haline geri alır. Yani bir transaction, veritabanını ancak bir geçerli durumdan bir diğer geçerli duruma güncelleyebilir.
c.3) İzolasyon (Isolation): Transaction’ların güvenli ve bağımsız bir şekilde işletilmesi prensibidir. Bu prensip sıralamayla ilgilenmez. Bir transaction, henüz tamamlanmamış bir başka transaction’ın verisini okuyamaz.
c.4) Dayanıklılık (Durability): Commit edilerek tamamlanmış trasnaction’ların verisinin kararlı, dayanıklı ve sürekliliği garanti edilmiş bir ortamda (sabit disk gibi) saklanmasıdır. Donanım arızası gibi beklenmedik durumlarda transaction log ve alınan backup’lar da prensibe bağlılık adına önem arz etmektedir.
2- İlişkisel Olmayan Veri Tabanı (Not Only SQL — NoSQL)
NoSQL, ilişkisel veri tabanı sistemlerine alternatif bir çözüm olarak ortaya çıkmıştır. E-ticaret, internet arama motorları ve sosyal ağlar gibi çok büyük ölçekli verilerin depolanması ve yazılmasında ilişkisel veri tabanlarının eksik kaldığı hususlarda, bir cluster üzerinde dağıtık yapıda NoSQL çözümleri geliştirilmiştir. NoSQL, RDBMS’lerin sahip olduğu güçlü ve anlık veri tutarlılığından vereceği taviz ile daha yüksek performans ve erişilebilirlik elde etmeye yöneldi.
Bazı Popüler NoSql Veri Tabanları ve Özellikleri
- Document Based (MongoDB — CouchDB) : E-ticaret siteleri, İçerik yönetim sistemleri vb.
- Key/Value(Redis): Kullanıcı oturum bilgisi saklama, Alış veriş sepeti verisi saklama vb.
- Graph Based (Neo4J): Sosyal medya uygulamaları, Graph tabanlı arama uygulamaları vb.
- Column Based (Cassandra, HBase): Transaction loglama, IoT uygulamaları vb.
Özellikler
a) Scale Out: İlişkisel olmayan veri tabanı scale out’tır. Scale outnedir? Veri tabanını bir kutu gibi düşünebiliriz. Veri tabanındaki verimiz büyüttükçe yeni bir kutu ekleriz. Yeni bir kutu eklemek için bir sınır yoktur bu nedenle istediğimiz kadar veri tabanımızı büyütebiliriz.
b) Unstructured Data: Veri, öncelikle performans ve ölçeklenebilirlik düşünülerek unstructered bir yapıda NoSQL veri tabanına kaydedilir ve asenkron olarak işlenerek structered bir yapı halinde ilişkisel veri tabanına yazılır. Ham verinin NoSQL de, işlenmiş olanın ise SQL de tutulması diyebiliriz.
c) CAP Teoremi
Teorem basit olarak dağıtık bir sistemde veri üzerinden sunulan hizmet için aynı anda 3 özelligin sağlanamayacağıdır. Yukarıdaki görselde görüldüğü gibi tasarlardığınız sistem CA, CP veya AP olabilir. CAP olamaz.
c.1) Consistency(Tutarlılık): Dağıtık bir sistemde bir sunucuya x değeri olarak 5 yazdınız. Aynı sorguyu ağınızdaki başka sunucuya yaptınız ve cevap olarak 5 değerini aldınız. Bu tutarlılıktır.
c.2) Availability(Erişebilirlik): Dağıtık her zaman eriştiniz. Hem x değerini yazabildiniz, hemde okuyabildiniz.
c.3) Partition Tolarance (Bölünebilme Toleransı): Ağınızdaki sunucuların arasındaki bağlantı gittiğinde de çalışmaya devam edebilme.
İlişkisel ve İlişkisel Olmayan Veri Tabanların Karşılaştırılması
- RDBMS’lerinin yatay da ölçeklenebilmesi zor olduğundan, güçlü ve pahalı sunucularla dikeyde ölçeklendirme yoluna gidilir. NoSQL kolayca yatayda ölçeklenebileceğinden sunucu maliyetleri noktasında avantajlı olabilir.
- İlişkisel veri tabanlarında anlık veri tutarlılığı (immediate consistency) vardır. NoSQL de ise bu anlık, yerini nihai veri tutarlılığına (eventual consistency) bırakır. Eventual Consistency yöntemi ile arkaplanda Node’lardaki veriler eşleştirilir. Bu eşleştirmeden önce yapılan bir sorgularda veri değerlerinde tutarsızlıklar olabilir.
- RDBMS’lerin bakım maliyetleri yüksektir. NoSQL veri tabanları daha az yönetim ve onarım maliyeti getirir. Maliyet konusunda NoSQL veri tabanlarının bir çoğunun open source oluşu da önemli bir etkendir.