- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
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, 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.
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.
Ş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.
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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:
Veritabanı Yöneticileri (DBA'lar).
DevOps veya Bulut Mühendisleri.
Yazılım Mimarları.
Hayır, birinci ve ikinci sunucu (Primary ve Secondary üyeler) bilgilerin kaydedildiği belgeler değildir.
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.
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.
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.
"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'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.
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.
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.
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
Yorum Gönder