MongoDB Academy · Ders

expireAfterSeconds ile Verilerin Otomatik Süresini Dolurma

Öğrenenler, bir zaman serisi koleksiyonundaki eski ölçümlerin otomatik olarak temizlenmesi ve depolama maliyetlerinin kontrol edilmesi için expireAfterSeconds seçeneğini yapılandıracaktır.

4. ders / 413 adım

expireAfterSeconds ile Verilerin Otomatik Süresini Dolurma, CoddyKit'te ücretsiz bir MongoDB Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, MongoDB Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. MongoDB Academy kursu toplamda 4 dersten oluşur.

Otomatik Veri Süresinin Dolması Neden Önemlidir

Zaman serisi verilerinin değeri neredeyse her zaman sınırlıdır; 5 yıl önceki sensör okumaları günümüz kararlarına nadiren katkı sağlar. Güncelliğini yitirmiş verileri saklamak depolama alanını israf eder, yedeklemeleri yavaşlatır ve dizin boyutlarını artırır. MongoDB'nin expireAfterSeconds seçeneği, koleksiyon oluşturulurken bir saklama süresi bildirmenizi sağlar; böylece veritabanı, cron işlerine veya uygulama düzeyindeki silme yordamlarına gerek kalmadan temizlemeyi otomatik olarak gerçekleştirir.

Oluşturma Sırasında expireAfterSeconds Ayarlama

db.createCollection() çağrılırken expireAfterSeconds değerini timeseries nesnesinin yanında, üst düzey bir seçenek olarak geçirin. Bu değer, verilerin kaç saniye saklanacağını belirten bir tamsayıdır. timeField değeri şimdi − expireAfterSeconds ifadesinden daha eski olan belgeler, TTL arka plan iş parçacığı tarafından silinmeye uygun hâle gelir.

// Create a collection that retains data for 30 days
db.createCollection('sensorReadings', {
  timeseries: {
    timeField: 'timestamp',
    metaField: 'sensorId',
    granularity: 'seconds'
  },
  expireAfterSeconds: 60 * 60 * 24 * 30  // 2592000 seconds = 30 days
})

Zaman Serileri için TTL Silme İşlemi Nasıl Çalışır

MongoDB'nin TTL iş parçacığı yaklaşık 60 saniyede bir çalışır. Zaman serisi koleksiyonlarında tek tek ölçümler yerine tüm kova belgelerini siler. Bir kova, yalnızca içerdiği tüm ölçümler sona erme eşiğinden eski olduğunda silinir. Bu, TTL silme işlemini son derece verimli kılar; tek bir kova belgesinin kaldırılması, tek işlemde yüzlerce ölçümü siler.

Mevcut Koleksiyonlarda expireAfterSeconds Güncelleme

Mevcut bir zaman serisi koleksiyonunun saklama süresini, kesinti gerektirmeden collMod komutunu kullanarak istediğiniz zaman değiştirebilirsiniz. Değeri artırmak verilerin daha uzun süre saklanmasını sağlar; azaltmak ise daha önce süresi dolmayacak olan verileri bir sonraki TTL çalışmasında silinmeye uygun hâle getirir. Değişiklik yaklaşık 60 saniye içinde etkili olur.

// Extend retention from 30 days to 90 days
db.runCommand({
  collMod: 'sensorReadings',
  expireAfterSeconds: 60 * 60 * 24 * 90  // 7776000 seconds
})

// Disable expiration entirely
db.runCommand({
  collMod: 'sensorReadings',
  expireAfterSeconds: 0
})

TTL ve Normal Koleksiyon TTL Dizinleri

Normal MongoDB koleksiyonları, tek tek belgelerin süresini doldurmak için bir TTL dizini (tarih alanındaki expireAfterSeconds özniteliğine sahip özel tek alanlı dizin) kullanır. Zaman serisi koleksiyonları ise farklı bir mekanizma kullanır; tek tek ölçüm belgeleri yerine tüm kova belgelerinin süresini doldurur. Bu nedenle zaman serisi koleksiyonunda ayrı bir TTL dizini oluşturamazsınız; sona erme işlemi yalnızca koleksiyon düzeyindeki expireAfterSeconds seçeneğiyle yönetilir.

// Regular collection TTL index (NOT for time series)
db.logs.createIndex(
  { createdAt: 1 },
  { expireAfterSeconds: 86400 }  // deletes individual documents after 24h
)

// Time series uses collection-level option, not an index
// (The line below would fail on a time series collection)
// db.sensorReadings.createIndex({ timestamp: 1 }, { expireAfterSeconds: 86400 })

Sona Erme Ayarını Doğrulama

db.getCollectionInfos() komutunu çalıştırıp options.expireAfterSeconds alanını inceleyerek geçerli saklama ilkesini denetleyin. Ayrıca TTL yapılandırmasını çıktısında bildiren db.sensorReadings.stats() komutunu da kontrol edebilirsiniz. Bu, üretim koleksiyonlarının doğru saklama süresine ayarlandığını denetimler sırasında doğrulamak için kullanışlıdır.

// Check collection metadata including TTL
const info = db.getCollectionInfos({ name: 'sensorReadings' })
printjson(info[0].options)
// Output includes: { expireAfterSeconds: 2592000, timeseries: {...} }

// Check via stats
db.sensorReadings.stats()

Birden Çok Koleksiyonla Katmanlı Saklama

Yaygın bir üretim kalıbı katmanlı saklama yaklaşımıdır: yüksek frekanslı ham veriler kısa TTL'ye (ör. 7 gün) sahip bir zaman serisi koleksiyonunda saklanırken, bir toplama işlem hattı işi saatlik özetleri hesaplamak için her gece çalışır ve bunları daha uzun TTL'ye (ör. 2 yıl) sahip ikinci bir koleksiyona yazar. Bu yaklaşım, depolama maliyetlerini tarihsel eğilimleri analiz etme gereksinimiyle dengeler.

// Raw readings — 7-day retention
db.createCollection('rawReadings', {
  timeseries: { timeField: 'ts', metaField: 'deviceId', granularity: 'seconds' },
  expireAfterSeconds: 60 * 60 * 24 * 7
})

// Hourly summaries — 2-year retention
db.createCollection('hourlyStats', {
  timeseries: { timeField: 'hour', metaField: 'deviceId', granularity: 'hours' },
  expireAfterSeconds: 60 * 60 * 24 * 730
})

TTL İş Parçacığının Zamanlaması ve Doğruluğu

TTL arka plan iş parçacığı her 60 saniyede bir uyanır; bu nedenle sona erme anlık değildir ve veriler eşik değerini 60 saniyeye kadar aşarak varlığını sürdürebilir. Yoğun yük altındaki Atlas kümelerinde TTL silme işlemleri daha da gecikebilir. Belirli bir saniyede tam silme gerektiren uyumluluk gereksinimleri için elle silme betikleri veya zamanlanmış Atlas Tetikleyicileri, TTL'den daha öngörülebilir bir denetim sağlar.

Anında Temizleme için Elle Silme

Bir ölçüm bloğunu hemen kaldırmanız gerekiyorsa (örneğin hatalı bir sensörün verilerini temizlemek için), timeField ve metaField alanlarına filtre uygulayarak deleteMany() kullanın. Zaman serisi koleksiyonları, MongoDB 5.1'den itibaren zaman aralığına ve metaField değerine göre silme işlemlerini destekler. Ölçüm alanlarına yönelik karmaşık silme filtreleri ise MongoDB 6.0 ve sonraki sürümlerde desteklenir.

// Delete all readings from a broken sensor before a cutoff date
db.sensorReadings.deleteMany({
  sensorId: 'sensor-broken-99',
  timestamp: { $lt: new Date('2024-06-01T00:00:00Z') }
})

// Delete readings older than a specific date for all sensors
db.sensorReadings.deleteMany({
  timestamp: { $lt: new Date('2023-01-01T00:00:00Z') }
})

Süresi Dolan Verilerin Silinmesini İzleme

MongoDB, TTL silme ölçümlerini sunucu durumu içinde metrics.ttl bölümünde sunar. deletedDocuments sayacı, mongod işlemi başlatıldığından beri TTL iş parçacığının kaç belgeyi (zaman serileri için kova belgelerini) sildiğini izler. Bu sayacı izlemek, TTL'nin gerçekten çalıştığını ve üretimde verileri beklendiği gibi sildiğini doğrulamanıza yardımcı olur.

// Check TTL deletion metrics in mongosh
const status = db.serverStatus()
printjson(status.metrics.ttl)
// Output:
// {
//   deletedDocuments: NumberLong(12345),
//   passes: NumberLong(500)
// }

Saklama Planlaması için En İyi Uygulamalar

Saklamayı planlarken üç etkeni göz önünde bulundurun: uyumluluk gereksinimleri (bazı düzenlemeler verilerin yıllarca saklanmasını zorunlu kılar), analiz gereksinimleri (sorgularınız ne kadar geriye gidiyor?) ve depolama bütçesi (N günlük veriyi saklamanın maliyeti nedir?). Günlük belge hacmi × ortalama belge boyutunu tahmin ederek depolama büyümesini modelleyin; ardından üç kısıtı dengeleyecek şekilde expireAfterSeconds değerini ayarlayın.

// Storage estimation helper
const docsPerDay = 60 * 60 * 24       // one reading per second = 86400
const avgDocBytes = 150                // approximate compressed document size
const retentionDays = 30
const totalBytes = docsPerDay * avgDocBytes * retentionDays
console.log('Estimated storage:', (totalBytes / 1e9).toFixed(2), 'GB')
// Outputs: Estimated storage: 0.37 GB for one sensor, 30 days

Kısa Kontrol

Bu dersteki MongoDB ve NoSQL Veritabanları kavramlarını anlayıp anlamadığınızı test edin.

Ders Özeti

Bu derste şunları öğrendiniz: expireAfterSeconds, dizin aracılığıyla değil koleksiyon düzeyinde ayarlanır ve tüm kovaların ne zaman temizleneceğini denetler; collMod, kesinti olmadan etkin bir koleksiyondaki saklama süresini güncellemenizi sağlar; katmanlı saklama — ham veriler için kısa TTL, önceden toplanmış özetler için uzun TTL — uygun maliyetli zaman serisi depolama için üretimdeki en iyi uygulamadır. Sırada MongoDB'deki kimlik doğrulama mekanizmalarını ele alacağız.

Başlamak ücretsiz

Yapay zeka eğitmeniyle JavaScript öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
30
Dersler
120

Sıkça Sorulan Sorular

“expireAfterSeconds ile Verilerin Otomatik Süresini Dolurma” dersi ücretsiz mi?

Evet — “expireAfterSeconds ile Verilerin Otomatik Süresini Dolurma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve MongoDB Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. MongoDB Academy kursu toplamda 4 dersten oluşur.

“expireAfterSeconds ile Verilerin Otomatik Süresini Dolurma” dersinde ne öğreneceğim?

Öğrenenler, bir zaman serisi koleksiyonundaki eski ölçümlerin otomatik olarak temizlenmesi ve depolama maliyetlerinin kontrol edilmesi için expireAfterSeconds seçeneğini yapılandıracaktır. MongoDB Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

MongoDB Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te MongoDB Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“expireAfterSeconds ile Verilerin Otomatik Süresini Dolurma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu MongoDB Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her MongoDB Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Zaman Serisi Koleksiyonu Oluşturma
  2. Zaman Serisi Verilerini Ekleme ve Sorgulama
  3. Zaman Serilerinde Pencereli Toplulaştırmalar
  4. expireAfterSeconds ile Verilerin Otomatik Süresini Dolurma
← MongoDB Academy Sayfasına Dön