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üresine 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ş süresi olarak belirler. TTL ile eski verileri temizleyerek depolama maliyetlerini azaltabilirsiniz. Veriler genellikle geçerlilik süresi sona erdikten sonraki 24 saat içinde silinir.
Fiyatlandırma
TTL silme işlemleri, doküman silme maliyetlerinize dahil edilir. Silme işlemlerinin fiyatlandırması 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'ye dayalı silme işleminin aşağıdaki temel 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 toplam mülkiyet maliyetini düşürme avantajı için silme işlemlerinin zamanlamasını değiştirir. 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 koleksiyonda ne kadar veri olduğuna bağlı olduğunu unutmayın.
Bir belgenin geçerlilik süresi geçmişse 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ırada silmez.
Silme işlemleri, işlemsel olarak yapılmaz. Aynı son kullanma tarihine sahip dokümanlar aynı anda silinmeyebilir. Bu davranışı istiyorsanız silme işlemlerini bir istemci kitaplığı kullanarak gerçekleştirin.
Cloud Firestore, geçerlilik bitimini belirlemek için her zaman en yeni TTL alanını kullanır. Örneğin, süresi dolmuş ancak henüz silinmemiş bir belgenin TTL alanı daha ileri bir tarihle güncellenirse belgenin süresi dolmaz ve yeni tarih kullanılır.
Cloud Firestore, bir dokümanın süresini yalnızca TTL alanı bir
Date and time/BSON Datedeğeri veyaDate and time/BSON Datedeğeri içeren birArraydeğeri olarak ayarlandığında sona erdirir. Alan boş bırakılırsa veyanullgibi bir değere ayarlanırsa doküman bazında geçerlilik süreleri 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 değerlendirilir. Ayrıca, TTL kaynaklı silme işlemlerinden kaynaklanan trafik artışlarını yumuşatmak için başka stratejiler de uygulanır.
TTL alanları ve TTL olmayan dizinler
TTL alanı dizine eklenebilir veya dizine eklenemez. Ancak TTL alanı bir zaman damgası olduğundan bu alanı TTL olmayan bir dizine eklemek, daha yüksek trafik hızlarında performansı etkileyebilir. TTL olmayan bir dizine zaman damgası alanı eklemek, en iyi uygulamalara aykırı olan etkin noktalar oluşturabilir. Hotspot'lar, dar bir belge aralığında yüksek okuma, yazma ve silme oranlarıdır.
İzinler
TTL indeksi oluşturan veya bırakan asıl sorumlu, 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 bırakmak 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 Kimlik ve Erişim Yönetimi rolleri başlıklı makaleyi inceleyin.
Başlamadan önce
TTL dizinlerini yönetmek için gcloud CLI komutunu kullanmadan önce bileşenleri mevcut en son sürüme güncellemek için gcloud components update komutunu kullanın:
gcloud components update
TTL dizini oluşturma
TTL dizini oluşturduğunuzda bir belge alanını koleksiyondaki belgelerin geçerlilik süresi 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. Hâlihazı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 doküman hemen silinmeye uygun hale gelir. Örneğin,
expireAtalanıyla bir TTL dizini oluşturabilir ve 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ö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 geçerlilik bitiş zamanı arasındaki farktır. expireAfterSeconds, 0 olarak ayarlanırsa geçerlilik bitiş saati 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 sorgularda kullanılamaz.
- 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.UpdateFieldyöntem adı kullanılır.
Google Cloud Console
Google Cloud Console'da Veritabanları sayfasına gidin.
Veritabanları listesinden gerekli veritabanını seçin.
Gezinme menüsünde Yaşam süresi'ni tıklayın.
Politika Oluştur'u tıklayın.
Bir koleksiyon adı ve zaman damgası alanı adı girin.
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. Başarısız olursa sayfada bir hata mesajı gösterilir.
gcloud
TTL dizini yapılandırmak için
firestore fields ttls updatekomutunu kullanın.--asyncişaretini ekleyerek gcloud CLI öğesinin işlemin tamamlanmasını beklemesini engelleyin.gcloud firestore fields ttls update ttl_field --collection-group=collection_name --enable-ttl
TTL dizini oluşturma süresi
Boş bir veritabanında bile TTL dizini oluşturmak 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 Yaşam süresi'ni tıklayın.
Konsolda, veritabanınızın TTL dizinleri listelenir ve her dizinin durumu gösterilir.
gcloud
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
gcloud CLI durumundaki bir TTL dizini hakkında daha fazla ayrıntı görüntülemek için gcloud CLI simgesini kullanabilirsiniz.CREATING
Ç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 dizini 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ırakmaya yönelik denetim günlüklerinin google.firestore.admin.v1.FirestoreAdmin.UpdateField yöntem adını kullandığı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 Yaşam süresi'ni tıklayın.
TTL dizini tablosunda TTL dizini satırını bulun. Bu tablo satırında Sil (çöp kutusu) düğmesini tıklayın.
Sil'i tıklayarak işlemi onaylayın.
Konsol, Geçerlilik süresi sayfasına döner. İşlem başarılı olduğunda, Cloud Firestore, tablodan TTL dizinini kaldırır.
gcloud
TTL dizini yapılandırmak için
firestore fields ttls updatekomutunu kullanın.--asyncişaretini ekleyerek gcloud CLI öğesinin işlemin tamamlanmasını beklemesini engelleyin.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 dolan silme sayısı |
TTL dizinleri tarafından silinen toplam doküman sayısı. |
| firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | Geçerlilik süresinin sona ermesinden silme işlemine kadar olan gecikmeler |
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.