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ı
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
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.