Veritabanı Yönetim Sistemleri

Münevver Özhan
14 min readOct 26, 2023

--

Selamlar herkese . VeriTabanı Yönetim Sistemi (DBMS) hakkında, 3 bölümden oluşan , çeşitli kaynaklardan yararlanarak oluşturduğum
ilk medium yazımla karşınızdayım.
1. Bölümde : İlişkisel veritabanı , İlişkisel Veritabanı Yönetim Sistemi , İlişkisel Veritabanı Özellikleri , Avantajları ve Popüler İlişkisel Veritabanları Nelerdir konularını açıklamaya çalıştım.

2.Bölümde : İlişkisel Olmayan (NoSQL) Veritabanı , NoSQL Veritabanı Türleri, NoSQL veritabanlarının Avantajları , NoSQL Veritabanı Yapısı , NoSQL Veritabanlarının Yaygın Kullanım Alanları , NoSQL Veritabanları , NoSQL Veritabanlarını Seçmeniz Gereken Durumlar Nelerdir konularını açıklamaya çalıştım .

3.Bölümde : SQL ve NoSQL Veritabanlarının Karşılaştırılmasını ; Ölçeklenebilirlik Açısından Farklılıklar , Kullanılan Dil Açısından Farklılıklar , Hangi Durumlarda Kullanıldıkları ve Basit Bir Örnek ile Nerelerde Kullanıldıkları gibi alt konu başlıklarını kullanarak açıklamaya çalıştım.

Son olarak özet bir karşılaştırma yaptığım bir Sonuç bölümü ekledim.

Umarım sizler için bilgilendirici ve yararlı olur. Herkese şimdiden keyifli okumalar :)

Veritabanı Yönetim Sistemi (DBMS), kullanıcıların veritabanlarını oluşturmasına, yönetmesine ve sorgulamasına olanak tanıyan bir yazılımdır. DBMS, verileri depolamak, yönetmek ve korumak için bir dizi araç ve hizmet sağlar.

DBMS’ler, aşağıdakiler de dahil olmak üzere birçok fayda sağlar:

. Verilerin merkezileştirilmiş depolanması ve yönetimi, veri tutarlılığını ve erişilebilirliğini sağlar.
. DBMS’ler, verilerin verimli bir şekilde sorgulanmasına olanak tanır.
. DBMS’ler, verilerin güvenliğini ve gizliliğini sağlar.

DBMS’ler, veri depolama ve erişim yaklaşımlarına göre sınıflandırılabilir. İki ana tür veritabanı yönetim sistemi vardır:

1 ) İlişkisel veritabanı yönetim sistemleri (RDBMS’ler), verileri tablolar ve ilişkiler olarak depolayan veritabanı yönetim sistemleridir. RDBMS’ler, en yaygın kullanılan veritabanı yönetim sistemi türüdür.
2 ) NoSQL veritabanı yönetim sistemleri, verileri ilişkilere dayalı olarak depolamayan veritabanı yönetim sistemleridir. NoSQL veritabanı yönetim sistemleri, özellikle büyük miktarda veriyi işlemek için uygundur.

DBMS’lerin bazı örnekleri şunlardır:

. Oracle
. Microsoft SQL Server
. MySQL
. PostgreSQL
. MongoDB
. Cassandra
. HBase
. Redis

1 . Bölüm => İlişkisel Veritabanı Yönetim Sistemleri(RDBMS):

Database(Veritabanı) Nedir ?

Bir veritabanı, bir bilgisayarda saklanan bir veri kümesidir. Bu veriler, genellikle verilere kolay erişimi sağlayan bir şekilde yapılandırılır.

İlişkisel veritabanları, bir şekilde birbirleriyle ilişkili olan çeşitli bilgi türlerini depolamak için kullanılan araçlardır. Veri mühendisleri, kuruluşların veri toplamasına, depolamasına ve analiz etmesine yardımcı olmak için ilişkisel veritabanlarını (ve diğer veri yönetimi sistemlerini) oluşturur ve tasarlar. Ardından, veri analistleri ve veri bilimcileri bunları büyük miktarda veriyi sindirmek ve anlamlı içgörüler tespit etmek için kullanır.

İlişkisel Veritabanı Nedir ?

İlişkisel veritabanı, verileri depolayan ve bunlara erişime izin veren bir veritabanı türüdür. Bu tür veritabanları, içindeki veri öğelerinin birbirleriyle önceden belirlenmiş ilişkileri olduğu için “ilişkisel” olarak adlandırılır. İlişkisel veritabanındaki veriler tablolarda saklanır. Tablolar, benzersiz kimlikler veya “anahtarlar” ile birbirine bağlanır. Bir kullanıcı belirli bilgilere erişmek istediğinde, söz konusu anahtar ile ilişkili tüm veri tablolarına erişebilir.

İlişkisel Veritabanı Yönetim Sistemleri (RDBMS) :

RDBMS, ilişkili bir veritabanı oluşturmanıza, güncellemenize ve yönetimsel görevler gerçekleştirmenize olanak tanıyan bir programdır. İlişkisel veritabanı ile RDBMS arasındaki fark, ilişkili veritabanlarının bilgileri ilişkili veri modeline göre organize etmesidir. Buna karşılık, RDBMS, kullanıcıların veritabanını yönetmesine izin veren veritabanı yazılımıdır. Çoğu ilişkisel veritabanı yönetim sistemi, veritabanına erişmek için SQL dilini kullanır.

SQL nedir ?

SQL (Structured Query Language), ilişkisel bir veritabanı yönetim sisteminde depolanan verilerle iletişim kurmak için kullanılan bir programlama dilidir. SQL sözdizimi İngiliz diline benzerdir, bu da yazmayı, okumayı ve yorumlamayı nispeten kolaylaştırır.

Birçok RDBMS, tablolardaki verilere erişmek için SQL’i (ve SQL varyasyonlarını) kullanır. Örneğin, SQLite ilişkisel bir veritabanı yönetim sistemidir. SQLite, tüm RDBMS’lerde aynı olan minimal bir SQL komutu kümesi içerir. Diğer RDBMS’ler farklı varyantlar kullanabilir.

İlişkisel veritabanı özellikleri :

Bir RDBMS , ACID kısaltmasıyla temsil edilebilen özelliklere sahiptir. Bunlar kısaca :

Atomicity(Atomiklik) : Bir işlemin tüm parçaları tamamen ve başarıyla gerçekleştirilir veya tüm işlem başarısız olur.

Consistency(Tutarlılık): Veri, ilişkisel veritabanı boyunca tutarlı kalır. Veri bütünlüğü veya mevcut verinin doğruluğu ve eksiksizliği, ilişkisel veritabanlarında bütünlük kısıtlamalarıyla sağlanır.

Isolation(Yalıtılmışlık): Her işlem diğer işlemlerden bağımsızdır. Bir kayıttaki veriler diğerine taşmaz, bu nedenle güvenlidir.

Durability(Dayanıklılık): Sistem arızalanmış olsa bile, tamamlanan işlemlerden gelen veriler güvenle saklanır.

İlişkisel veritabanlarının avantajları:

Basit ve merkezi veritabanı: İlişkisel veritabanları basittir. Tablolar arasında geçiş yapmak gibi çeşitli amaçlar için kullanılabilecek bol miktarda bilgi sağlar. Ayrıca, ERP sistemleri ilişkisel veritabanları üzerine kuruludur, bu nedenle kullanıcılara müşterileri, envanteri ve çok daha fazlasını yönetmelerinde yardımcı olur.

Kullanımı kolay: Çoğu şirket, büyük miktarda veriyi organize etmek ve yönetmek için ilişkisel veritabanlarını ve ERP’yi kullanır. Sürekli kullanım, bu sistemlerde iyileştirmeler yapılmasına yardımcı olur (örneğin buluta geçiş). SQL kullanarak kullanıcılar, ihtiyaç duydukları bilgileri almak, filtrelemek ve fikir oluşturmak için veri kümelerinde kolayca gezinebilirler.

Zaman ve para tasarrufu: İlişkisel veritabanlarını kullanarak şirketler organize ve verimli kalabilir. Eşsiz kimlikler, ister bir müşterinin siparişini isterse müze ziyaretçilerini izliyor olsun, yinelenen bilgileri ortadan kaldırmaya yardımcı olur. Müşteri verilerinin günlüklerini girmek için zaman harcamak yerine, bir ilişkisel veritabanı yedekliliği azaltır ve böylece çalışanların zamanını kazandırır. Şirketler bu işgücünü başka yerlere tahsis ederek para tasarrufu yapabilirler.

Popüler İlişkisel Veritabanı Yönetim Sistemleri

SQL sözdizimi, kullandığınız RDBMS’ye bağlı olarak biraz farklılık gösterebilir. İşte popüler RDBMS’lerin kısa bir açıklaması:

MySQL:
MySQL, en popüler açık kaynak SQL veritabanıdır. Genellikle web uygulama geliştirme için kullanılır ve genellikle PHP kullanılarak erişilir.

MySQL’in ana avantajları, kullanımı kolay, uygun fiyatlı, güvenilir (1995'ten beri var) ve soruları cevaplamaya yardımcı olabilecek geniş bir geliştirici topluluğuna sahip olmasıdır.

Dezavantajlarından bazıları, ölçeklendirme sırasında kötü performans gösterdiği bilinmesidir, açık kaynak geliştirme Oracle’ın MySQL’in kontrolünü ele geçirmesinden bu yana yavaşlamıştır ve geliştiricilerin kullanmaya alışkın olduğu bazı gelişmiş özellikleri içermez.

PostgreSQL:
PostgreSQL, herhangi bir şirket tarafından kontrol edilmeyen açık kaynaklı bir SQL veritabanıdır. Genellikle web uygulama geliştirme için kullanılır.

PostgreSQL, MySQL ile aynı avantajların çoğunu paylaşmaktadır. Kullanımı kolay, uygun fiyatlı, güvenilir ve geniş bir geliştirici topluluğuna sahiptir. Ayrıca, karmaşık bir yapılandırma gerektirmeden yabancı anahtar desteği gibi ek özellikler de sunar.

PostgreSQL’in ana dezavantajı, MySQL gibi diğer veritabanlarından daha yavaş performans gösterebilmesidir. Ayrıca MySQL’den biraz daha az popülerdir.

Oracle DB:
Oracle DB, özellikle bankacılık sektöründe olmak üzere büyük uygulamalar içindir. Dünyanın en büyük bankalarının çoğu Oracle uygulamalarını kullanır, çünkü Oracle güçlü bir teknoloji ve kapsamlı, önceden entegre iş uygulamaları kombinasyonu sunar, bunlara bankalar için özel olarak üretilmiş temel işlevler de dahildir.
Oracle Database’inde kod açık kaynaklı değildir.
Oracle kullanmanın ana dezavantajı, açık kaynaklı rakipleri gibi ücretsiz olmaması ve oldukça pahalı olabilmesidir.

SQL Server:
SQL Server, Microsoft’a aittir.Kod açık kaynaklı değildir.
Büyük kurumsal uygulamalar çoğunlukla SQL Server kullanır.
Microsoft, Express adı verilen ücretsiz bir giriş seviyesi sürüm sunar, ancak uygulamanızı ölçeklendirdikçe çok pahalı hale gelebilir.

SQLite :
SQLite, popüler bir açık kaynaklı SQL veritabanıdır.Veritabanının tamamını tek bir dosyada depolayabilir. Bunun sağladığı en önemli avantajlardan biri, veri tabanınızı bir sunucuya bağlamadan tüm verileri yerel olarak depolayabilmenizdir.

2.Bölüm => İlişkisel olmayan (NoSQL) Veritabanları :

Non-Relational (İlişkisel olmayan) Veritabanı nedir ?

İlişkisel olmayan veritabanı, verileri tablolar yerine en uygun formatta depolayan bir veritabanı türüdür. İlişkisel olmayan veritabanları, e-posta mesajları, videolar, resimler ve iş belgeleri gibi kolayca standartlaştırılmayan yapılandırılmamış verileri veya gevşek tanımlanmış verileri içerecek şekilde tasarlanmıştır. Ayrıca yapılandırılmış ve yapılandırılmamış verilerin bir karışımını depolamak için de kullanılabilirler.Örneğin, büyük bir mağazanın ; her müşterinin adı, adresi, sipariş geçmişi ve kredi kartı bilgileri gibi tüm bilgilerini içeren kendi belgesine sahip bir veritabanı olabilir. Bu bilgi parçalarının her biri, farklı formatlarına rağmen aynı belgede saklanabilir.

İlişkisel olmayan veritabanları NoSQL olarak adlandırılır, yani SQL dili kullanmazlar, ancak birçok NoSQL veritabanı SQL sorgularını destekler.

İlişkisel olmayan veritabanları genellikle daha hızlı performans gösterir, çünkü bir sorgu cevabı vermek için ilişkisel veri kümelerinin sık sık yaptığı gibi birden fazla tabloya bakmak zorunda değildir. Bu nedenle, sıkça değiştirilebilen verileri veya birçok farklı türde veriyi işleyen uygulamalar için İlişkisel olmayan veritabanları idealdir. Hızla gelişen ve büyük miktarlarda karmaşık, yapılandırılmamış veriyi barındırabilen dinamik bir veritabanı gerektiren uygulamaları destekleyebilirler.

NoSQL Veritabanı Türleri:

Anahtar-değer: Anahtar-değer veritabanları yüksek oranda bölümlendirilebilir ve diğer veritabanlarının ulaşamayacağı ölçeklerde yatay ölçeklendirmeye imkan tanır. Anahtar-değer veri modeli için özellikle de oyun, reklam teknolojisi ve IoT gibi kullanım örnekleri uygundur. Amazon DynamoDB her ölçekte iş yükü için tutarlı, milisaniye cinsinden tek basamaklı gecikme süresi sunacak şekilde tasarlanmıştır. Bu tutarlı performans, Snapchat’in depolamadaki en büyük yazma iş yükünü içeren Snapchat Stories özelliğinin DynamoDB’ye taşınmasındaki en önemli nedendir.

Belge: Geliştiriciler için verimli ve sezgisel bir veri modeli olduğundan veriler, uygulama kodunda genellikle bir nesne veya JSON benzeri bir belgeyle temsil edilir. Belge veritabanları, geliştiricilerin uygulama kodlarında kullandıkları aynı belge modeli biçimini kullanarak bir veritabanında veri depolamasını ve sorgulamasını kolaylaştırır. Belgelerin ve belge veritabanlarının esnek, yarı yapılandırılmış ve hiyerarşik yapısı sayesinde geliştiriciler, uygulamaların gereksinimleri doğrultusunda geliştirme yapabilirler. Bu belge modeli; kataloglar, kullanıcı profilleri ve her belgenin hem benzersiz olduğu hem de zamanla geliştiği içerik yönetim sistemleri ile birlikte oldukça kullanışlıdır. Amazon DocumentDB (MongoDB ile uyumlu) ve MongoDB, esnek ve yinelemeli geliştirme için hem güçlü hem de sezgisel API’ler sağlayan popüler belge veritabanlarıdır.

Grafik: Bir grafik veritabanının amacı, yüksek oranda bağlı veri kümeleriyle çalışan uygulamalar oluşturup çalıştırmayı kolaylaştırmaktır. Grafik veritabanlarının yaygın olarak karşılaşılan kullanım örnekleri arasında sosyal ağlar, öneri altyapıları, dolandırıcılık algılama ve bilgi grafikleri yer alır. Amazon Neptune, tam olarak yönetilen bir grafik veritabanı hizmetidir. Hem Property Graph modelini hem de Resource Description Framework’ü (RDF) destekleyen Neptune, iki grafik API’si seçeneği sunar: TinkerPop ve RDF/SPARQL. Popüler grafik veritabanlarına örnek olarak Neo4j ve Giraph verilebilir.

Bellek içi: Oyun ve reklam teknolojisi uygulamalarının puan tabloları, oturum depoları ve gerçek zamanlı analiz gibi mikrosaniye düzeyinde yanıt süreleri gerektiren ve her an ani trafik artışları yaşanabilen kullanım örnekleri vardır. Amazon MemoryDB for Redis, mikrosaniye düzeyinde okuma gecikmesi, tek haneli milisaniye düzeyinde yazma gecikmesi ve Multi-AZ dayanıklılığı sağlayan, Redis uyumlu, dayanıklı, bellek içi bir veritabanı hizmetidir. MemoryDB, onu modern, mikro hizmet uygulamalarına yönelik birincil veritabanı olarak kullanabilmeniz için ultra hızlı performans ve dayanıklılık sunacak şekilde amaca özel tasarlanmıştır. Amazon ElastiCache, düşük gecikme süreli, yüksek aktarım hızlı iş yükleri sağlamak üzere, Redis ve Memcached ile uyumlu, tam olarak yönetilen, bellek içi bir önbelleğe alma hizmetidir. Uygulamalarından gerçek zamanlı yanıtlara ihtiyaç duyan Tinder gibi müşteriler, disk tabanlı veri depoları yerine bellek içi veri depoları kullanmaktadır. Amazon DynamoDB Accelerator (DAX), amaca özel tasarlanmış bir diğer veri deposu örneğidir. DAX, DynamoDB’nin okuma hızının bir üst düzeye çıkmasını sağlar.

Arama: Birçok uygulama, geliştiricilerin sorunları gidermesine yardımcı olmak için günlük oluşturur. Amazon OpenSearch Hizmeti, yarı yapılandırılmış günlükleri ve ölçümleri dizine ekleyerek, biriktirerek ve bunlarda arama yaparak makineler tarafından oluşturulan veriler için neredeyse gerçek zamanlı görselleştirme ve analizler sağlamak için amaca yönelik tasarlanmıştır. Amazon OpenSearch Hizmeti aynı zamanda tam metin arama kullanım örneklerine yönelik güçlü bir yüksek performanslı arama altyapısıdır.

NoSQL veritabanlarının Avantajları :

Cost-effectiveness: Üst düzey, ticari RDBMS’leri sürdürmek pahalıdır. Dikey olarak ölçeklenmek için lisans satın alma, eğitimli veritabanı yöneticileri ve güçlü donanım gerekir. NoSQL veritabanları, yatay olarak hızlı bir şekilde ölçeklendirmenize izin verir ve maliyetleri en aza indirmek için kaynakları daha iyi tahsis eder.

Flexibility(Esneklik): Yatay ölçekleme ve esnek bir veri modeli, NoSQL veritabanlarının çevik geliştirme, hızlı yinelemeler ve sık kod gönderme için harika hale getiren büyük hacimli ve hızla değişen verileri ele alabileceği anlamına gelir.

Replication(Replikasyon): NoSQL replikasyon işlevi, verileri birden fazla sunucuda kopyalar ve depolar. Bu replikasyon, veri güvenilirliği sağlar, kesinti süresi boyunca erişimi garanti eder ve sunucular çevrimdışı olursa veri kaybına karşı korur.

Speed(Hız): NoSQL, geliştiricilerden satış ekiplerine ve müşterilere kadar tüm kullanıcılar için daha hızlı ve daha çevik depolama ve işleme sağlar. Hız, NoSQL veritabanlarını genellikle modern, karmaşık web uygulamaları, e-ticaret siteleri veya mobil uygulamalar için daha iyi bir uyum haline getirir.

Özetle, NoSQL veritabanları yüksek performans, kullanılabilirlik ve ölçeklenebilirlik sağlar.

NoSQL veritabanı Yapısı:

NoSQL veritabanları ilişkisel değildir, bu nedenle verileri yalnızca satır ve tablo olarak saklamazlar. Bunun yerine, genellikle dört tür yapıdan birine girerler:

Sütun odaklı(Column-oriented): Veriler, satırlar yerine neredeyse sınırsız sayıda sütunlarda gruplandırılmış hücreler halinde saklanır.
Anahtar-değer depoları(Key-value stores): Veri modeli olarak bir ilişkisel dizi (aynı zamanda bir sözlük veya harita olarak da bilinir) kullanır. Bu model, verileri bir anahtar-değer çiftleri koleksiyonu olarak temsil eder.
Belge depoları(Document stores): Verileri standart formatlarda (XML, YAML, JSON (JavaScript Object Notation) ve BSON dahil) tutmak ve kodlamak için belgeler kullanır. Avantajı, tek bir veritabanındaki belgelerin farklı veri türlerine sahip olabilmesidir.
Grafik veritabanları(Graph databases:): Verileri, farklı veri kümelerinin birbirleriyle nasıl ilişkilendirildiğini gösteren bir grafikte temsil eder. Neo4j, RedisGraph (Redis’e yerleştirilmiş bir grafik modülü) ve OrientDB, grafik veritabanlarının örnekleridir.

İlişkisel olmayan veritabanlarının yaygın kullanım alanları:

. Web uygulamaları
. Mobil uygulamalar
. Büyük veri uygulamaları
. IoT uygulamaları
. İçerik yönetim sistemleri
. Sosyal medya uygulamaları

İlişkisel olmayan veritabanlarına örnekler:

MongoDB : Tablolar ve satırlar yerine esnek belgeler kullanarak çeşitli veri formlarını işleyen ve depolayan açık kaynaklı, ilişkisel olmayan bir veritabanı yönetim sistemidir (DBMS). ilişkisel veritabanı yönetim sistemi gerektirmediği için, çok değişkenli veri türlerini kolayca depolamayı ve sorgulamayı sağlayan elastik bir veri depolama modeli sağlar.

Cassandra : Apache Cassandra, binlerce şirket tarafından ölçeklenebilirlik ve yüksek kullanılabilirlik için performanstan ödün vermeden güvenilen açık kaynaklı bir NoSQL dağıtılmış veritabanıdır. Uygun fiyatlı donanım veya bulut altyapısı üzerinde doğrusal ölçeklenebilirlik ve kanıtlanmış hata toleransı, onu kritik öneme sahip veriler için mükemmel platform haline getirir.

CouchDB : Apache CouchDB , JSON tabanlı belge biçiminde veri toplayan ve depolayan açık kaynaklı bir NoSQL belge veritabanıdır. CouchDB, ilişkisel veritabanlarının aksine, çeşitli bilgi işlem cihazlarında, cep telefonlarında ve web tarayıcılarında kayıt yönetimini basitleştiren şema içermeyen bir veri modeli kullanır.

Redis : Redis (REmote DIctionary Server için), uygulama önbelleği veya hızlı yanıt veren veritabanı olarak kullanılan açık kaynaklı, bellek içi NoSQL anahtar-değer deposudur. Verileri disk veya katı hal sürücüsünde (SSD) değil de bellekte sakladığı için Redis eşsiz hız, güvenilirlik ve performans sunar. Redis’in dikkat edilmesi gereken diğer özellikleri arasında çoklu veri yapısı desteği, yerleşik Lua betik oluşturma, çoklu düzeyde disk içi kalıcılık ve yüksek kullanılabilirlik bulunur.

Elasticsearch: Apache Lucene kütüphanesine dayalı açık kaynaklı bir arama ve analiz motorudur. Elasticsearch, başlangıçta 2010 yılında Elastic tarafından, birden fazla veritabanı türünde şeması olmayan JSON belgelerine tam metin arama işlevselliği getirmek için dağıtılmış bir Java çözümü olarak tasarlanmıştır.Elasticsearch ayrıca, geliştiricilere farklı veri biçimlerini görselleştirme ve analiz için çağırırken inanılmaz esneklik sağlayan RESTful bir API tasarımına sahiptir.

İlişkisel olmayan veritabanlarını seçmeniz gereken durumlar:

Büyük miktarlarda yapılandırılmamış veriyle çalışmanız gerektiğinde
Verilerinizin sık sık değişmesi gerektiğinde
Uygulamanızın birçok farklı türde veriyi işlemesi gerektiğinde
Uygulamanızın hızla gelişmesi ve dinamik bir veritabanına ihtiyacı olması gerektiğinde

3. Bölüm => SQL ve NOSQL Veritabanlarının Farklılıkları :

SQL ve NOSQL Veritabanlarının Farklılıkları :
SQL, ilişkisel veritabanlarına erişmek için onlarca yıldır kullanılan bir yöntemdir ve veri tabanlarıyla çalışan çoğu kişi buna aşinadır. Bununla birlikte, yıllar içinde yapılandırılmamış veriler, depolama ve işleme gücü miktarları ve analiz türleri değiştiğinden, yeni kullanım senaryolarına daha uygun olan farklı veritabanı teknolojilerinin kullanılabilir olduğunu gördük. Bu veritabanlarına yaygın olarak NoSQL denmektedir.

SQL ve NoSQL, ilişkisel (SQL) veya ilişkisel olmayan (NoSQL), şemalarının önceden tanımlanmış mı yoksa dinamik mi olduğu, nasıl ölçeklendiği, içerdikleri veri türü ve çok satırlı işlemler için mi yoksa yapılandırılmamış veriler için mi daha uygun olduğu konusunda farklılık gösterir.

SQL (relational databases) ve NoSQL (non-relational databases) Veritabanları’nın Karşılaştırılması :

NoSQL ve SQL veritabanları arasındaki yapısal farklılıklar:
SQL veritabanları tablolardan oluşurken, NoSQL veritabanları belge odaklı, anahtar-değer çiftleri veya grafik yapılar şeklinde olabilir. NoSQL veritabanında bir belge, anahtar-değer çiftleri içerebilir ve bu çiftler sıralanıp iç içe yerleştirilebilir.

Örneğin, bir SQL veritabanında bir müşteri tablosu ürün satın almalarını içeren ayrı bir tablodan ayrılabilir. NoSQL veritabanında ise bir müşteri belgesi, müşterinin tüm bilgilerini, satın almalarını ve diğer ilişkili verileri içerebilir.

NoSQL veritabanlarının bu esnekliği, özellikle karmaşık ve/veya değişken veri yapılarını depolaması gereken uygulamalar için faydalıdır. Örneğin, sosyal medya uygulamaları, kullanıcılardan metin, resim, video ve diğer türde verileri içeren belgeler depolamada NoSQL veritabanlarından yararlanabilir.

NoSQL ve SQL veritabanları arasındaki ölçeklenebilirlik Açısından farklılıklar:

NOT : ölçeklenebilirlik, veritabanının daha fazla veri depolama ve daha fazla işlemi işleme yeteneğini ifade eder.

SQL veritabanları dikey olarak ölçeklenir, genellikle tek bir sunucuda ve depolama kapasitelerini artırmak için kullanıcıların fiziksel donanımı artırması gerekir. Sonuç olarak, bulut depolama seçenekleri mevcut olsa da, SQL veritabanları büyük veri miktarlarıyla uğraşırken işletmeler için çok pahalı olabilir.

NoSQL veritabanları yatay olarak ölçeklenebilirlik sunar, yani veri yüklerini artırmak için yalnızca daha fazla sunucu eklenmesi gerekir. Bu, dağıtılmış kaynaklar sunan modern bulut tabanlı altyapılar için NoSQL veritabanlarının daha iyi olduğu anlamına gelir.

Dikey ölçeklendirme (vertical scaling): Tek bir sunucunun kaynaklarını (CPU, RAM, disk alanı vb.) artırarak sunucunun işleyebileceği veri miktarını artırma işlemidir.
Yatay ölçeklendirme (horizontal scaling): Daha fazla sunucu ekleyerek sunucuların işleyebileceği veri miktarını artırma işlemidir.
Dağıtılmış kaynaklar (distributed resources): Birbirine bağlı ve birlikte çalışan birden fazla sunucudan oluşan bir sistemin kaynaklarıdır.
NoSQL veritabanlarının yatay olarak ölçeklenebilir olması, onları büyük veri uygulamaları için ideal hale getirir. SQL veritabanları ise daha küçük veri kümeleri için daha uygundur.

NoSQL ve SQL veritabanları arasındaki Kullanılan Dil Açısından farklılıklar:

SQL veritabanları SQL (Yapılandırılmış Sorgu Dili) kullanır. NoSQL veritabanları JSON (JavaScript Nesne Gösterimi), XML, YAML veya ikili şema kullanır ve bu da yapılandırılmamış verileri kolaylaştırır. SQL’in sabit tanımlı bir şeması vardır, NoSQL veritabanları ise daha esnektir.

Yapılandırılmış Sorgu Dili (Structured Query Language — SQL): Veritabanlarını sorgulamak ve yönetmek için kullanılan bir programlama dilidir.
JavaScript Nesne Gösterimi (JavaScript Object Notation — JSON): Verileri nesneler ve anahtar-değer çiftleri şeklinde temsil etmek için kullanılan bir veri formatıdır.
Extensible Markup Language (XML): Verileri hiyerarşik bir yapı içinde temsil etmek için kullanılan bir işaretleme dilidir.
YAML Ain’t Markup Language (YAML): XML’den daha basit ve okunabilir bir işaretleme dilidir.
İkili şema (binary schema): Verileri ikili kod şeklinde temsil etmek için kullanılan bir şema türüdür.
Sabit tanımlı şema (fixed-defined schema): Veritabanındaki tabloların ve sütunların yapısını tanımlayan sabit kurallar kümesidir.
Elastik şema (flexible schema): Veritabanındaki tabloların ve sütunların yapısının değişebileceği bir şema türüdür.

NoSQL ve SQL veritabanları hangi durumlarda kullanılır:

SQL ve NoSQL veritabanları arasında karar vermek önemlidir, çünkü bunlar yapı, yetenekler ve ideal kullanım durumları açısından farklılık gösterir.

SQL gibi ilişkisel bir veritabanı, veri tabloları arasındaki ilişkiler üzerine kurulu bir uygulama oluşturmak istiyorsanız harika bir seçenektir. SQL ayrıca verilerinizin tablolar arasında tutarlı olmasını sağlamak istediğinizde de iyi çalışır. Ancak ilişkisel veritabanları, esneklik veya ölçeklendirme açısından her zaman en iyi seçim değildir.

İlişkisel olmayan bir NoSQL veritabanı, yapılandırılmış tablolar kullanmaz, bunun yerine yapısal olmayan veri depolama için esnek şemalar kullanır. Bu, projelerinizi gerektiği gibi ölçeklendirme becerinizi size kazandırır. Ancak bu aynı zamanda tutarlılık ve veri ilişkileri üzerinde daha az kontrol sahibi olduğunuz anlamına gelir. NoSQL’in sizin için en mantıklı olabileceği bazı durumlar şunlardır:

Yüksek performansa, özellikle okuma performansına ihtiyacınız varsa: Cassandra ve Riak gibi dağıtılmış NoSQL sistemlerinin çalışma şekli, genellikle daha fazla kutu ekleyerek çok yüksek okuma performansı elde edebileceğiniz anlamına gelir. Bazıları, her zaman erişilebilecek verilerinizin bol miktarda kopyasına sahip olmanızı sağlamak için verileri düğümler arasında otomatik olarak çoğaltır.

Yüksek kullanılabilirliğe (high availability ) ihtiyacınız varsa: NoSQL sisteminde veriler düğümler arasında çoğaltıldığından, tek bir düğümün arızalanması mutlaka veri kaybına veya uygulamanızda kesintiye neden olmaz. Bu ayrıca, kullanılabilirliği etkilemeden kümelere düğüm ekleyebileceğiniz veya kaldırabileceğiniz anlamına gelir.

Basit bir kitap veritabanının şemasını modelleme örneğini ele alalım:

İlişkisel bir veritabanında genellikle bir kitap kaydı gizlenerek (veya “normalleştirilerek”) ayrı tablolarda depolanırken, ilişkiler birincil ve yabancı anahtar kısıtlamaları tarafından tanımlanır. Bu örnekte Books (Kitaplar) tablosu ISBN, Book Title (Kitap Başlığı) ve Edition Number (Baskı Sayısı) sütunlarına; Authors (Yazarlar) tablosu AuthorID (Yazar Kimliği) ve Author Name (Yazar Adı) sütunlarına; Author-ISBN (Yazar-ISBN) tablosu ise AuthorID (Yazar Kimliği) ve ISBN sütunlarına sahiptir. İlişkisel model, veritabanının yedekliliği azaltacak şekilde normalleştirilmiş ve genel olarak depolama için optimize edilmiş tablolar arasında başvurusal bütünlük uygulamasına imkan tanıyacak şekilde tasarlanmıştır.
Bir NoSQL veritabanında, kitap kaydı genellikle bir JSON belgesi olarak saklanır. Her kitap için öğe, ISBN, Book Title (Kitap Başlığı), Edition Number (Baskı Sayısı), Author Name (Yazar Adı) ve AuthorID (Yazar Kimliği) bilgileri tek bir belgede öznitelikler olarak depolanır. Bu modelde, veriler sezgisel yazılım geliştirme ve yatay ölçeklenebilirlik için optimize edilir.

SONUÇ :

En uygun iş yükleri:
İşlemsel ve güçlü tutarlılığa sahip çevrimiçi işlem gerçekleştirme (OLTP) uygulamaları için tasarlanan ilişkisel veritabanları, çevrimiçi analitik işlem (OLAP) için uygundur. NoSQL veritabanları, düşük gecikme süreli uygulamaları içeren çeşitli veri erişimi desenleri için tasarlanmıştır. NoSQL arama veritabanları, yarı yapılandırılmış veriler üzerinde analiz için tasarlanmıştır.
Veri modeli:
İlişkisel model, verileri satır ve sütunlardan oluşan tablolar halinde normalleştirir. Tablolar, satırlar, sütunlar, dizinler, tablolar arasındaki ilişkiler ve diğer veritabanı öğeleri bir şema tarafından kesin bir şekilde tanımlanır. Veritabanı, tablolar arasındaki ilişkilerde başvurusal bütünlük uygular.

NoSQL veritabanları, performans ve ölçek için optimize edilmiş anahtar-değer, belge ve grafik gibi çeşitli veri modelleri sağlar.

ACID özellikleri:
İlişkisel veritabanları bölünmezlik, tutarlılık, yalıtım ve dayanıklılık (ACID) özelliklerini sağlar:

Bölünmezlik, bir işlemin ya tamamen yürütülmesini ya da hiç yürütülmemesini gerektirir.
Tutarlılık, bir işlem gönderildiğinde verilerin veritabanı şemasına uygun olmasını gerektirir.
Yalıtım, eş zamanlı işlemlerin birbirinden bağımsız olarak yürütülmesini gerektirir.
Dayanıklılık, beklenmeyen bir sistem hatasından veya güç kesintisinden sonra bilinen duruma kurtarma becerisi gerektirir.

NoSQL veritabanları yatay olarak ölçeklendirilebilen daha esnek bir veri modeli sağlamak için genellikle ilişkisel veritabanlarının bazı ACID özelliklerini esneterek bunlardan ödün verirler. Bu, tek bir bulut sunucusunun ulaşamayacağı derecede yatay ölçeklendirme gerektiren yüksek performanslı, düşük gecikme süreli kullanım örnekleri için NoSQL veritabanlarının mükemmel bir seçim olmasını sağlar.

Performans:
İlişkisel Veritabanlarında Performans; genellikle disk alt sistemine bağlıdır. En üst düzey performans için genellikle sorguların, dizinlerin ve tablo yapısının optimize edilmesi gerekir.
NoSQL Veritabanlarında Performans; genel olarak temel donanımın küme boyutu, ağ gecikme süresi ve çağrı yapan uygulama gibi etmenlerin birleşimine bağlıdır.

Ölçek:
İlişkisel veritabanları genellikle donanımın işlem kapasitesini artırarak ölçeği artırır veya salt okunur iş yüklerine yönelik replikalar ekleyerek ölçeği genişletir.
NoSQL Veritabanlarında ise; Erişim desenleri aktarım hızını artırmak için neredeyse sınırsız ölçekte tutarlı performans sağlayan dağıtılmış mimariyi kullanarak ölçeği genişletebildiğinden, NoSQL veritabanları genellikle bölümlendirilebilen veritabanlarıdır.

API’ler:
Veri depolama ve alma istekleri, yapılandırılmış sorgu diline (SQL) uygun sorgular kullanılarak iletilir. Bu sorgular ilişkisel veritabanı tarafından ayrıştırılır ve yürütülür.
NoSQL Veritabanlarında ise ;Nesne tabanlı API’ler, uygulama geliştiricilerinin veri yapılarını kolayca depolamasına ve almasına imkan tanır. Bölüm anahtarları, uygulamaların anahtar-değer çiftlerini, sütun kümelerini veya seri hale getirilmiş uygulama nesneleri ve öznitelikleri içeren yarı yapılandırılmış belgeleri bulmasına imkan tanır.

Okuduğunuz için teşekkürler. Başka yazılarda görüşmek üzere :)

--

--