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 Datedeğerine veyaDate and time/BSON Datedeğeri içeren birArraydeğ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 veyanullgibi 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.listvedatastore.indexes.getizinleri gerekir. - TTL dizinleri oluşturmak veya silmek için
datastore.indexes.updateizni gerekir. - TTL işlemlerinin durumunu kontrol etmek için
datastore.operations.listvedatastore.operations.getgerekir.
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,
expireAtalanı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.UpdateFieldyöntem adını kullanır.
Google Cloud Console
Google Cloud Console'da Veritabanları sayfasına gidin.
Veritabanları listesinden gerekli veritabanını seçin.
Gezinme menüsünde Geçerlilik süresi'ni tıklayın.
İlke oluştur'u tıklayın.
Bir koleksiyon adı ve zaman damgası alan adı girin.
İ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.
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
gcloud CLI KSA'yı yükleyin ve ilk kullanıma hazırlayın.
TTL dizini yapılandırmak için
firestore fields ttls updatekomutunu kullanın. gcloud CLI aracının işlemin tamamlanmasını beklemesini önlemek için--asynciş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-offsetiş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
7dveya 24 saat için24h. 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
Google Cloud Console'da Veritabanları sayfasına gidin.
Veritabanları listesinden gerekli veritabanını seçin.
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
gcloud CLI KSA'yı yükleyin ve ilk kullanıma hazırlayın.
TTL dizini yapılandırmak için
firestore fields ttls listkomutunu 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
Google Cloud Console'da Veritabanları sayfasına gidin.
Veritabanları listesinden gerekli veritabanını seçin.
Gezinme menüsünde Geçerlilik süresi'ni tıklayın.
TTL dizini tablosunda TTL dizininin satırını bulun. Bu tablo satırında Sil (çöp kutusu) düğmesini tıklayın.
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
gcloud CLI KSA'yı yükleyin ve ilk kullanıma hazırlayın.
TTL dizini yapılandırmak için
firestore fields ttls updatekomutunu kullanın. gcloud CLI aracının işlemin tamamlanmasını beklemesini önlemek için--asynciş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.