IHS Strategic
Tüm Blog Yazıları
HowTo22 Eylül 2026•2 dk okuma

MongoDB ve Mongoose ile Ölçeklenebilir Veritabanı Mimarisi Rehberi

Yüksek trafikli uygulamalar için MongoDB ve Mongoose tabanlı ölçeklenebilir veritabanı mimarisi tasarım rehberi. İndeksleme, bağlantı yönetimi ve şema optimizasyon adımları.

S

Sistem Yöneticisi

Kıdemli Yazılım Mimarı

Giriş: Ölçeklenebilir Mimarinin Önemi

Modern web uygulamalarında artan veri yükü, doğru mimari seçimini zorunlu kılar. Bu rehber, MongoDB ve Mongoose ikilisiyle yüksek hacimli trafiği yönetecek veritabanı altyapısının kurulum adımlarını içerir. Güncel trendler doğrultusunda, monolitik yapılardan mikroservis odaklı ve dağıtık veri modellerine geçiş kritik bir dijital strateji gerektirir.

1. Bağlantı Havuzu ve Optimum Connection Yönetimi

Veritabanı bağlantılarının her istekte tekrar açılması kaynak tüketir. Tekil bağlantı nesnesi (Singleton) ve optimize edilmiş havuz boyutu gerekir.

Uygulama Adımı

import mongoose from 'mongoose';

const MONGODB_URI = process.env.MONGODB_URI;

export const connectDB = async () => {
  if (mongoose.connection.readyState >= 1) return;

  return mongoose.connect(MONGODB_URI, {
    maxPoolSize: 50,
    minPoolSize: 10,
    serverSelectionTimeoutMS: 5000,
    socketTimeoutMS: 45000,
  });
};

Havuz limitleri sunucu işlemci ve bellek sınırına göre ayarlanır. Aşırı büyük havuz boyutu DB sunucusunu kilitler.

2. Şema Tasarımı: Embedding vs Referencing

NoSQL modellemede iki temel yaklaşım bulunur: İç içe gömme (embedding) ve referans verme (referencing).

  • Embedding (1:1 / 1:Few): Birlikte okunan, sık güncellenmeyen veriler tek dokümanda saklanır. Tek disk I/O işlemiyle okunur.
  • Referencing (1:Many / Many:Many): Büyüyen listeler, bağımsız güncellenen veriler ayrı koleksiyonlarda tutulur. 16MB doküman boyutu limitine takılmayı önler.
Büyük veri setlerinde kontrolsüz array büyümesi performansı düşürür. Doküman boyutu 16MB sınırını aşmamalıdır.

3. İndeksleme Stratejileri ve Compound Index Kullanımı

Doğru indeksleme olmadan veritabanı full collection scan (COLLSCAN) yapar. Bu durum RAM ve CPU tüketimini artırır.

Bileşik İndeks Kuralı (ESR: Equality, Sort, Range)

import { Schema, model } from 'mongoose';

const orderSchema = new Schema({
  userId: { type: Schema.Types.ObjectId, required: true },
  status: { type: String, required: true },
  createdAt: { type: Date, default: Date.now },
});

// ESR kuralı: userId (Eql), status (Eql), createdAt (Sort/Range)
orderSchema.index({ userId: 1, status: 1, createdAt: -1 });

export const Order = model('Order', orderSchema);

4. Okuma Performansı: `lean()` ve Projeksiyon

Mongoose dokümanları getter, setter, sanal alanlar ve dirty tracking yükü taşır. Salt okuma işlemlerinde bu yük gereksizdir.

  • .lean(): Düz JavaScript nesnesi döndürür, bellek kullanımını %70 azaltır.
  • Projeksiyon: Sadece ihtiyaç duyulan alanlar seçilir (.select('name email')), ağ trafiği düşürülür.
const users = await User.find({ isActive: true })
  .select('name email createdAt')
  .lean()
  .exec();

5. Yatay Ölçekleme: Replica Set ve Sharding

Dikey ölçekleme sınırına ulaşıldığında yatay ölçekleme mekanizmaları devreye girer.

  • Replica Sets: Yüksek erişilebilirlik (High Availability) ve failover sağlar. Okuma yükü `secondary` düğümlere dağıtılabilir.
  • Sharding: Veri kümesini birden çok sunucuya böler. Doğru `Shard Key` seçimi (yüksek kardinalite, dengeli dağılım) zorunludur.

Sonuç ve Kontrol Listesi

Ölçeklenebilir mimaride connection pooling doğru yapılandırılmalı, indeksler ESR kuralına uymalı, okuma operasyonlarında lean() tercih edilmelidir. Sürekli izleme (MongoDB Atlas Metrics / APM araçları) ile darboğazlar erkenden tespit edilir.