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

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

टीटीएल की खास जानकारी

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

कीमत

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

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

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

टीटीएल के बाद डेटा मिटाना

टीटीएल की मदद से डेटा मिटाने की प्रोसेस के बारे में इन अहम बातों का ध्यान रखें:

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

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

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

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

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

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

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

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

टीटीएल इंडेक्स के साथ अंतर

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

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

अनुमतियां

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

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

ये अनुमतियां असाइन करने वाली भूमिकाओं के बारे में जानने के लिए, Cloud Firestore पहचान और ऐक्सेस मैनेजमेंट की भूमिकाएं देखें.

टीटीएल इंडेक्स बनाना

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

टीटीएल, मिटाए जा सकने वाले दस्तावेज़ों की पहचान करने के लिए, किसी खास फ़ील्ड का इस्तेमाल करता है. टीटीएल फ़ील्ड को Timestamp/BSON Date वैल्यू या Timestamp/BSON Date वैल्यू वाली Array वैल्यू पर सेट किया जाना चाहिए. आपके पास पहले से मौजूद किसी फ़ील्ड को चुनने का विकल्प है. इसके अलावा, आपके पास बाद में जोड़े जाने वाले किसी फ़ील्ड को तय करने का विकल्प भी है.

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

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

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

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

MongoDB API

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

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

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

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

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

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

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

Google Cloud Console

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

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

  2. डेटाबेस की सूची से वह डेटाबेस चुनें जिसकी ज़रूरत हो.

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

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

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

  6. ज़रूरी नहीं: समयसीमा खत्म होने का ऑफ़सेट कॉन्फ़िगर करें. कोई वैल्यू डालें और कोई इकाई (दिन, घंटे, मिनट या सेकंड) चुनें. डिफ़ॉल्ट रूप से, ऑफ़सेट 0 होता है.

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

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

gcloud

  1. gcloud CLI सीएलआई को इंस्टॉल और शुरू करें.

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

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

    समयसीमा खत्म होने के ऑफ़सेट के साथ टीटीएल इंडेक्स को चालू करने के लिए, --expiration-offset फ़्लैग जोड़ें:

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

    expiration_offset को किसी अवधि से बदलें. उदाहरण के लिए, सात दिनों के लिए 7d या 24 घंटों के लिए 24h. अगर इस फ़्लैग को शामिल नहीं किया जाता है, तो समयसीमा खत्म होने का ऑफ़सेट डिफ़ॉल्ट रूप से 0 पर सेट हो जाता है.

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

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

टीटीएल इंडेक्स देखना

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

MongoDB API

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

db.restaurants.listIndexes()

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

Google Cloud Console

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

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

  2. डेटाबेस की सूची से वह डेटाबेस चुनें जिसकी ज़रूरत हो.

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

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

gcloud

  1. gcloud CLI सीएलआई को इंस्टॉल और शुरू करें.

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

    gcloud firestore fields ttls list
    

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

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

ऑपरेशन की जानकारी देखना

gcloud CLI का इस्तेमाल करके, CREATING स्टेटस वाले टीटीएल इंडेक्स के बारे में ज़्यादा जानकारी देखी जा सकती है.

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

gcloud firestore operations list

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

टीटीएल इंडेक्स को ड्रॉप करना

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

MongoDB API

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

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

db.restaurants.dropIndex("ts_1")

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

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

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

Google Cloud Console

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

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

  2. डेटाबेस की सूची से वह डेटाबेस चुनें जिसकी ज़रूरत हो.

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

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

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

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

gcloud

  1. gcloud CLI सीएलआई को इंस्टॉल और शुरू करें.

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

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

टीटीएल की मदद से मिटाए गए डेटा पर नज़र रखना

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

मेट्रिक का टाइप मेट्रिक का नाम मेट्रिक की जानकारी
firestore.googleapis.com/document/ttl_deletion_count मिटाए जाने से पहले, लाइव रहने की अवधि

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

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays डेटा मिटाने में लगने वाले समय की जानकारी

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

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