MONGODB NEDİR?

Veri Akademi7 dk okuma
MongoDB resmi yeşil yaprak logosu document tabanlı NoSQL veritabanı marka kimliği

Veritabanı seçerken neden bazı projelerde tablo-satır mantığı yetersiz kalır da geliştiriciler belge tabanlı bir sisteme yönelir? Şema değişikliğinin haftalarca migration planlamayı gerektirdiği, iç içe geçmiş veriyi JOIN'lerle parçalamak zorunda kaldığınız anlarda MongoDB devreye girer. Esnek şema, JSON benzeri belgeler ve yatay ölçekleme ile ilişkisel modelin sınırlarını aşan bir yaklaşım sunar.

1. MongoDB Nedir

MongoDB, verileri tablo-satır yerine BSON (Binary JSON) formatında belgeler halinde saklayan, açık kaynaklı bir NoSQL veritabanı sistemidir. 2009'da 10gen ekibi tarafından geliştirilmeye başlandı; isim İngilizce "humongous" (devasa) kelimesinden türetildi çünkü temel hedef büyük hacimli, yapısı sürekli değişen veriyi rahatça yönetmekti.

Geleneksel ilişkisel veritabanlarında bir kullanıcı kaydı için ayrı tablolar, foreign key'ler ve JOIN'ler kurarsınız. MongoDB'de aynı kullanıcı tek bir belge içinde adresi, sipariş geçmişi ve tercihleriyle birlikte saklanabilir. Bu yaklaşım, modern uygulamalarda nesnelerin programlama dilindeki yapısını veritabanına neredeyse birebir taşımanıza imkân tanır.

2. Document Database Mantığı Nasıl Çalışır

MongoDB'nin temelinde dört kavram vardır: document, collection, database ve field. Bir document, anahtar-değer çiftlerinden oluşan ve JSON'a çok benzeyen bir veri birimidir. Birden fazla document, bir collection oluşturur — bu kavram ilişkisel dünyadaki tabloya karşılık gelir ama şema zorunluluğu yoktur.

Örneğin bir e-ticaret uygulamasında ürün belgesi şöyle görünebilir:

  • _id: Her belgeye otomatik atanan benzersiz tanımlayıcı (ObjectId)
  • title: "Kablosuz Kulaklık" gibi string alan
  • price: 1299.90 gibi sayısal değer
  • tags: ["elektronik", "ses", "bluetooth"] şeklinde dizi
  • specs: İç içe nesne — pil ömrü, ağırlık, renk seçenekleri
  • reviews: Yorumların gömülü dizisi (embedded array)

Aynı collection içinde başka bir ürün belgesi farklı alanlara sahip olabilir. Yeni bir özellik eklemek için ALTER TABLE komutu çalıştırmanıza gerek kalmaz; yeni belgeye doğrudan yeni alanı yazarsınız.

MongoDB BSON document yapısı iç içe alanlar ve koleksiyon mantığı görselleştirme

3. İlişkisel Veritabanlarından Temel Farkları

MongoDB ile MySQL veya PostgreSQL arasındaki ayrım sadece sözdizimi değil, veriyi modelleme felsefesidir. Bir blog uygulamasını düşünün: ilişkisel modelde "posts", "comments", "tags", "post_tags" tabloları kurar ve bir gönderiyi yorumlarıyla birlikte getirmek için en az üç JOIN yazarsınız. MongoDB'de tüm bu yapıyı tek belge olarak gömebilirsiniz; bir okuma sorgusu yeterli olur.

Bu yaklaşımın farkını şu noktalarda hissedersiniz:

  1. Şema esnekliği: Geliştirme aşamasında veri modeli sık değişiyorsa migration yükü ortadan kalkar.
  2. Yatay ölçekleme: Sharding ile veri otomatik olarak birden çok sunucuya dağıtılır.
  3. Aggregation Pipeline: Karmaşık dönüştürme ve hesaplama işlemleri için zincirleme operatörler sunar.
  4. Replica Set: Yüksek erişilebilirlik için otomatik failover içeren çoğaltma yapısı.
  5. Geospatial sorgular: Coğrafi konum verisi için yerleşik indeks desteği.

Ancak her senaryo MongoDB'ye uygun değildir. Banka transferi gibi çok-tablolu ACID işlemlerin merkezde olduğu, ilişkilerin yoğun olduğu sistemlerde ilişkisel modelin matematiksel temeli hâlâ avantaj sağlar. MongoDB 4.0 ile multi-document transaction geldi ama bu hâlâ ana kullanım senaryosu olarak konumlandırılmaz.

4. Hangi Senaryolarda MongoDB Tercih Edilir

MongoDB'nin parladığı kullanım alanları belirli desenler etrafında toplanır. İçerik yönetim sistemleri, kullanıcı profilleri ve katalog uygulamaları gibi belge başına farklı alan yapılarının olduğu durumlar tipik örnektir. Gerçek zamanlı analitik, IoT cihazlarından gelen sensör verisi ve log toplama da yüksek yazma hacmi nedeniyle MongoDB'ye uygundur.

Pratik tercih noktaları şunlardır:

  • Hızlı prototip: Veri modeli netleşmediği MVP aşamalarında şemasız çalışma avantaj sağlar.
  • İç içe veri: Belge başına ortalama 16 MB'a kadar gömülü yapı saklanabilir.
  • Büyük veri hacmi: Sharding ile petabayt seviyesine ölçeklenir.
  • JSON tabanlı API'ler: Node.js, Python, React tarafında veri dönüşüm yükü azalır.
  • Polymorphic koleksiyonlar: Farklı ürün tiplerinin tek koleksiyonda tutulması mümkün olur.

5. MongoDB Mimarisi ve Bileşenleri

Üretim ortamında MongoDB tek başına bir process olarak çalışmaz; mongod sunucu servisi, mongos sharding yönlendiricisi ve mongo shell (veya yeni nesil mongosh) istemcisinden oluşan bir ekosistem vardır. Replica set yapısında bir primary node yazma işlemlerini kabul ederken, secondary node'lar veriyi asenkron çoğaltır. Primary çökerse otomatik bir election süreciyle yeni primary seçilir.

Sharding ise verinin shard key'e göre farklı sunuculara dağıtılmasını sağlar. Doğru shard key seçimi performans için kritiktir — hatalı seçim hotspot oluşturup ölçeklenebilirliği baltalayabilir. Bileşenlerin yapılandırma detayları ve önerilen üretim topolojileri için resmi dokümantasyonu incelemek sağlıklı bir başlangıç noktasıdır. MongoDB Atlas, bu altyapının yönetilen bulut hâlidir ve AWS, Azure, GCP üzerinde tek tıkla cluster kurma imkânı sunar.

MongoDB replica set primary secondary node ilişkisi ve sharding mimari şeması

6. Sorgu Dili ve Aggregation

SQL yerine MongoDB Query Language (MQL) kullanılır. Sorgular JSON benzeri belgeler olarak yazılır: db.users.find({ age: { $gt: 25 } }) ifadesi 25 yaşından büyük kullanıcıları getirir. Karşılaştırma operatörleri $gt, $lt, $in gibi dolar işaretiyle başlar.

Aggregation Pipeline, MongoDB'nin en güçlü özelliklerinden biridir. Veriyi bir dizi aşamadan (stage) geçirerek dönüştürür: $match ile filtreleme, $group ile gruplama, $lookup ile koleksiyonlar arası birleştirme, $project ile alan seçimi yapılır. Bu pipeline yaklaşımı, karmaşık raporlama sorgularını okunabilir adımlara böler.

7. Öğrenmeye Nereden Başlamalı

MongoDB'ye giriş için pratik bir yol, önce shell veya MongoDB Compass arayüzünde temel CRUD operasyonlarını denemek, ardından bir tarafta Node.js veya Python sürücüsüyle gerçek bir uygulama yazmaktır. Aggregation pipeline'ı erkenden öğrenmek, ilerleyen aşamada sizi düşük performanslı sorgu döngülerinden kurtarır. Konuya sistematik yaklaşmak isteyenler MongoDB eğitimi içeriklerinden yararlanabilir.

İndeks tasarımı, doğru veri modeli seçimi (embed vs reference) ve replica set yapılandırması orta seviye konulardır. Atlas üzerinden ücretsiz tier ile küçük bir cluster açıp kendi projelerinizde denemek, ezberden çok daha kalıcı bir öğrenme sağlar. Belge tabanlı düşünme alışkanlığı kazandığınızda, ilişkisel veritabanlarıyla MongoDB arasındaki seçim mühendislik bir karar hâline gelir — moda değil.

Sıkça Sorulan Sorular

MongoDB ilişkisel veritabanlarının yerini alır mı?

Hayır, MongoDB ilişkisel sistemlerin alternatifidir ama yerini almaz. Banka işlemleri, muhasebe gibi yoğun ilişki ve çok-tablolu ACID gerektiren senaryolarda ilişkisel modeller hâlâ daha uygundur. MongoDB ise esnek şema ve yatay ölçekleme isteyen modern uygulamalarda öne çıkar. Doğru seçim, projenin veri yapısına bağlıdır.

BSON nedir ve JSON'dan farkı nedir?

BSON, Binary JSON kısaltmasıdır; MongoDB'nin verileri diskte ve ağ üzerinde tuttuğu ikili formattır. JSON ile aynı yapıyı destekler ama ek olarak Date, ObjectId, Decimal128 gibi ileri veri tiplerini içerir. Ayrıca ikili kodlama sayesinde parsing işlemi metin tabanlı JSON'a göre daha hızlıdır.

MongoDB'de transaction desteği var mı?

Evet, MongoDB 4.0 ile multi-document ACID transaction desteği geldi, 4.2 ile sharded cluster'larda da kullanılabilir hâle geldi. Ancak transaction kullanımı performans maliyeti getirdiği için MongoDB'nin ana tasarım hedefi bu değildir. Çoğu durumda iyi tasarlanmış embedded document yapısı transaction ihtiyacını ortadan kaldırır.

Embed mi yoksa reference mı kullanmalıyım?

Veri birlikte sorgulanıyorsa, çocuk veri ebeveyne sıkı bağlıysa ve büyüme sınırlıysa embed (gömme) tercih edilir. Veri birden fazla yerde paylaşılıyorsa, sık güncelleniyorsa veya boyutu sürekli büyüyorsa reference (referans) mantıklıdır. 16 MB belge sınırını da gözetmek gerekir.

Sharding ile replica set arasındaki fark nedir?

Replica set, aynı verinin birden fazla sunucuda kopyalanmasıdır; yüksek erişilebilirlik ve okuma ölçekleme sağlar. Sharding ise verinin farklı parçalarının farklı sunuculara dağıtılmasıdır; yazma yükünü ve toplam depolama kapasitesini ölçeklemek için kullanılır. Üretimde genellikle her shard kendi içinde bir replica set olarak kurulur.

MongoDB Atlas ile self-hosted MongoDB arasında ne fark var?

Atlas, MongoDB'nin resmi yönetilen bulut hizmetidir; cluster kurulumu, yedekleme, ölçekleme, izleme ve güvenlik yamaları Atlas tarafından üstlenilir. Self-hosted kurulumda ise tüm bu operasyonel sorumluluk size aittir. Atlas hızlı başlangıç ve düşük operasyonel yük, self-hosted ise tam kontrol ve potansiyel maliyet avantajı sunar.

MongoDB'de indeks oluşturmak gerekli mi?

Evet, küçük veri setleri dışında indeks performans için kritiktir. İndekssiz sorgular collection scan yapar ve veri büyüdükçe yavaşlar. Sık sorgulanan alanlara, sıralama yapılan alanlara ve compound query'lere uygun indeksler tasarlamak gerekir. Ancak her alana indeks koymak yazma performansını düşürür; denge önemlidir.

Aggregation pipeline ne işe yarar?

Aggregation pipeline, veriyi sıralı aşamalardan geçirerek dönüştüren bir mekanizmadır. Filtreleme, gruplama, koleksiyonlar arası birleştirme, alan hesaplama ve istatistik üretme gibi karmaşık işlemleri tek bir sorguda yapmanızı sağlar. SQL'deki GROUP BY ve JOIN benzeri yetenekleri içerir ama belge tabanlı bir mantıkla çalışır.