Bilgi Bankası
MongoDBPerformans ve kapasite 15 dk 14.06.2026

MongoDB schema drift: doküman esnekliği ne zaman borca dönüşür?

MongoDB’nin şema esnekliği ilk günlerde hız kazandırır. Ama aynı alan bazen string, bazen number, bazen object oluyorsa sorgu, indeks ve uygulama kodu yavaş yavaş belirsizleşir.

Bu yazı sana şu durumda yardımcı olur
  • aynı koleksiyonda alan tipleri karıştı
  • eski uygulama sürümleri farklı doküman şekli yazıyor
  • indeks var ama sorgu hâlâ verimsiz
  • BI/raporlama tarafında alanlar tutarsız görünüyor
  • migration scriptleri doküman çeşitliliği yüzünden karmaşıklaşıyor
Yazıyı bitirince

Schema drift riskini ölçebilecek, kritik alanlar için validasyon düşünecek ve doküman modelini indeks/sorgu davranışıyla birlikte yöneteceksiniz.

TürkDB açısından ürünleşme notu

Bu bölüm, TürkDB’nin ilgili problemi hangi ürün ilkeleri ve kontrol noktalarıyla ele alacağını anlatır. Kapsam, gerçek iş yükü ve ihtiyaçla birlikte netleşir.

TürkDB MongoDB’nin çalışmasını, yedeğini ve erişimini yönetilebilir hale getirmeyi hedefler; ama doküman modelinin sağlığı uygulama ekibinin disiplinidir. Platform güvenli zemini pilotta kanıtlamalı, veri şeklinin tutarlılığını siz tanımlamalısınız.

Esneklik sınır konmadığında belirsizleşir

MongoDB’de her dokümanın aynı olmak zorunda olmaması büyük bir avantajdır. Ürün hızlı değişir, yeni alanlar kolay eklenir. Sorun, kritik alanlarda bu esnekliğin sınırsız kalmasıyla başlar.

Örneğin price alanı bir dokümanda number, diğerinde string ise sıralama, filtreleme, indeks ve raporlama davranışı bozulur. Uygulama kodu da her yerde tip savunması yazmaya başlar.

  • Kritik filtre alanları tutarlı tipte olmalı.
  • Index kullanılan alanlarda beklenmeyen null/missing oranı izlenmeli.
  • Eski uygulama sürümleri farklı doküman şekli yazıyorsa migration planı yapılmalı.
  • Esneklik, ürün alanlarında; tutarlılık, erişim ve raporlama alanlarında güç sağlar.

Drift önce ölçülür

Schema drift hissedildiğinde doğrudan validasyon eklemek bazen canlı ortam yazmalarını kırar. Önce mevcut dokümanların ne kadar farklılaştığını görmek gerekir.

Alan tipi dağılımı

mongodb-schema-drift.js
db.orders.aggregate([
  {
    $group: {
      _id: { priceType: { $type: "$price" }, statusType: { $type: "$status" } },
      count: { $sum: 1 }
    }
  },
  { $sort: { count: -1 } }
])

Validasyon fren değil, emniyet kemeridir

Kritik koleksiyonlarda JSON Schema validasyonu, uygulama hatalarının veriye sessizce karışmasını engeller. İlk adımda validationAction: "warn" gibi daha yumuşak modla ölçüm yapmak, canlı ortam kırılmalarını azaltabilir.

Kritik alanlar için validasyon fikri

mongodb-validator.js
db.runCommand({
  collMod: "orders",
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["tenant_id", "status", "created_at"],
      properties: {
        tenant_id: { bsonType: "string" },
        status: { enum: ["pending", "paid", "cancelled"] },
        created_at: { bsonType: "date" }
      }
    }
  },
  validationAction: "warn"
})

İndeks kararı schema drift ile birlikte okunur

Bir alanın tipi ve doluluk oranı tutarsızsa indeks beklediğiniz kadar verimli çalışmayabilir. Compound index tasarlarken sadece sorgu desenini değil, verinin gerçekten o desene uyup uymadığını da kontrol edin.

TürkDB tarafında yedekleme/geri yükleme ve cluster görünürlüğü, bu tür modelleme değişikliklerini daha güvenli deneme hedefinin parçasıdır. Ama drift temizliği uygulama migrationı ve veri düzeltme işi olarak planlanmalıdır.

Devam etmek istersen

Sorunu motor bazında derinleştirin

Benzer belirtiler farklı motorlarda farklı nedenlere dayanır; yayınlanan tüm rehberleri ana sayfadan takip edebilirsiniz.

Tüm makaleler