टीटीएल इंडेक्स की मदद से डेटा के रखरखाव को मैनेज करना

इस पेज पर, TTL (टाइम टू लिव) इंडेक्स को कॉन्फ़िगर करने के लिए, MongoDB API, Google Cloud Console, और Google Cloud CLI का इस्तेमाल करने का तरीका बताया गया है.

TTL की खास जानकारी

अपने डेटाबेस से पुराने डेटा को अपने-आप हटाने के लिए, TTL इंडेक्स का इस्तेमाल करें. TTL इंडेक्स, किसी कलेक्शन में मौजूद दस्तावेज़ों के लिए, किसी फ़ील्ड को समयसीमा खत्म होने का समय तय करता है. TTL की मदद से, पुराने डेटा को हटाकर स्टोरेज की लागत कम की जा सकती है. आम तौर पर, डेटा की समयसीमा खत्म होने के 24 घंटे के अंदर उसे मिटा दिया जाता है.

कीमत

TTL के तहत, डेटा मिटाने की कार्रवाइयों के लिए, मैनेज किए गए मिटाने की यूनिट का इस्तेमाल किया जाता है. कीमत की जानकारी के लिए, Cloud Firestore Enterprise Edition की कीमत देखें.

सीमाएं और पाबंदियां

  • हर कलेक्शन के लिए, सिर्फ़ एक TTL इंडेक्स बनाया जा सकता है.
  • ज़्यादा से ज़्यादा 500 TTL इंडेक्स बनाए जा सकते हैं.

TTL के तहत डेटा मिटाना

TTL के तहत डेटा मिटाने से जुड़ी इन अहम बातों का ध्यान रखें:

  • TTL के तहत डेटा मिटाने की प्रोसेस तुरंत नहीं होती. समयसीमा खत्म हो चुके दस्तावेज़, क्वेरी और लुकअप के अनुरोधों में तब तक दिखते रहते हैं, जब तक TTL की प्रोसेस उन्हें मिटा नहीं देती. TTL के तहत डेटा मिटाने में लगने वाले समय के मुकाबले, डेटा मिटाने की कुल लागत कम होती है. आम तौर पर, डेटा की समयसीमा खत्म होने के 24 घंटे के अंदर उसे मिटा दिया जाता है.

  • किसी मौजूदा कलेक्शन के लिए TTL इंडेक्स बनाने पर, नए TTL इंडेक्स के हिसाब से, समयसीमा खत्म हो चुके सभी डेटा को एक साथ मिटा दिया जाता है. ध्यान दें कि एक साथ डेटा मिटाने की प्रोसेस भी तुरंत नहीं होती. यह इस बात पर निर्भर करती है कि उस कलेक्शन के लिए कितना डेटा मौजूद है.

  • अगर किसी दस्तावेज़ की समयसीमा खत्म हो चुकी है और आपने कलेक्शन में नया TTL इंडेक्स जोड़ा है, तो TTL इंडेक्स के सेटअप होने और चालू होने के 24 घंटे के अंदर, दस्तावेज़ मिट जाएगा.

  • यह ज़रूरी नहीं है कि TTL, दस्तावेज़ों को उनकी समयसीमा खत्म होने के टाइमस्टैंप के क्रम में ही मिटाए.

  • डेटा मिटाने की कार्रवाइयां, लेन-देन के तौर पर नहीं की जाती हैं. यह ज़रूरी नहीं है कि एक ही समयसीमा खत्म होने वाले दस्तावेज़ एक ही समय पर मिटाए जाएं. अगर आपको ऐसा करना है, तो क्लाइंट लाइब्रेरी का इस्तेमाल करके, डेटा मिटाएं.

  • Cloud Firestore समयसीमा खत्म होने की तारीख तय करने के लिए, हमेशा TTL फ़ील्ड के सबसे नए वर्शन का इस्तेमाल करेगा. उदाहरण के लिए, अगर समयसीमा खत्म हो चुके, लेकिन अब तक मिटाए नहीं गए किसी दस्तावेज़ के TTL फ़ील्ड को अपडेट करके, समयसीमा खत्म होने की नई तारीख सेट की जाती है, तो दस्तावेज़ की समयसीमा खत्म नहीं होगी. साथ ही, नई तारीख का इस्तेमाल किया जाएगा.

  • Cloud Firestore किसी दस्तावेज़ की समयसीमा तभी खत्म करता है, जब TTL फ़ील्ड की वैल्यू Date and time/BSON Date या Array हो. साथ ही, Array वैल्यू में Date and time/BSON Date वैल्यू शामिल हो. हर दस्तावेज़ के लिए, समयसीमा खत्म होने की तारीख सेट करने की सुविधा बंद करने के लिए, फ़ील्ड को खाली छोड़ें या null जैसी कोई वैल्यू सेट करें.

  • TTL को इस तरह डिज़ाइन किया गया है कि इसका असर, डेटाबेस की अन्य गतिविधियों पर कम से कम पड़े. TTL के तहत डेटा मिटाने की कार्रवाइयों को कम प्राथमिकता दी जाती है. TTL के तहत डेटा मिटाने की वजह से होने वाले ट्रैफ़िक स्पाइक को कम करने के लिए, अन्य रणनीतियां भी लागू की जाती हैं.

TTL इंडेक्स में अंतर

Firestore के अन्य इंडेक्स के उलट, TTL इंडेक्स का इस्तेमाल क्वेरी प्लान करने के दौरान, परफ़ॉर्मेंस बेहतर करने के लिए नहीं किया जाता. TTL के साथ इस्तेमाल किए जाने वाले किसी फ़ील्ड पर क्वेरी की परफ़ॉर्मेंस बेहतर करने के लिए, आपको उसे TTL इंडेक्स के अलावा किसी दूसरे इंडेक्स में जोड़ना होगा.

यह ध्यान रखना ज़रूरी है कि TTL फ़ील्ड में टाइमस्टैंप का इस्तेमाल किया जाता है. इसलिए, उन्हें TTL इंडेक्स के अलावा किसी दूसरे इंडेक्स में जोड़ने से हॉटस्पॉट बन सकते हैं. हॉटस्पॉट तब बनते हैं, जब लिखने और मिटाने की कार्रवाइयां, दस्तावेज़ों की सीमित रेंज में ज़्यादा बार की जाती हैं. इससे, ज़्यादा ट्रैफ़िक के दौरान, स्केलिंग की परफ़ॉर्मेंस पर बुरा असर पड़ सकता है.

अनुमतियां

TTL इंडेक्स बनाने या हटाने के लिए, प्रिंसिपल के पास प्रोजेक्ट में यह अनुमति होनी चाहिए:

  • TTL इंडेक्स देखने के लिए, datastore.indexes.list और datastore.indexes.get अनुमतियां ज़रूरी हैं.
  • TTL इंडेक्स बनाने या हटाने के लिए, datastore.indexes.update अनुमति ज़रूरी है.
  • TTL की कार्रवाइयों की स्थिति देखने के लिए, datastore.operations.list और datastore.operations.get अनुमतियां ज़रूरी हैं.

इन अनुमतियों को असाइन करने वाली भूमिकाओं के बारे में जानने के लिए, Cloud Firestore की IAM भूमिकाएं देखें.

TTL इंडेक्स बनाना

TTL इंडेक्स बनाते समय, किसी कलेक्शन में मौजूद दस्तावेज़ों के लिए, किसी फ़ील्ड को समयसीमा खत्म होने का समय तय किया जाता है.

TTL, उन दस्तावेज़ों की पहचान करने के लिए, तय किए गए फ़ील्ड का इस्तेमाल करता है जिन्हें मिटाया जा सकता है. TTL फ़ील्ड की वैल्यू Timestamp/BSON Date या Array होनी चाहिए. साथ ही, Array वैल्यू में Timestamp/BSON Date वैल्यू शामिल होनी चाहिए. ऐसा फ़ील्ड चुना जा सकता है जो पहले से मौजूद है या ऐसा फ़ील्ड तय किया जा सकता है जिसे बाद में जोड़ा जाएगा.

TTL फ़ील्ड की वैल्यू सेट करने से पहले, इन बातों का ध्यान रखें:

  • TTL फ़ील्ड की वैल्यू, आने वाले समय, मौजूदा समय या बीते समय की हो सकती है. अगर वैल्यू बीते समय की है, तो दस्तावेज़ को तुरंत मिटाया जा सकता है. उदाहरण के लिए, expireAt फ़ील्ड के साथ TTL इंडेक्स बनाया जा सकता है. इसके बाद, इसे मौजूदा दस्तावेज़ों में जोड़ा जा सकता है.

  • किसी अन्य डेटा टाइप का इस्तेमाल करने या TTL फ़ील्ड की वैल्यू सेट न करने पर, दस्तावेज़ के लिए TTL की सुविधा बंद हो जाएगी.

TTL इंडेक्स बनाने के लिए, यह तरीका अपनाएं:

MongoDB API

expireAfterSeconds इंडेक्स का विकल्प शामिल करें जब createIndex() तरीके को कॉल करते समय:

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

उदाहरण के लिए:

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

expireAfterSeconds , TTL को TTL इंडेक्स के तौर पर पहचानता है. साथ ही, यह TTL फ़ील्ड से मिली टाइमस्टैंप वैल्यू और समयसीमा खत्म होने के समय के बीच का ऑफ़सेट होता है. अगर expireAfterSeconds की वैल्यू 0 है, तो समयसीमा खत्म होने का समय, सीधे TTL फ़ील्ड से मिली टाइमस्टैंप वैल्यू से तय होता है.

इन सीमाओं का ध्यान रखें:

  • TTL इंडेक्स में सिर्फ़ एक फ़ील्ड होना चाहिए.
  • TTL इंडेक्स का इस्तेमाल क्वेरी प्लान करने के दौरान नहीं किया जाता. साथ ही, इससे क्वेरी की परफ़ॉर्मेंस बेहतर नहीं होती.
  • हर कलेक्शन के लिए, सिर्फ़ एक TTL इंडेक्स बनाया जा सकता है.
  • MongoDB API की मदद से, TTL इंडेक्स बनाने के लिए, ऑडिट लॉग में google.firestore.admin.v1.FirestoreAdmin.UpdateField तरीके के नाम का इस्तेमाल किया जाता है.

Google Cloud Console

  1. Google Cloud Console में, डेटाबेस पेज पर जाएं.

    डेटाबेस पर जाएं

  2. डेटाबेस की सूची में से, ज़रूरी डेटाबेस चुनें.

  3. नेविगेशन मेन्यू में, टाइम-टू-लिव पर क्लिक करें.

  4. नीति बनाएं पर क्लिक करें.

  5. कलेक्शन का नाम और टाइमस्टैंप फ़ील्ड का नाम डालें.

  6. बनाएं पर क्लिक करें.

कंसोल, टाइम-टू-लिव पेज पर वापस आ जाता है. अगर कार्रवाई सफलतापूर्वक शुरू होती है, तो पेज, TTL इंडेक्स की टेबल में एक एंट्री जोड़ता है. कार्रवाई पूरी न होने पर, पेज पर गड़बड़ी का मैसेज दिखता है.

gcloud

  1. इंस्टॉल करें और शुरू करें gcloud CLI CLI.

  2. TTL इंडेक्स को कॉन्फ़िगर करने के लिए, firestore fields ttls update कमांड का इस्तेमाल करें. कार्रवाई पूरी होने तक इंतज़ार करने से रोकने के लिए, --async फ़्लैग जोड़ें.gcloud CLI

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

TTL इंडेक्स बनाने में लगने वाला समय

TTL इंडेक्स बनाने में कम से कम दस मिनट या उससे ज़्यादा समय लग सकता है. कोई कार्रवाई शुरू करने के बाद, टर्मिनल बंद करने पर कार्रवाई रद्द नहीं होती.

TTL इंडेक्स देखना

TTL इंडेक्स देखने के लिए, यह तरीका अपनाएं:

MongoDB API

TTL इंडेक्स देखने के लिए, listIndexes() तरीके का इस्तेमाल करें. उदाहरण के लिए:

db.restaurants.listIndexes()

ध्यान दें कि आउटपुट में, TTL इंडेक्स और TTL इंडेक्स के अलावा अन्य इंडेक्स, दोनों शामिल होंगे. TTL इंडेक्स में, expireAfterSeconds विकल्प शामिल होगा.

Google Cloud Console

  1. Google Cloud Console में, डेटाबेस पेज पर जाएं.

    डेटाबेस पर जाएं

  2. डेटाबेस की सूची में से, ज़रूरी डेटाबेस चुनें.

  3. नेविगेशन मेन्यू में, टाइम-टू-लिव पर क्लिक करें.

कंसोल, आपके डेटाबेस के लिए TTL इंडेक्स की सूची दिखाता है. साथ ही, इसमें हर इंडेक्स की स्थिति भी शामिल होती है.

gcloud

  1. इंस्टॉल करें और शुरू करें gcloud CLI CLI.

  2. TTL इंडेक्स को कॉन्फ़िगर करने के लिए, firestore fields ttls list कमांड का इस्तेमाल करें. यहां दी गई कमांड से, सभी TTL इंडेक्स की सूची दिखती है.

    gcloud firestore fields ttls list
    

    किसी खास कलेक्शन के तहत TTL इंडेक्स की सूची देखने के लिए, यह कमांड इस्तेमाल करें:

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

कार्रवाई की जानकारी देखना

`CREATING` स्थिति में मौजूद TTL इंडेक्स के बारे में ज़्यादा जानकारी देखने के लिए, gcloud CLI का इस्तेमाल किया जा सकता है.

हाल ही में पूरी हुई और चल रही सभी कार्रवाइयों को देखने के लिए, operations list कमांड का इस्तेमाल करें:

gcloud firestore operations list

जवाब में, कार्रवाई की प्रोग्रेस का अनुमान शामिल होता है.

TTL इंडेक्स हटाना

TTL इंडेक्स हटाने के लिए, यह तरीका अपनाएं:

MongoDB API

TTL इंडेक्स हटाने के लिए, dropIndex() तरीके का इस्तेमाल करें. उदाहरण के लिए:

इंडेक्स के नाम का इस्तेमाल करके, TTL इंडेक्स हटाना

db.restaurants.dropIndex("ts_1")

इंडेक्स की परिभाषा का इस्तेमाल करके, TTL इंडेक्स हटाना

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

ध्यान दें कि ऑडिट लॉग में, MongoDB API की मदद से, TTL इंडेक्स हटाने के लिए, google.firestore.admin.v1.FirestoreAdmin.UpdateField तरीके के नाम का इस्तेमाल किया जाता है.

Google Cloud Console

  1. Google Cloud Console में, डेटाबेस पेज पर जाएं.

    डेटाबेस पर जाएं

  2. डेटाबेस की सूची में से, ज़रूरी डेटाबेस चुनें.

  3. नेविगेशन मेन्यू में, टाइम-टू-लिव पर क्लिक करें.

  4. TTL इंडेक्स की टेबल में, TTL इंडेक्स वाली लाइन ढूंढें. इस टेबल की लाइन में, मिटाएं (ट्रैश कैन) बटन पर क्लिक करें.

  5. मिटाएं पर क्लिक करके, पुष्टि करें.

कंसोल, टाइम-टू-लिव पेज पर वापस आ जाता है. कार्रवाई पूरी होने पर, Cloud Firestore टेबल से TTL इंडेक्स हटा देता है.

gcloud

  1. इंस्टॉल करें और शुरू करें gcloud CLI CLI.

  2. TTL इंडेक्स को कॉन्फ़िगर करने के लिए, firestore fields ttls update कमांड का इस्तेमाल करें. कार्रवाई पूरी होने तक इंतज़ार करने से रोकने के लिए, --async फ़्लैग जोड़ें.gcloud CLI

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

TTL के तहत डेटा मिटाने की कार्रवाइयों पर नज़र रखना

Cloud Monitoring का इस्तेमाल करके, TTL के तहत डेटा मिटाने की कार्रवाइयों से जुड़ी मेट्रिक देखी जा सकती हैं. Cloud Firestore TTL के लिए ये मेट्रिक उपलब्ध कराता है:

मेट्रिक का टाइप मेट्रिक का नाम मेट्रिक की जानकारी
firestore.googleapis.com/document/ttl_deletion_count टाइम टू लिव के तहत डेटा मिटाने की संख्या

TTL इंडेक्स के तहत मिटाए गए दस्तावेज़ों की कुल संख्या.

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays टाइम टू लिव के तहत, समयसीमा खत्म होने के बाद डेटा मिटाने में लगने वाला समय

TTL इंडेक्स के तहत, किसी दस्तावेज़ की समयसीमा खत्म होने और उसे मिटाने के बीच लगने वाला समय.

Cloud Firestore मेट्रिक के साथ डैशबोर्ड सेट अप करने के लिए, पसंद के मुताबिक डैशबोर्ड मैनेज करना और डैशबोर्ड में विजेट जोड़ना देखें.