Skip to main content
Veritabanı

MongoDB NoSQL Veritabanı Rehberi: Belgeden Ölçeklendirmeye

March 29, 2026 5 min read 1 views Raw
MongoDB NoSQL veritabanı veri modelleme
Table of Contents

MongoDB Nedir?

MongoDB, dünya genelinde en popüler NoSQL veritabanı sistemlerinden biridir. 2009 yılında MongoDB Inc. tarafından piyasaya sürülen bu açık kaynaklı veritabanı, belge odaklı (document-oriented) veri modeli kullanır. Geleneksel ilişkisel veritabanlarının (RDBMS) aksine, MongoDB verileri satır ve sütunlardan oluşan tablolarda değil, esnek JSON benzeri belgeler (BSON formatında) içinde saklar.

MongoDB'nin bu esnek yapısı, özellikle hızlı geliştirme döngüleri, değişken veri şemaları ve yüksek ölçeklenebilirlik gerektiren modern uygulamalar için ideal bir çözüm sunar. Sosyal medya platformları, e-ticaret siteleri, IoT uygulamaları ve içerik yönetim sistemleri MongoDB'yi yoğun olarak tercih etmektedir.

Belge (Document) Modeli

MongoDB'nin temel veri birimi belgedir (document). Her belge, anahtar-değer çiftlerinden oluşan BSON (Binary JSON) formatında saklanır. Bu yapı, iç içe nesneler ve diziler içerebilir, bu da karmaşık veri ilişkilerini tek bir belge içinde modelleyebilmenizi sağlar.

Koleksiyonlar ve Veritabanları

MongoDB'de belgeler koleksiyonlar (collections) içinde gruplandırılır. Koleksiyonlar, ilişkisel veritabanlarındaki tablolara benzer ancak sabit bir şemaya sahip değildir. Aynı koleksiyondaki belgeler farklı alanlara sahip olabilir, bu da şema evrimine olanak tanır.

Şemasız (Schema-less) Yapının Avantajları

  • Esneklik: Farklı yapılardaki belgeler aynı koleksiyonda saklanabilir, veri modelinizi uygulamanız evrildikçe değiştirebilirsiniz.
  • Hızlı geliştirme: Şema değişiklikleri için veritabanı migrasyonuna gerek yoktur, bu da geliştirme döngüsünü önemli ölçüde hızlandırır.
  • Doğal veri temsili: Veriler uygulama kodundaki nesnelere doğal olarak eşlenebilir, ORM katmanına olan ihtiyacı azaltır.

CRUD İşlemleri

MongoDB'de temel veri işlemleri CRUD (Create, Read, Update, Delete) olarak bilinir. Her işlem için zengin bir sorgu dili ve çeşitli seçenekler sunar.

Belge Oluşturma (Create)

MongoDB'de belge oluşturmak için insertOne() ve insertMany() metotları kullanılır. insertOne() tek bir belge eklerken, insertMany() bir dizi belgeyi toplu olarak ekler. Her belgeye otomatik olarak benzersiz bir _id alanı atanır.

Belge Okuma (Read)

Verileri sorgulamak için find() ve findOne() metotları kullanılır. MongoDB'nin sorgu dili, karmaşık filtreleme, projeksiyon ve sıralama işlemlerini destekler. Karşılaştırma operatörleri ($eq, $gt, $lt, $in), mantıksal operatörler ($and, $or, $not) ve dizi operatörleri ($elemMatch, $size) gibi zengin bir operatör seti mevcuttur.

Belge Güncelleme (Update)

Güncelleme işlemleri updateOne(), updateMany() ve replaceOne() ile yapılır. Güncelleme operatörleri arasında $set (alan değeri ayarlama), $inc (sayısal değeri artırma), $push (diziye eleman ekleme), $pull (diziden eleman çıkarma) ve $unset (alan silme) bulunur.

Belge Silme (Delete)

Silme işlemleri deleteOne() ve deleteMany() ile gerçekleştirilir. Silme işlemi geri alınamaz olduğundan, üretim ortamlarında dikkatli kullanılmalı ve önemli veriler için yumuşak silme (soft delete) yaklaşımı düşünülmelidir.

Aggregation Pipeline

Aggregation Pipeline, MongoDB'nin en güçlü özelliklerinden biridir. Verileri bir dizi aşamadan (stage) geçirerek dönüştürmenize, gruplandırmanıza ve analiz etmenize olanak tanır.

Temel Pipeline Aşamaları

AşamaAçıklamaKullanım Örneği
$matchBelgeleri filtrelemeBelirli koşullara uyan belgeleri seçme
$groupBelgeleri gruplamaKategoriye göre satış toplamı
$projectAlan seçimi ve dönüşümüHesaplanmış alanlar oluşturma
$sortSonuçları sıralamaFiyata göre azalan sıralama
$limitSonuç sayısını sınırlamaİlk 10 sonucu alma
$lookupKoleksiyonlar arası birleştirmeSQL JOIN benzeri işlem
$unwindDizi alanlarını açmaHer dizi elemanı için ayrı belge

Aggregation Pipeline Örnek Kullanımları

Aggregation Pipeline, iş zekası raporları, veri analizi ve karmaşık veri dönüşümleri için kullanılır. Örneğin, bir e-ticaret uygulamasında aylık satış raporları oluşturmak, müşteri segmentasyonu yapmak veya en çok satan ürünleri belirlemek için pipeline kullanabilirsiniz.

İndeksleme (Indexing)

İndeksler, MongoDB'de sorgu performansını dramatik şekilde artıran kritik bir bileşendir. İndeks olmadan MongoDB her sorgu için koleksiyondaki tüm belgeleri taramak (collection scan) zorunda kalır.

İndeks Türleri

  • Tekli alan indeksi: Tek bir alan üzerinde oluşturulur. En temel indeks türüdür.
  • Bileşik indeks (Compound Index): Birden fazla alan üzerinde oluşturulur. Alan sırası sorgu performansını etkiler.
  • Metin indeksi (Text Index): Metin arama sorguları için kullanılır. Tam metin araması yapmanızı sağlar.
  • Coğrafi indeks (Geospatial Index): Konum tabanlı sorgular için kullanılır (2dsphere, 2d).
  • TTL indeksi: Belgelerin belirli bir süre sonra otomatik silinmesini sağlar. Oturum verileri ve önbellek için idealdir.
  • Benzersiz indeks (Unique Index): Alanda tekrarlanan değerleri engeller.

İndeks Stratejileri

Doğru indeks stratejisi belirlemek, sorgu performansının anahtarıdır. explain() metodu ile sorgu planlarını analiz ederek hangi indekslerin kullanıldığını ve performans darboğazlarını tespit edebilirsiniz.

Replica Set: Yüksek Erişilebilirlik

Replica Set, MongoDB'nin yüksek erişilebilirlik (high availability) çözümüdür. Aynı veri kümesinin birden fazla sunucuda kopyasını tutarak, bir sunucu arızalandığında otomatik olarak başka bir sunucuya geçiş (failover) yapılmasını sağlar.

Replica Set Mimarisi

  1. Birincil (Primary): Tüm yazma işlemlerini kabul eden tek düğüm. İstemciler varsayılan olarak birincil düğümden okuma yapar.
  2. İkincil (Secondary): Birincil düğümün verilerini çoğaltan düğümler. Okuma trafiğini dağıtmak için kullanılabilir.
  3. Hakem (Arbiter): Veri tutmayan, yalnızca seçim oylamasına katılan düğüm. Çift sayıda düğüm olduğunda çoğunluğu sağlamak için kullanılır.

Otomatik Failover

Birincil düğüm arızalandığında, ikincil düğümler arasında otomatik seçim (election) yapılır ve yeni bir birincil düğüm belirlenir. Bu süreç genellikle 10-12 saniye içinde tamamlanır ve uygulama kesintisini minimize eder.

Sharding: Yatay Ölçeklendirme

Sharding, MongoDB'nin yatay ölçeklendirme stratejisidir. Veriyi birden fazla sunucuya (shard) dağıtarak, tek bir sunucunun kapasitesini aşan veri hacimlerini ve iş yüklerini desteklemeyi sağlar.

Shard Anahtarı Seçimi

Shard anahtarı, verinin parçalar arasında nasıl dağıtılacağını belirler. İyi bir shard anahtarı seçimi performans için kritik öneme sahiptir:

  • Yüksek kardinalite: Çok sayıda farklı değere sahip alanlar tercih edilmelidir.
  • Düşük frekans: Değerlerin eşit dağılımı, veri dengesizliğini önler.
  • Monoton olmayan artış: Monoton artan değerler (timestamp gibi) tek bir shard'a yoğunlaşmaya neden olabilir.

MongoDB En İyi Uygulamalar

Veri modelleme, MongoDB'deki en kritik karardır. İlişkisel veritabanı düşüncesinden sıyrılarak, uygulamanızın erişim kalıplarına göre modelleme yapın.

Performans İpuçları

  • Sorgu kalıplarınıza uygun indeksler oluşturun
  • Gömülü belgeler (embedded documents) ile ilişkili verileri birlikte saklayın
  • Büyük dizilerden kaçının; sınırsız büyüyen diziler belge boyutunu aşabilir
  • Projeksiyon kullanarak yalnızca gerekli alanları getirin
  • Write Concern ve Read Concern ayarlarını ihtiyacınıza göre yapılandırın

Sonuç

MongoDB, esnek belge modeli, güçlü aggregation pipeline'ı, kapsamlı indeksleme desteği ve yerleşik yüksek erişilebilirlik özellikleri ile modern uygulamalar için mükemmel bir veritabanı seçeneğidir. Replica set ve sharding ile hem güvenilirlik hem de ölçeklenebilirlik sağlayarak, startup'lardan büyük kurumsal projelere kadar her ölçekte başarıyla kullanılabilir.

Share this post