TTL dizinleriyle veri saklama süresini yönetme

Bu sayfada, geçerlilik süresi (TTL) dizinlerini yapılandırmak için MongoDB API'nin, Google Cloud Console'un ve Google Cloud CLI aracının nasıl kullanılacağı açıklanmaktadır.

Geçerlilik süresine genel bakış

Veritabanlarınızdaki eski verileri otomatik olarak kaldırmak için TTL dizinlerini kullanın. TTL dizini, belirli bir alanı belirli bir koleksiyondaki dokümanların geçerlilik bitiş zamanı olarak belirler. TTL ile eski verileri temizleyerek depolama maliyetlerini azaltabilirsiniz. Veriler genellikle geçerlilik süresi dolduktan sonraki 24 saat içinde silinir.

Fiyatlandırma

TTL silme işlemlerinde yönetilen silme birimleri kullanılır. Fiyatlandırma için Cloud Firestore Enterprise sürümü fiyatlandırması başlıklı makaleyi inceleyin.

Sınırlar ve kısıtlamalar

  • Koleksiyon başına yalnızca bir TTL dizini oluşturabilirsiniz.
  • En fazla 500 TTL dizininiz olabilir.

TTL silme

TTL tabanlı silme işleminin aşağıdaki temel davranışlarına dikkat edin:

  • TTL aracılığıyla silme işlemi anında gerçekleşmez. Süresi dolan belgeler, TTL işlemi tarafından silinene kadar sorgularda ve arama isteklerinde görünmeye devam eder. TTL, silme işlemlerinin toplam mülkiyet maliyetini azaltmak için silme işlemlerinin zamanında yapılmasından ödün verir. Veriler genellikle geçerlilik süresi dolduktan sonraki 24 saat içinde silinir.

  • Mevcut bir koleksiyonda TTL dizini oluşturmak, süresi dolmuş tüm verilerin yeni TTL dizinine göre toplu olarak silinmesine neden olur. Bu toplu silme işleminin de anında gerçekleşmediğini ve ilgili koleksiyondaki veri miktarına bağlı olduğunu unutmayın.

  • Bir dokümanın geçerlilik bitiş zamanı geçmişteyse ve koleksiyona yeni bir TTL dizini eklerseniz doküman, TTL dizini kurulumu tamamlanıp etkin hale geldikten sonraki 24 saat içinde silinir.

  • TTL, belgeleri geçerlilik bitiş zaman damgalarıyla aynı sırada silmeyebilir.

  • Silme işlemleri, işlem bazında yapılmaz. Geçerlilik bitiş zamanı aynı olan dokümanlar aynı anda silinmeyebilir. Bu davranışa ihtiyacınız varsa silme işlemlerini bir istemci kitaplığı kullanarak gerçekleştirin.

  • Cloud Firestore, geçerlilik süresini belirlemek için her zaman en son TTL alanını dikkate alır. Örneğin, süresi dolmuş ancak henüz silinmemiş bir dokümanın TTL alanı daha sonraki bir tarihe güncellenirse dokümanın süresi dolmaz ve yeni tarih kullanılır.

  • Cloud Firestore, yalnızca TTL alanı bir Date and time/BSON Date değerine veya Date and time/BSON Date değeri içeren bir Array değerine ayarlandığında bir belgenin süresini sonlandırır. Doküman bazında geçerlilik bitişini devre dışı bırakmak için alanı boş bırakın veya null gibi bir değere ayarlayın.

  • TTL, diğer veritabanı etkinlikleri üzerindeki etkiyi en aza indirecek şekilde tasarlanmıştır. TTL tarafından yönlendirilen silme işlemleri daha düşük öncelikli olarak değerlendirilir. TTL tabanlı silme işlemlerinden kaynaklanan trafik artışlarını azaltmak için başka stratejiler de uygulanır.

TTL dizinleriyle ilgili farklılıklar

Diğer Firestore dizinlerinin aksine TTL dizinleri, performansı artırmak için sorgu planlama sırasında kullanılmaz. TTL ile kullanılan bir alandaki sorgu performansını iyileştirmek için alanı TTL olmayan ayrı bir dizine eklemeniz gerekir.

TTL alanları zaman damgaları kullandığından, bunları TTL olmayan bir dizine eklemenin etkin nokta oluşmasına neden olabileceğini unutmayın. Yoğun yazma trafiği dönemlerinde ölçeklendirme performansını olumsuz etkileyebilecek yüksek yazma ve silme oranları dar bir doküman aralığında yoğunlaştığında hotspot'lar oluşur.

İzinler

TTL dizini oluşturan veya bırakan asıl, projede aşağıdaki izne sahip olmalıdır:

  • TTL dizinlerini görüntülemek için datastore.indexes.list ve datastore.indexes.get izinleri gerekir.
  • TTL dizinleri oluşturmak veya silmek için datastore.indexes.update izni gerekir.
  • TTL işlemlerinin durumunu kontrol etmek için datastore.operations.list ve datastore.operations.get gerekir.

Bu izinleri atayan roller için Cloud Firestore Identity and Access Management rolleri başlıklı makaleyi inceleyin.

TTL dizini oluşturma

TTL dizini oluşturduğunuzda bir doküman alanını, koleksiyondaki dokümanların geçerlilik bitiş zamanı olarak belirlersiniz.

TTL, silinmeye uygun dokümanları belirlemek için belirli bir alanı kullanır. TTL alanı, Timestamp/BSON Date değerine veya Timestamp/BSON Date değeri içeren bir Array değerine ayarlanmalıdır. Mevcut bir alanı seçebilir veya daha sonra eklemeyi planladığınız bir alanı belirleyebilirsiniz.

TTL alan değerini ayarlamadan önce aşağıdakileri göz önünde bulundurun:

  • TTL alanı değeri gelecekteki, şimdiki veya geçmişteki bir zaman olabilir. Değer geçmişteki bir zamanı gösteriyorsa doküman hemen silinebilir. Örneğin, expireAt alanıyla bir TTL dizini oluşturup mevcut belgelere ekleyebilirsiniz.

  • Başka bir veri türü kullanmak veya TTL alan değerini ayarlamamak, ilgili doküman için TTL'yi devre dışı bırakır.

TTL dizini oluşturmak için aşağıdaki adımları uygulayın:

MongoDB API

createIndex() yöntemini çağırırken expireAfterSeconds dizin seçeneğini ekleyin:

db.COLLECTION_NAME.createIndex({"TTL_FIELD": 1, "expireAfterSeconds": EXPIRATION_OFFSET_SECONDS})

Örneğin:

db.restaurants.createIndex({"ts": 1, "expireAfterSeconds": 3600})

expireAfterSeconds, TTL'yi TTL dizini olarak tanımlar ve TTL alanındaki zaman damgası değeri ile sona erme zamanı arasındaki farktır. expireAfterSeconds, 0 olarak ayarlanırsa geçerlilik bitiş zamanı doğrudan TTL alanındaki zaman damgası değeriyle verilir.

Aşağıdaki sınırlamalara dikkat edin:

  • TTL dizinleri tam olarak bir alan içermelidir.
  • TTL dizinleri, sorgu planında kullanılmaz ve sorguların performansını artırmaz.
  • Koleksiyon başına yalnızca bir TTL dizini oluşturabilirsiniz.
  • MongoDB API ile TTL dizini oluşturma işlemi için denetleme günlükleri, google.firestore.admin.v1.FirestoreAdmin.UpdateField yöntem adını kullanır.

Google Cloud Console

  1. Google Cloud Console'da Veritabanları sayfasına gidin.

    Veritabanları'na gidin

  2. Veritabanları listesinden gerekli veritabanını seçin.

  3. Gezinme menüsünde Geçerlilik süresi'ni tıklayın.

  4. İlke oluştur'u tıklayın.

  5. Bir koleksiyon adı ve zaman damgası alan adı girin.

  6. İsteğe bağlı: Geçerlilik bitiş tarihi farkı yapılandırın. Bir değer girin ve bir birim (gün, saat, dakika veya saniye) seçin. Varsayılan olarak, ofset 0'dır.

  7. Oluştur'u tıklayın.

Konsol, Geçerlilik süresi sayfasına döner. İşlem başarıyla başlarsa sayfa, TTL dizinleri tablosuna bir giriş ekler. İşlem başarısız olursa sayfada bir hata mesajı gösterilir.

gcloud

  1. gcloud CLI KSA'yı yükleyin ve ilk kullanıma hazırlayın.

  2. TTL dizini yapılandırmak için firestore fields ttls update komutunu kullanın. gcloud CLI aracının işlemin tamamlanmasını beklemesini önlemek için --async işaretini ekleyin.

     gcloud firestore fields ttls update \
      ttl_field \
      --collection-group=collection_name \
      --enable-ttl 

    Geçerlilik bitiş ofseti olan bir TTL dizinini etkinleştirmek için --expiration-offset işaretini ekleyin:

     gcloud firestore fields ttls update \
      ttl_field \
      --collection-group=collection_name \
      --enable-ttl \
      --expiration-offset=expiration_offset 

    expiration_offset ifadesini bir süreyle değiştirin. Örneğin, 7 gün için 7d veya 24 saat için 24h. Bu işareti atlarsanız geçerlilik süresi varsayılan olarak 0 olur.

TTL dizini oluşturma süresi

TTL dizini oluşturmak en az on dakika veya daha uzun sürebilir. Bir işlemi başlattıktan sonra terminali kapatmak işlemi iptal etmez.

TTL dizinlerini görüntüleme

TTL dizinlerini görüntülemek için aşağıdaki adımları uygulayın:

MongoDB API

TTL dizinlerini görüntülemek için listIndexes() yöntemini kullanın. Örneğin:

db.restaurants.listIndexes()

Çıkışın hem TTL dizinlerini hem de TTL olmayan dizinleri içereceğini unutmayın. TTL dizinleri expireAfterSeconds seçeneğini içerir.

Google Cloud Console

  1. Google Cloud Console'da Veritabanları sayfasına gidin.

    Veritabanları'na gidin

  2. Veritabanları listesinden gerekli veritabanını seçin.

  3. Gezinme menüsünde Geçerlilik süresi'ni tıklayın.

Konsol, veritabanınızın TTL dizinlerini listeler ve her dizinin durumunu içerir.

gcloud

  1. gcloud CLI KSA'yı yükleyin ve ilk kullanıma hazırlayın.

  2. TTL dizini yapılandırmak için firestore fields ttls list komutunu kullanın. Aşağıdaki komut, tüm TTL dizinlerini listeler.

    gcloud firestore fields ttls list
    

    Belirli bir koleksiyondaki TTL dizinlerini listelemek için aşağıdakileri kullanın:

    gcloud firestore fields ttls list  --collection-group=collection_name
    

İşlem ayrıntılarını görüntüleme

CREATING durumundaki bir TTL dizini hakkında daha fazla ayrıntı görüntülemek için gcloud CLI kullanabilirsiniz.

Çalışan ve yakın zamanda tamamlanan tüm işlemleri görmek için operations list komutunu kullanın:

gcloud firestore operations list

Yanıtta, işlemin ilerleme durumuyla ilgili bir tahmin yer alır.

TTL dizinini silme

TTL dizinini silmek için aşağıdaki adımları uygulayın:

MongoDB API

TTL dizinini silmek için dropIndex() yöntemini kullanın. Örneğin:

Dizin adını kullanarak TTL dizini silme

db.restaurants.dropIndex("ts_1")

Dizin tanımını kullanarak TTL dizini silme

db.restaurants.dropIndex({"ts": 1})

MongoDB API ile TTL dizini silme işlemine ait denetleme günlüklerinde google.firestore.admin.v1.FirestoreAdmin.UpdateField yöntem adının kullanıldığını unutmayın.

Google Cloud Console

  1. Google Cloud Console'da Veritabanları sayfasına gidin.

    Veritabanları'na gidin

  2. Veritabanları listesinden gerekli veritabanını seçin.

  3. Gezinme menüsünde Geçerlilik süresi'ni tıklayın.

  4. TTL dizini tablosunda TTL dizininin satırını bulun. Bu tablo satırında Sil (çöp kutusu) düğmesini tıklayın.

  5. Sil'i tıklayarak onaylayın.

Konsol, Geçerlilik süresi sayfasına döner. İşlem başarılı olursa Cloud Firestore, TTL dizinini tablodan kaldırır.

gcloud

  1. gcloud CLI KSA'yı yükleyin ve ilk kullanıma hazırlayın.

  2. TTL dizini yapılandırmak için firestore fields ttls update komutunu kullanın. gcloud CLI aracının işlemin tamamlanmasını beklemesini önlemek için --async işaretini ekleyin.

    gcloud firestore fields ttls update ttl_field --collection-group=collection_name --disable-ttl
    

TTL silme işlemlerini izleme

TTL'ye dayalı silme işlemleriyle ilgili metrikleri görüntülemek için Cloud Monitoring kullanabilirsiniz. Cloud Firestore, TTL için aşağıdaki metrikleri sağlar:

Metrik türü Metrik adı Metrik açıklaması
firestore.googleapis.com/document/ttl_deletion_count Geçerlilik süresi silme sayısı

TTL dizinleri tarafından silinen toplam belge sayısı.

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays Silme gecikmelerine kadar geçerlilik süresi

Bir dokümanın TTL dizini kapsamında süresinin dolması ile gerçekten silinmesi arasında geçen süre.

Cloud Firestore metrikleri içeren bir kontrol paneli oluşturmak için Özel kontrol panelini yönetme ve Kontrol paneli widget'ları ekleme başlıklı makaleleri inceleyin.