এই পৃষ্ঠায় বর্ণনা করা হয়েছে কীভাবে MongoDB API, Google Cloud কনসোল এবং Google Cloud CLI ব্যবহার করে টাইম টু লিভ (TTL) ইনডেক্স কনফিগার করতে হয়।
বেঁচে থাকার সময়ের সংক্ষিপ্ত বিবরণ
আপনার ডাটাবেস থেকে অপ্রচলিত ডেটা স্বয়ংক্রিয়ভাবে মুছে ফেলার জন্য টিটিএল (TTL) ইনডেক্স ব্যবহার করুন। একটি টিটিএল ইনডেক্স কোনো নির্দিষ্ট কালেকশনের ডকুমেন্টগুলোর জন্য একটি নির্দিষ্ট ফিল্ডকে মেয়াদোত্তীর্ণের সময় হিসেবে নির্ধারণ করে। টিটিএল-এর মাধ্যমে, আপনি অপ্রচলিত ডেটা পরিষ্কার করে স্টোরেজ খরচ কমাতে পারেন। ডেটা সাধারণত তার মেয়াদোত্তীর্ণ হওয়ার ২৪ ঘণ্টার মধ্যে মুছে ফেলা হয়।
মূল্য নির্ধারণ
TTL ডিলিট অপারেশনগুলো আপনার ডকুমেন্ট ডিলিট খরচের অন্তর্ভুক্ত হয়। ডিলিট অপারেশনের মূল্য জানতে, Cloud Firestore এন্টারপ্রাইজ সংস্করণের মূল্য তালিকা দেখুন।
সীমা এবং সীমাবদ্ধতা
- আপনি প্রতিটি কালেকশনের জন্য কেবল একটি TTL ইনডেক্স তৈরি করতে পারবেন।
- আপনি সর্বোচ্চ ৫০০টি টিটিএল ইনডেক্স রাখতে পারবেন।
টিটিএল মুছে ফেলা
TTL-চালিত ডিলিশনের নিম্নলিখিত মূল আচরণগুলো লক্ষ্য করুন:
TTL-এর মাধ্যমে ডেটা মুছে ফেলা একটি তাৎক্ষণিক প্রক্রিয়া নয়। মেয়াদোত্তীর্ণ ডকুমেন্টগুলো কোয়েরি এবং লুকআপ রিকোয়েস্টে প্রদর্শিত হতে থাকে, যতক্ষণ না TTL প্রক্রিয়াটি সেগুলোকে প্রকৃতপক্ষে মুছে ফেলে। TTL ডেটা মুছে ফেলার সময়ানুবর্তিতার বিনিময়ে এর মোট মালিকানা খরচ (total cost of ownership) কমানোর সুবিধা প্রদান করে। ডেটা সাধারণত এর মেয়াদ শেষ হওয়ার ২৪ ঘণ্টার মধ্যে মুছে ফেলা হয়।
বিদ্যমান কোনো কালেকশনে একটি TTL ইনডেক্স তৈরি করলে, নতুন TTL ইনডেক্স অনুযায়ী সমস্ত মেয়াদোত্তীর্ণ ডেটা একযোগে মুছে ফেলা হয়। উল্লেখ্য যে, এই একযোগে মুছে ফেলার প্রক্রিয়াটিও তাৎক্ষণিক নয় এবং এটি সেই কালেকশনে কী পরিমাণ ডেটা রয়েছে তার উপর নির্ভর করে।
যদি কোনো ডকুমেন্টের মেয়াদ অতীতে শেষ হয়ে গিয়ে থাকে এবং আপনি সংগ্রহটিতে একটি নতুন TTL ইনডেক্স যোগ করেন, তাহলে TTL ইনডেক্সটির সেটআপ সম্পন্ন হয়ে সক্রিয় হওয়ার ২৪ ঘণ্টার মধ্যে ডকুমেন্টটি মুছে ফেলা হবে।
TTL সবসময় ডকুমেন্টগুলোকে তাদের মেয়াদ শেষ হওয়ার টাইমস্ট্যাম্পের ক্রমানুসারে মুছে ফেলে না।
ডিলিট করার কাজটি ট্রানজ্যাকশনাল পদ্ধতিতে করা হয় না। একই মেয়াদোত্তীর্ণ সময়ের ডকুমেন্টগুলো যে একই সময়ে ডিলিট হবেই, এমন কোনো নিশ্চয়তা নেই। আপনার যদি এই ধরনের আচরণের প্রয়োজন হয়, তবে একটি ক্লায়েন্ট লাইব্রেরি ব্যবহার করে ডিলিট করার কাজটি সম্পাদন করুন।
মেয়াদ শেষ হওয়ার তারিখ নির্ধারণের জন্য Cloud Firestore সর্বদা সর্বশেষ TTL ফিল্ডটিকেই প্রাধান্য দেবে। উদাহরণস্বরূপ, যদি মেয়াদোত্তীর্ণ কিন্তু এখনও মুছে ফেলা হয়নি এমন কোনো ডকুমেন্টের TTL ফিল্ড পরবর্তী কোনো তারিখে আপডেট করা হয়, তবে ডকুমেন্টটির মেয়াদ শেষ হবে না এবং নতুন তারিখটিই ব্যবহৃত হবে।
Cloud Firestore একটি ডকুমেন্টের মেয়াদ তখনই শেষ করে, যখন TTL ফিল্ডটি কোনো
Date and time/BSON Dateভ্যালু অথবাDate and time/BSON Dateসম্বলিত কোনোArrayভ্যালুতে সেট করা থাকে। প্রতি-ডকুমেন্ট ভিত্তিতে মেয়াদ শেষ হওয়া নিষ্ক্রিয় করতে, ফিল্ডটি খালি রাখুন অথবাnullমতো কোনো ভ্যালুতে সেট করুন।অন্যান্য ডাটাবেস কার্যকলাপের উপর প্রভাব কমানোর জন্য TTL ডিজাইন করা হয়েছে। TTL-এর কারণে করা ডিলিটগুলোকে কম অগ্রাধিকার দেওয়া হয়। TTL-এর কারণে হওয়া ডিলিট থেকে সৃষ্ট ট্র্যাফিকের আকস্মিক বৃদ্ধি সামাল দেওয়ার জন্য অন্যান্য কৌশলও রয়েছে।
TTL ফিল্ড এবং নন-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 আইডেন্টিটি অ্যান্ড অ্যাক্সেস ম্যানেজমেন্ট রোলস দেখুন।
শুরু করার আগে
gcloud CLI ব্যবহার করে TTL ইনডেক্স পরিচালনা করার আগে, কম্পোনেন্টগুলোকে সর্বশেষ উপলব্ধ সংস্করণে আপডেট করতে gcloud components update কমান্ডটি ব্যবহার করুন:
gcloud components update
একটি TTL সূচক তৈরি করুন
যখন আপনি একটি TTL ইনডেক্স তৈরি করেন, তখন আপনি একটি কালেকশনের ডকুমেন্টগুলোর মেয়াদ শেষ হওয়ার সময় হিসেবে একটি ডকুমেন্ট ফিল্ডকে নির্ধারণ করে দেন।
TTL একটি নির্দিষ্ট ফিল্ড ব্যবহার করে সেইসব ডকুমেন্ট শনাক্ত করে যেগুলো মুছে ফেলার যোগ্য। TTL ফিল্ডটিকে অবশ্যই একটি Timestamp / BSON Date ভ্যালু অথবা একটি Timestamp / BSON Date ভ্যালু ধারণকারী একটি Array ভ্যালুতে সেট করতে হবে। আপনি আগে থেকে বিদ্যমান কোনো ফিল্ড নির্বাচন করতে পারেন অথবা এমন একটি ফিল্ড নির্দিষ্ট করতে পারেন যা আপনি পরে যোগ করার পরিকল্পনা করছেন।
TTL ফিল্ডের মান সেট করার আগে নিম্নলিখিত বিষয়গুলো বিবেচনা করুন:
TTL ফিল্ডের মান ভবিষ্যতের, বর্তমানের বা অতীতের কোনো সময় হতে পারে। যদি মানটি অতীতের কোনো সময় হয়, তবে ডকুমেন্টটি অবিলম্বে মুছে ফেলার যোগ্য হয়ে যায়। উদাহরণস্বরূপ, আপনি
expireAtফিল্ডটি দিয়ে একটি TTL ইনডেক্স তৈরি করতে পারেন, যা আপনি পরবর্তীতে বিদ্যমান ডকুমেন্টগুলোতে যোগ করবেন।অন্য কোনো ডেটা টাইপ ব্যবহার করলে অথবা TTL ফিল্ডের মান সেট না করলে, নির্দিষ্ট ডকুমেন্টটির জন্য TTL নিষ্ক্রিয় হয়ে যাবে।
একটি TTL ইনডেক্স তৈরি করতে, এই ধাপগুলো অনুসরণ করুন:
MongoDB API
createIndex() মেথড কল করার সময় expireAfterSeconds ইনডেক্স অপশনটি অন্তর্ভুক্ত করুন:
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মেথড নামটি ব্যবহৃত হয়।
গুগল ক্লাউড কনসোল
গুগল ক্লাউড কনসোলে, ডেটাবেস পৃষ্ঠায় যান।
ডাটাবেসের তালিকা থেকে প্রয়োজনীয় ডাটাবেসটি নির্বাচন করুন।
নেভিগেশন মেনুতে, টাইম-টু-লিভ-এ ক্লিক করুন।
পলিসি তৈরি করুন -এ ক্লিক করুন।
একটি সংগ্রহের নাম এবং একটি টাইমস্ট্যাম্প ফিল্ডের নাম লিখুন।
তৈরি করুন- এ ক্লিক করুন।
কনসোলটি টাইম-টু-লিভ পেজে ফিরে আসে। অপারেশনটি সফলভাবে শুরু হলে, পেজটি টিটিএল ইনডেক্স টেবিলে একটি এন্ট্রি যোগ করে। ব্যর্থ হলে, পেজটি একটি ত্রুটির বার্তা প্রদর্শন করে।
জিক্লাউড
একটি TTL ইনডেক্স কনফিগার করতে `
firestore fields ttls updateকমান্ডটি ব্যবহার করুন। অপারেশনটি সম্পূর্ণ হওয়ার জন্য gcloud CLI অপেক্ষা করা থেকে বিরত রাখতে `--asyncফ্ল্যাগটি যোগ করুন।gcloud firestore fields ttls update ttl_field --collection-group=collection_name --enable-ttl
TTL সূচক তৈরির সময়কাল
এমনকি একটি খালি ডেটাবেসেও টিটিএল ইনডেক্স তৈরি করতে দশ মিনিট বা তার বেশি সময় লাগতে পারে। একবার কোনো অপারেশন শুরু করলে, টার্মিনাল বন্ধ করলেও অপারেশনটি বাতিল হয় না।
TTL সূচকগুলি দেখুন
TTL ইনডেক্সগুলো দেখতে, এই ধাপগুলো অনুসরণ করুন:
MongoDB API
TTL ইনডেক্সগুলো দেখতে listIndexes() মেথডটি ব্যবহার করুন। উদাহরণস্বরূপ:
db.restaurants.listIndexes()
উল্লেখ্য যে, আউটপুটে TTL ইনডেক্স এবং নন-TTL ইনডেক্স উভয়ই অন্তর্ভুক্ত থাকবে। TTL ইনডেক্সগুলোতে expireAfterSeconds অপশনটি অন্তর্ভুক্ত থাকবে।
গুগল ক্লাউড কনসোল
গুগল ক্লাউড কনসোলে, ডেটাবেস পৃষ্ঠায় যান।
ডাটাবেসের তালিকা থেকে প্রয়োজনীয় ডাটাবেসটি নির্বাচন করুন।
নেভিগেশন মেনুতে, টাইম-টু-লিভ-এ ক্লিক করুন।
কনসোলটি আপনার ডাটাবেসের TTL ইনডেক্সগুলো এবং প্রতিটি ইনডেক্সের স্ট্যাটাস তালিকাভুক্ত করে।
জিক্লাউড
একটি 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 মেথড নামটি ব্যবহৃত হয়।
গুগল ক্লাউড কনসোল
গুগল ক্লাউড কনসোলে, ডেটাবেস পৃষ্ঠায় যান।
ডাটাবেসের তালিকা থেকে প্রয়োজনীয় ডাটাবেসটি নির্বাচন করুন।
নেভিগেশন মেনুতে, টাইম-টু-লিভ-এ ক্লিক করুন।
TTL ইনডেক্স টেবিলে, TTL ইনডেক্সের সারিটি খুঁজুন। এই টেবিলের সারির মধ্যে, ডিলিট (ট্র্যাশক্যান) বোতামে ক্লিক করুন।
ডিলিট- এ ক্লিক করে নিশ্চিত করুন।
কনসোলটি টাইম-টু-লিভ পেজে ফিরে আসে। সফল হলে, Cloud Firestore টেবিল থেকে টিটিএল ইনডেক্সটি মুছে ফেলে।
জিক্লাউড
একটি TTL ইনডেক্স কনফিগার করতে `
firestore fields ttls updateকমান্ডটি ব্যবহার করুন। অপারেশনটি সম্পূর্ণ হওয়ার জন্য gcloud CLI অপেক্ষা করা থেকে বিরত রাখতে `--asyncফ্ল্যাগটি যোগ করুন।gcloud firestore fields ttls update ttl_field --collection-group=collection_name --disable-ttl
TTL মুছে ফেলা নিরীক্ষণ করুন
আপনি TTL-চালিত ডিলিট সংক্রান্ত মেট্রিক্স দেখতে Cloud Monitoring ব্যবহার করতে পারেন। Cloud Firestore TTL-এর জন্য নিম্নলিখিত মেট্রিক্স প্রদান করে:
| মেট্রিক প্রকার | মেট্রিক নাম | মেট্রিক বর্ণনা |
|---|---|---|
| firestore.googleapis.com/document/ttl_deletion_count | বেঁচে থাকার সময় মুছে ফেলার সংখ্যা | TTL ইনডেক্স দ্বারা মুছে ফেলা ডকুমেন্টের মোট সংখ্যা। |
| firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | মেয়াদ শেষ হওয়া থেকে মুছে ফেলার বিলম্ব | একটি TTL ইনডেক্সের অধীনে কোনো ডকুমেন্টের মেয়াদ শেষ হওয়ার পর থেকে সেটি প্রকৃতপক্ষে মুছে ফেলা পর্যন্ত অতিবাহিত সময়। |
Cloud Firestore মেট্রিক্স সহ একটি ড্যাশবোর্ড সেট আপ করতে, 'কাস্টম ড্যাশবোর্ড পরিচালনা করুন' এবং 'ড্যাশবোর্ড উইজেট যোগ করুন' দেখুন।