Resim

MongoDB Veritabanı

MongoDB Veritabanı

Günümüzün dijital dünyasında, geleneksel veritabanı çözümlerinin sınırları giderek daha belirgin hale geliyor. Uygulamalarımız; sosyal medya gönderilerinden IoT sensör verilerine, kullanıcı profillerinden ürün kataloglarına kadar sürekli değişen, yapısal olmayan ve yüksek hacimli veriler üretiyor. Bu zorluklara cevap vermek için MongoDB öne çıkıyor.

MongoDB Nedir?

MongoDB, NoSQL (Not Only SQL) kategorisinde yer alan, dağıtılmış, belge tabanlı (Document-Oriented) bir veritabanı yönetim sistemidir (DBMS). İlişkisel veritabanlarının (RDBMS) katı tablo-satır modelinin aksine, MongoDB verileri JSON benzeri BSON (Binary JSON) formatındaki belgeler (documents) halinde depolar.

Belge Tabanlı Veri Modeli

MongoDB'yi benzersiz kılan şey, veri modelidir:

  • Belgeler (Documents): İlişkisel veritabanlarındaki "satır" kavramına eşdeğerdir, ancak çok daha zengindir. Bir belge, tüm ilgili verileri (anahtarlar ve değerler) tek bir birimde tutar. Örneğin, bir kullanıcı hakkındaki tüm bilgileri (adı, adresi, sipariş geçmişi) tek bir MongoDB belgesi içinde saklayabilirsiniz.

  • Koleksiyonlar (Collections): İlişkisel veritabanlarındaki "tablo" kavramına benzer. Belgeler, Koleksiyonlar içinde gruplandırılır.

Neden MongoDB Tercih Ediliyor?

  1. Şemasız (Schema-less) Esneklik:

    • MongoDB, bir koleksiyondaki belgelerin aynı yapıyı (şemayı) takip etmesini zorunlu kılmaz.

    • Bu, uygulamanızın gereksinimleri geliştikçe veya veri yapısı hızla değiştiğinde hızlı iterasyon ve kolay alan ekleme/çıkarma imkanı sunar.

    • Örnek: Bir kullanıcı belgesine yeni bir özellik eklediğinizde, eski belgelere dokunmanıza gerek kalmaz.

  2. Yatay Ölçeklenebilirlik (Horizontal Scalability):

    • Sharding (Parçalama) adı verilen bir teknikle, büyük veri kümelerini birden fazla sunucuya dağıtarak yüksek performansı ve kapasiteyi korur.

    • Bu, büyük ölçekli ve yüksek trafikli uygulamalar için kritik bir özelliktir.

  3. Yüksek Erişilebilirlik:

    • Replica Setler (Çoğaltma Kümeleri) sayesinde veriler birden fazla sunucuda tutulur. Bir sunucu çökerse, sistem otomatik olarak yedek sunucuyu devreye alır, bu da kesintisiz çalışma (High Availability) sağlar.

  4. Geliştirici Dostu ve Hızlı:

    • Belge modeli, programlama dillerindeki nesnelerle (Python'daki sözlükler, JavaScript'teki objeler vb.) doğal olarak eşleştiği için, veri okuma ve yazma işlemleri oldukça sezgiseldir.

MongoDB; mikroservisler, içerik yönetim sistemleri, analitik uygulamalar ve gerçek zamanlı mobil arka uçlar gibi modern projeler için hızlı, esnek ve güçlü bir temel sunar.

Basit Bir MongoDB Belge Yapısı

MongoDB'nin temel gücü, Belge (Document) adı verilen veri yapısında yatar. Bir belge, programlama dillerindeki nesnelere veya sözlüklere (Python'da dict) çok benzer. Anahtar-değer çiftlerinden oluşur ve bir nesnenin tüm verilerini tek bir yerde tutar.

{

    "_id": ObjectId("65e6d62a8c3d902a78e721d3"),
    "isim": "Caner Yılmaz",
    "yas": 32,
    "email": "caner.yilmaz@example.com",
    "aktif_uye": True,
    "adres": {
            "sehir": "Ankara",
            "ulke": "Türkiye"
             },
"ilgi_alanlari": [
                "programlama",
                "seyahat",
                "spor"
                ]
}

_id = Bir belge MongoDB'ye kaydedildiğinde, eğer siz belirlemediyseniz, veritabanı otomatik olarak benzersiz bir birincil anahtar ekler: _id. Bu alan, ilişkisel veritabanlarındaki PRIMARY KEY (birincil anahtar) işlevini görür.

İsim,yas,email = verileri depolayan temel alanlar.

aktif_uye = Boolean (Mantıksal)True veya False değeri.
Adres = Bir değer olarak başka bir sözlük (dict) içerir. Bu, verileri mantıksal olarak gruplamanın yaygın bir yoludur.
ilgi_alanlari = Bir değer olarak birden fazla öğe içeren bir liste (list) içerir. Bu, çoklu değerleri yönetmeyi kolaylaştırır.

MongoDB Nasıl Çalışır?

1. İstemci Uygulaması: Uygulamanız (örneğin Python/PyMongo), MongoDB'ye okuma veya yazma isteğini gönderen son kullanıcı katmanıdır.

2. Sorgu Yönlendiricisi (mongos): İstemciden gelen isteği karşılar. Verinin nerede saklandığını (hangi Parça'da olduğunu) Yapılandırma Sunucularına sorar ve isteği doğru hedefe yönlendirir. Sharded Cluster'ın giriş kapısı ve trafik memurudur. Tek bir Replica Set kullanıyorsanız bu bileşen yoktur.

3. Yapılandırma Sunucuları (config servers): Kümenin meta verilerini (hangi verinin hangi parçada olduğu, parçaların listesi, vb.) saklar. mongos router'ların doğru yönlendirme yapabilmesi için kritiktir. Sistemin haritasını tutan, beynidir.

4. Parçalar (Shards): Veri setinin yatay olarak bölündüğü ve saklandığı ana depolama birimleridir.(Ölçekleme Noktası) Her Parça, tek başına çalışan ve birden fazla sunucudan oluşan bir Replica Set'tir!

5. Birincil Düğüm (Primary Node): Parça (Shard) içindeki Replica Set'in tek lideridir. Tüm yazma işlemlerini bu düğüm yönetir. "Primary Sunucu"

6. İkincil Düğümler (Secondary Nodes): Parça (Shard) içindeki Primary Düğüm'ün verilerini kopyalar. Okuma işlemleri için kullanılabilir ve yüksek erişilebilirlik (yedekleme) sağlar. "Secondary Sunucular"

MongoDB'nin Gerçek Dünya Uygulamaları

MongoDB'nin esnekliği ve gücü, birçok sektörde kritik rol oynar. İşte büyük şirketlerin neden MongoDB'yi tercih ettiğine dair kısa ve çarpıcı uygulamalar:

  • İçerik Yönetimi ve Kataloglama: E-ticaret siteleri ve medya platformları, sürekli değişen ürün özelliklerini ve içeriği şemasız yapısı sayesinde esnekçe yönetir.

  • Mobil ve Sosyal Uygulamalar: Mobil uygulamalar, hızla büyüyen ve değişen kullanıcı profillerini, oturum verilerini ve coğrafi konum bilgilerini verimli bir şekilde depolar.

  • Büyük Veri (Big Data) ve Analitik: IoT cihazlarından ve günlüklerden gelen yüksek hacimli, yapısal olmayan verileri yatay olarak ölçeklendirerek toplar ve gerçek zamanlı analiz eder.

  • Kişiselleştirme ve Kullanıcı Deneyimi: Kullanıcı davranışlarını, tercihlerini ve sepet içeriklerini tek bir yerde saklayarak anında kişiselleştirilmiş öneriler sunar.

Sorular:

Soru 1: Ben bir kişinin bilgisini kaydettim. mongodb primary sunucuda bilgiler kaydedilir. Sonra kaydedilen bilgilerin kopyasını oluşturulur. Yani ikincil sunuculara. kaydettiğim bilgi böylece birden fazla kaydedilmiş olmaz mı? Hafıza açısında yer kaplamaz mı?

Evet, ikincil sunucular verinizin kopyalarını tutar ve bu kesinlikle daha fazla disk alanı kullanır. Ancak, bu bir maliyetten ziyade, modern ve güvenilir uygulamalar için zorunlu bir yatırımdır.

A. Yüksek Erişilebilirlik

Bu, çoğaltmanın en kritik nedenidir.

Senaryo: Primary sunucunun donanımsal bir arıza nedeniyle çökmesi durumunda, sisteminiz anında çalışmayı durdurur.
  • Çözüm: Replica Set, Primary sunucunun çöktüğünü algılar ve saniyeler içinde kalan Secondary sunuculardan birini otomatik olarak yeni Primary sunucu seçer.

  • Sonuç: Kullanıcılar hizmet kesintisi yaşamaz veya çok kısa bir kesinti yaşar. Bu, özellikle e-ticaret siteleri veya finans uygulamaları gibi kesintinin maliyetli olduğu uygulamalar için hayati önem taşır.

B. Okuma Yükünün Dağıtılması

Yazma işlemleri her zaman Primary sunucuya gitmek zorundadır, ancak Okuma işlemleri Secondary sunuculara yönlendirilebilir.

  • Avantaj: Eğer uygulamanız çok fazla okuma sorgusu alıyorsa (örneğin blogunuzun makaleleri okunduğunda), bu okuma yükünü Secondary sunuculara dağıtarak Primary sunucunun üzerindeki baskıyı azaltır ve genel performansı artırırsınız. Primary sunucu böylece sadece yazma işlemlerine odaklanabilir.

Özetle

Maliyet (Dezavantaj)

Kazanım (Avantaj)

Daha Fazla Disk Alanı: Veri kopyalandığı için kullanılan toplam disk alanı artar.

Kesintisiz Çalışma (HA): Primary çökerse, sistem saniyeler içinde devam eder.

Daha Yüksek Donanım Maliyeti: Birden fazla sunucu (VM) çalıştırmanız gerekir.

Veri Güvenliği: Donanım arızası veya doğal afet durumunda verinizi kaybetme riskiniz azalır.

Performans: Okuma yükü Secondary sunuculara dağıtılarak Primary rahatlatılır.



Bu nedenle, modern, kurumsal düzeyde bir uygulama geliştirirken, çoğaltmanın getirdiği ekstra disk alanı maliyeti, sunduğu kesintisizlik ve veri güvenliği garantisinin yanında genellikle kabul edilebilir bir fiyattır.

Soru 2: Kaç Tane İkincil Sunucu Olur?

MongoDB'de bir Replica Set, genellikle tek bir Primary (Birincil) ve birden fazla Secondary (İkincil) üyeden oluşur.

  • Minimum Gereksinim: Bir Replica Set'in tam anlamıyla güvenilir çalışması ve otomatik yük devretme (failover) yapabilmesi için genellikle en az 3 üye (1 Primary ve 2 Secondary) önerilir.

  • Maksimum: Bir Replica Set 50 üye içerebilir, ancak çoğaltma mekanizmasının karmaşıklığı nedeniyle 7 ile 12 üye arasında kalmak yaygındır.

Soru 3: Replica Set üyelerinin sayısını kim belirliyor

Replica Set üyelerinin sayısını belirleyen, otomatik bir MongoDB kuralı veya sabit bir sayı değildir. Bu, tamamen uygulamanın gereksinimlerine ve bütçesine dayalı olarak İnsan Kaynaklı bir Tasarım Kararıdır.

Üye sayısına karar veren başlıca roller:

  1. Veritabanı Yöneticileri (DBA'lar).

  2. DevOps veya Bulut Mühendisleri.

  3. Yazılım Mimarları.

Soru 4: Birinci ve İkinci sunucular bilgilerin kaydedildiği belgeler mi?

Hayır, birinci ve ikinci sunucu (Primary ve Secondary üyeler) bilgilerin kaydedildiği belgeler değildir.

1. Sunucu Seviyesi: Primary ve Secondary

Primary (Birincil) ve Secondary (İkincil) üyeler, fiziksel veya sanal bilgisayarlar (sunucular) üzerinde çalışan MongoDB yazılımı örnekleridir.

  • Bunlar, veriyi depolayan, işleyen ve çoğaltan makinelerdir.

  • Görevleri: Tüm veritabanını (tüm Koleksiyonları ve içindeki tüm Belgeleri) saklarlar. Primary tüm yazma işlemlerini alır; Secondary'ler ise Primary'den kopyalanmış veriyi tutar.

  • Özet: Primary ve Secondary, verinin kendisi değil, veriyi tutan ve yöneten altyapı birimleridir.

2. Veri Seviyesi: Belge (Document)

Belge (Document), sizin kaydettiğiniz bilginin kendisidir.

  • Bir Python sözlüğü (dict) olarak temsil edilir.

  • Görevleri: Bir kullanıcının tüm bilgilerini, bir ürünün detaylarını veya bir siparişin içeriğini JSON benzeri (BSON) formatta tutar.

  • Özet: Belge, veritabanına giren veri birimidir.

Özetle: Sizin kaydettiğiniz bilgiler (belgeler), Primary Sunucu üzerinde bir Koleksiyon içinde saklanır. Ardından bu Primary Sunucu, kaydettiğiniz bu belgenin tam bir kopyasını bir veya daha fazla Secondary Sunucu'ya gönderir.

Dolayısıyla, Primary ve Secondary üyeler, o belgenin saklandığı fiziksel yerlerdir, belgenin kendisi değildirler.

Soru 5: Replica Set (Çoğaltma Kümesi) Nedir?

Bir Replica Set'in yapısını şu şekilde:

Bir Replica Set, kesinlikle bir tane Birincil Düğüm (Primary Node) ve bir veya daha fazla İkincil Düğüm (Secondary Node)'dan oluşur.
  • Toplam Üye Sayısı Sınırı: Teknik olarak bir Replica Set, maksimum 50 üye içerebilir.

  • Pratik Tavsiye: Güvenilir bir otomatik yük devretme (failover) mekanizması için genellikle üye sayısı tek sayı (örneğin 3, 5 veya 7) olarak tutulur.



Soru 6: Tek bir Replica Set kullanıyorsak

"Eğer veri setiniz, veriyi birden fazla Replica Set'e bölerek (yani Sharding yaparak) dağıtmak zorundaysa, bu kümeyi yönetmek için Sorgu Yönlendiricisi (mongos) bileşeni zorunludur."

Açıklaması:

Senaryo

Yapı (Cluster Tipi)

mongos Gerekli mi?

Tek bir Veri Setinin Kopyalanması

Tek Replica Set (3, 5, 7 sunucu...)

HAYIR. Uygulama doğrudan Primary sunucuya veya Replica Set'in kendisine bağlanır.

Birden Fazla Veri Setinin Dağıtılması

Sharded Cluster (Birden fazla Replica Set'ten oluşur)

EVET. Uygulama, hangi verinin hangi Replica Set'te olduğunu bilmediği için, tüm sorgular önce mongos'a gider.



Soru 7: mongos u ben mi yapıyorum yoksa mongodb kendi otomatikman replica sayısına göre mi çalıştırıyor?

mongos'u siz kurar, yapılandırır ve devreye alırsınız. MongoDB, Replica Set sayısına göre otomatik olarak mongos'u devreye sokmaz.

mongos (Sorgu Yönlendiricisi) bileşeni, bir kurulum veya konfigürasyon meselesidir, otomatik bir özellik değildir.

1. mongos Ne Zaman Ortaya Çıkar?

mongos bileşeni, sadece bir Sharded Cluster (Parçalanmış Küme) kurmaya karar verdiğinizde ortaya çıkar.

  • Bir sistemde Sharding yapmaya karar verdiğinizde (yani veriyi birden fazla bağımsız Replica Set'e bölmeye karar verdiğinizde), Yapılandırma Sunucularını ve mongos bileşenini manuel olarak kurmanız ve başlatmanız gerekir.

2. Replica Set Sayısıyla İlişkisi

MongoDB, bir Replica Set'teki üye sayısını (örneğin 3, 5 veya 7) otomatik olarak yönetebilir (örneğin bir üye çökerse yeni birincil seçer), ancak Replica Set sayısını sayıp, "Artık 3 Replica Set'in var, hadi mongos başlatayım" gibi bir otomatik karar almaz.

Bu kararı tamamen siz verirsiniz:

  • Siz karar verirsiniz: "Veri hacmi çok arttı. Artık tek bir Replica Set yetmiyor. Veriyi 4 farklı Replica Set'e (Shard'a) böleceğim."

  • Siz kurarsınız: Bu karardan sonra, kümenin trafik akışını yönetmek için siz mongos sunucularını kurarsınız ve uygulama bağlantılarını bu mongos'lara yönlendirirsiniz.

Özetle: MongoDB, mongos bileşenini sizin yerinize otomatik olarak kurmaz veya başlatmaz. mongos, sisteminize yatay ölçeklenebilirlik (Sharding) eklemeye karar verdiğinizde sizin kurduğunuz ek bir katmandır.

Soru 8:NoSQL nedir?

NoSQL, günümüzün hızla değişen ve büyük hacimli verilerini yönetmek için ortaya çıkmış bir veritabanı yaklaşımıdır.

NoSQL ve İlişkisel (SQL) Veritabanlarının Karşılaştırması

Geleneksel veritabanları (örneğin MySQL, PostgreSQL) ilişkiseldir ve veriyi katı tablolar, satırlar ve sütunlar halinde organize eder.

Özellik

İlişkisel Veritabanları (SQL)

NoSQL Veritabanları (MongoDB)

Veri Modeli

Tablolar, Satırlar ve İlişkiler (Katı Şema)

Belgeler (Documents), Anahtar-Değer, Graflar (Esnek Şema)

Şema (Yapı)

Katı (Schema-on-Write). Veri kaydetmeden önce yapıyı tanımlamak zorunludur.

Esnek (Schema-on-Read). Veri yapısı zamanla değişebilir, tek bir koleksiyonda farklı yapıda belgeler olabilir.

Ölçeklendirme

Dikey Ölçekleme. (Daha güçlü bir sunucuya geçmek)

Yatay Ölçekleme. (Veriyi birden fazla sunucuya bölmek - Sharding)

Temel Odak

Veri bütünlüğü, karmaşık ilişkiler (JOIN işlemleri).

Yüksek performans, esneklik ve ölçeklenebilirlik.



Yorumlar

Bu blogdaki popüler yayınlar

Python random Modülü

Yazılım Nedir?

Python print()