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

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

Modern web projeleri ve dijital ajans iş yükleri için MongoDB ve Mongoose ile yüksek performanslı, ölçeklenebilir veritabanı mimarisi kurulum adımları.

S

Sistem Yöneticisi

Kıdemli Yazılım Mimarı

Modern Web ve NoSQL Veritabanı Trendleri

Modern web projelerinde veri hacmi hızla büyür. Dijital ajans ekipleri yüksek trafik alan uygulamalarda doğru mimariyi seçmelidir. Bu rehber, ölçeklenebilir MongoDB ve Mongoose altyapısı kurma adımlarını içerir.

Adım 1: Optimize Edilmiş Bağlantı Havuzu Yapılandırması

Tekil bağlantılar yüksek trafikte tıkanır. Bağlantı havuzu (connection pool) kullanılmalıdır.

const mongoose = require('mongoose');

const connectDB = async () => {
  await mongoose.connect(process.env.MONGO_URI, {
    maxPoolSize: 50,
    minPoolSize: 10,
    serverSelectionTimeoutMS: 5000,
    socketTimeoutMS: 45000
  });
};
module.exports = connectDB;

Adım 2: Doğru Şema Tasarımı (Embedding vs Referencing)

Veri modelleme ölçeklenebilirliğin temelidir. İki ana yaklaşım bulunur:

  • Embedding (Gömme): 1-1 veya sınırlı 1-N ilişkiler için uygundur. Tek sorguda okunur, I/O yükü düşer.
  • Referencing (Referans Verme): Sürekli büyüyen 1-N veya N-N ilişkilerde kullanılır. 16MB doküman limitini engeller.

Adım 3: Bileşik ve TTL İndeks Stratejileri

Sorgu hızını belirleyen ana faktör doğru indekslemedir. Full collection scan engellenmelidir.

const userSchema = new mongoose.Schema({
  email: { type: String, unique: true, index: true },
  tenantId: { type: mongoose.Schema.Types.ObjectId, index: true },
  createdAt: { type: Date, default: Date.now }
});

// Compound Index: Sık birlikte filtrelenen alanlar
userSchema.index({ tenantId: 1, createdAt: -1 });

Adım 4: Lean Query Kullanımı ile Bellek Optimizasyonu

Mongoose dokümanları ağır ek methodlar taşır. Yalnızca okuma yapılan işlemlerde .lean() eklenerek JSON formatında hızlı veri çekilir. Bellek tüketimi %70 azalır.

const getUsers = async (tenantId) => {
  return await UserModel.find({ tenantId }).select('email name').lean();
};
Pratik İpucu: Büyük veri kümelerinde skip() yerine _id tabanlı cursor paginasyonu kullanın. Sayfa ilerledikçe sorgu yavaşlamasını engeller.