TTL dizinleriyle veri saklama süresini yönetme

Bu sayfada, MongoDB API'yi, Google Cloud Console'u ve Google Cloud CLI kullanarak geçerlilik süresi (TTL) dizinlerinin nasıl yapılandırılacağı açıklanmaktadır.

Geçerlilik süresi (TTL)'ye genel bakış

TTL dizinlerini kullanarak eski verileri veritabanlarınızdan otomatik olarak kaldırı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ünün 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'ye dayalı silme işleminin aşağıdaki önemli davranışlarına dikkat edin:

  • TTL aracılığıyla silme işlemi anlık olarak gerçekleşmez. Süresi dolmuş belgeler, TTL işlemi bunları gerçekten silene kadar sorgularda ve arama isteklerinde görünmeye devam eder. TTL, silme işlemlerinde daha düşük toplam mülkiyet maliyeti avantajı için silme işlemlerinin zamanında yapılmasını göz ardı eder. Veriler genellikle geçerlilik süresi dolduktan sonraki 24 saat içinde silinir.

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

  • Bir belgenin geçerlilik süresi geçmişteyse ve koleksiyona yeni bir TTL dizini eklerseniz TTL dizininin kurulumu tamamlanıp etkin hale gelmesinden sonraki 24 saat içinde belge silinir.

  • TTL, belgeleri son kullanma zaman damgalarıyla aynı sırayla silmez.

  • Silme işlemleri, işlemsel olarak yapılmaz. Geçerlilik süresi 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 tarihle güncellenirse dokümanın süresi dolmaz ve yeni tarih kullanılır.

  • Cloud Firestore, bir dokümanın süresini yalnızca TTL alanı Date and time/BSON Date değeri veya Date and time/BSON Date değeri içeren bir Array değeri olarak ayarlandığında sona erdirir. Alan boş bırakılırsa veya null gibi bir değere ayarlanırsa doküman bazında geçerlilik bitimleri devre dışı bırakılır.

  • TTL, diğer veritabanı etkinlikleri üzerindeki etkiyi en aza indirecek şekilde tasarlanmıştır. TTL'den kaynaklanan silme işlemleri daha düşük öncelikli olarak ele alınır. TTL kaynaklı silme işlemlerinden kaynaklanan trafik artışlarını yumuşatmak için başka stratejiler de uygulanmaktadır.

TTL indeksleriyle ilgili farklılıklar

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

TTL alanları zaman damgalarını kullandığından, bunları TTL olmayan bir dizine eklemenin etkin nokta oluşturabileceğini unutmayın. Yazma ve silme işlemlerinin yüksek oranlarda dar bir belge aralığında yoğunlaşması durumunda etkin noktalar oluşur. Bu durum, yoğun yazma trafiği dönemlerinde ölçeklendirme performansını olumsuz etkileyebilir.

İzinler

TTL dizini oluşturan veya bırakan asıl kullanıcının projede aşağıdaki izne sahip olması gerekir:

  • TTL dizinlerini görüntülemek için datastore.indexes.list ve datastore.indexes.get izinleri gerekir.
  • TTL dizinleri oluşturmak veya bırakmak 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ı tanımlamak için belirtilen bir alanı kullanır. TTL alanı, Timestamp/BSON Date değeri veya Timestamp/BSON Date değeri içeren bir Array değeri olarak ayarlanmalıdır. Halihazırda mevcut olan 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, şu anki veya geçmişteki bir zaman olabilir. Değer geçmiş bir zamansa belge hemen silinmeye uygun hale gelir. Örneğin, expireAt alanıyla bir TTL dizini oluşturabilir ve ardından bunu 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öntemi çağrılı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 bir TTL dizini olarak tanımlar ve TTL alanındaki zaman damgası değeri ile geçerlilik bitiş zamanı arasındaki farktır. expireAfterSeconds, 0 olarak ayarlanırsa geçerlilik süresi doğrudan TTL alanındaki zaman damgası değeriyle verilir.

Aşağıdaki sınırlamaları göz önünde bulundurun:

  • TTL dizinleri tam olarak bir alan içermelidir.
  • TTL dizinleri sorgu planlaması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çin denetleme günlüklerinde google.firestore.admin.v1.FirestoreAdmin.UpdateField yöntem adı kullanılı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 Yaşam süresi'ni tıklayın.

  4. Politika oluştur'u tıklayın.

  5. 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, uzaklık 0'dır.

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

Konsol, Yaşam süresi sayfasına döner. İşlem başarıyla başlarsa sayfa, TTL dizinleri tablosuna bir giriş ekler. 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. --async işaretini ekleyerek gcloud CLI öğesinin işlemin tamamlanmasını beklemesini önleyin.

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

    Geçerlilik bitişi telafisi 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 yerine bir süre girin. Örneğin, 7 gün için 7d veya 24 saat için 24h. Bu işareti atlarsanız son kullanma tarihi uzaklığı 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 indekslerini 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 Yaşam süresi'ni tıklayın.

Konsolda, veritabanınızın TTL dizinleri listelenir ve her dizinin durumu 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 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 simgesini 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ıyor.

TTL dizinini bırakma

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

MongoDB API

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

Dizin adını kullanarak TTL dizini bırakma

db.restaurants.dropIndex("ts_1")

Dizin tanımını kullanarak TTL dizini bırakma

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

MongoDB API ile TTL dizini bırakmak için denetleme günlüklerinin google.firestore.admin.v1.FirestoreAdmin.UpdateField yöntem adını kullandığı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 Yaşam süresi'ni tıklayın.

  4. TTL dizini tablosunda TTL dizini 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, Yaşam süresi sayfasına döner. İşlem başarılı olduğunda Cloud Firestore, tablodan TTL dizinini 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. --async işaretini ekleyerek gcloud CLI öğesinin işlemin tamamlanmasını beklemesini önleyin.

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

TTL silme işlemlerini izleme

TTL'ye bağlı silme işlemleriyle ilgili metrikleri görüntülemek için Cloud Monitoring simgesini 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 (TTL) silme sayısı

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

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays TTL'nin sona ermesinden silme işlemlerindeki gecikmelere kadar

Bir belgenin TTL dizini altında süresinin dolması ile gerçekten silinmesi arasında geçen süre.

Cloud Firestore metrik 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.