MongoDB TTL vs Uygulama Katmanı: Veri Silme Maliyeti
Veri expiry'i sadece temizlik değil, altyapı tasarımıdır. MongoDB'nin TTL mekanizması ile uygulama katmanında silme işlemi yönetmek arasındaki seçim, yazma amplifikasyonunu, index çekişmesini ve oplog basıncını doğrudan etkiler. Bu çalışmada detaylı bir karşılaştırma yapılıyor.
MongoDB'nin TTLMonitor arka plan thread'i 60 saniyede bir (ttlMonitorSleepSecs) çalışır. Her çalışmada TTL indexli tüm koleksiyonları tarar, expireAfterSeconds'tan daha eski dokümanları range delete ile siler ve bu silmeleri oplog'a yazar. Yüksek yazma trafiğinde bu işlem sıcak yazma yolunuzla çekişir, özellikle prime time'da.
Uygulama katmanında silme yaparsanız kontrol elde edersiniz ama maliyeti vardır: her sorgu veya batch işleminde silme mantığını kodlamanız gerekir, bu da uygulamaya yayılmış karmaşıklık demektir. Ayrıca eski dokümanlar bellek ve disk alanını işgal etmeye devam eder. TTL indexi ise otomatik ama esneklik kaybı ve sistem yükü yaratır.
Yüksek throughput servislerinde varsayılan ayarlar sizi ısırır. TTL thread'in 60 saniyelik interval'ı, index taraması sırasındaki lock contention ve oplog yazmaları, sorgu performansını 3 AM'de aniden düşürebilir. Karar verirken iş yükünüzün yazma oranını, silme sıklığını ve sistem kaynaklarını göz önüne alın. Hiçbir yaklaşım evrensel değildir.
0 yorum