หน้านี้อธิบายวิธีใช้ MongoDB API, Google Cloud Console และ Google Cloud CLI เพื่อกำหนดค่าดัชนี Time to Live (TTL)
ภาพรวม Time to Live
ใช้ดัชนี TTL เพื่อนำข้อมูลที่ล้าสมัยออกจากฐานข้อมูลโดยอัตโนมัติ ดัชนี TTL จะกำหนดฟิลด์ที่ระบุเป็นเวลาหมดอายุสำหรับเอกสารในคอลเล็กชันที่ระบุ TTL ช่วยให้คุณ ลดต้นทุนด้านพื้นที่เก็บข้อมูลได้ด้วยการล้างข้อมูลที่ล้าสมัย โดยปกติแล้ว ระบบจะลบข้อมูล ภายใน 24 ชั่วโมงหลังจากเวลาหมดอายุ
ราคา
การดำเนินการลบ TTL จะนับรวมในค่าใช้จ่ายในการลบเอกสาร โปรดดูCloud Firestoreราคาของรุ่น Enterprise สำหรับราคา ของการดำเนินการลบ
ข้อจำกัด
- คุณสร้างดัชนี TTL ได้เพียง 1 รายการต่อคอลเล็กชัน
- คุณมีดัชนี TTL ได้สูงสุด 500 รายการ
การลบ TTL
โปรดทราบลักษณะการทำงานที่สำคัญต่อไปนี้ของการลบที่กำหนดโดย TTL
การลบผ่าน TTL ไม่ใช่กระบวนการที่เกิดขึ้นทันที เอกสารที่หมดอายุแล้ว จะยังคงปรากฏในการค้นหาและคำขอค้นหาจนกว่ากระบวนการ TTL จะลบเอกสารเหล่านั้นออกจริงๆ TTL จะลบการซื้อขายตามเวลาเพื่อประโยชน์ของ การลดต้นทุนรวมในการเป็นเจ้าของสำหรับการลบ โดยปกติแล้ว ระบบจะลบข้อมูลภายใน 24 ชั่วโมงหลังจากเวลาหมดอายุ
การสร้างดัชนี TTL ในคอลเล็กชันที่มีอยู่จะส่งผลให้มีการลบข้อมูลที่หมดอายุทั้งหมดพร้อมกันตามดัชนี TTL ใหม่ โปรดทราบว่าการลบแบบเป็นกลุ่มนี้ก็ไม่ได้เกิดขึ้นทันทีเช่นกัน และขึ้นอยู่กับปริมาณข้อมูล ที่มีอยู่สำหรับการรวบรวมนั้น
หากเอกสารมีเวลาหมดอายุในอดีตและคุณเพิ่มดัชนี TTL ใหม่ ลงในคอลเล็กชัน ระบบจะลบเอกสารภายใน 24 ชั่วโมง หลังจากที่ดัชนี TTL ตั้งค่าเสร็จและใช้งานได้
TTL ไม่จำเป็นต้องลบเอกสารตามลำดับเดียวกับ การประทับเวลาหมดอายุ
การลบไม่ได้ดำเนินการแบบธุรกรรม ระบบอาจไม่ได้ลบเอกสารที่มีเวลาหมดอายุเดียวกันพร้อมกัน หากต้องการลักษณะการทำงานนี้ ให้ลบโดยใช้ไลบรารีของไคลเอ็นต์
Cloud Firestore จะใช้ฟิลด์ TTL ล่าสุดเสมอเพื่อกำหนด การหมดอายุ เช่น หากเอกสารที่หมดอายุแต่ยังไม่ได้ลบมีการอัปเดตฟิลด์ TTL เป็นวันที่ในภายหลัง เอกสารจะไม่หมดอายุและระบบจะใช้วันที่ใหม่
Cloud Firestore จะทำให้เอกสารหมดอายุเมื่อตั้งค่าช่อง TTL เป็นค่า
Date and time/BSON Dateหรือค่าArrayที่มีค่าDate and time/BSON Dateเท่านั้น เว้นว่างช่องนี้ไว้หรือตั้งค่าเป็นค่า เช่น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 บทบาท Identity and Access Management
ก่อนเริ่มต้น
ก่อนใช้ gcloud CLI เพื่อจัดการดัชนี TTL ให้ใช้คำสั่ง
gcloud components update
เพื่ออัปเดตคอมโพเนนต์เป็นเวอร์ชันล่าสุดที่พร้อมใช้งาน
gcloud components update
สร้างดัชนี TTL
เมื่อสร้างดัชนี TTL คุณจะกำหนดฟิลด์เอกสารเป็นเวลาหมดอายุ สำหรับเอกสารในคอลเล็กชัน
TTL จะใช้ฟิลด์ที่ระบุเพื่อระบุเอกสารที่มีสิทธิ์ลบ
ต้องตั้งค่าฟิลด์ TTL เป็นค่า Timestamp/BSON Date หรือค่า Array
ที่มีค่า Timestamp/BSON Date คุณสามารถเลือกฟิลด์ที่มีอยู่แล้ว หรือจะกำหนดฟิลด์ที่วางแผนจะเพิ่มในภายหลังก็ได้
โปรดพิจารณาสิ่งต่อไปนี้ก่อนตั้งค่าฟิลด์ TTL
ค่าของช่อง TTL อาจเป็นเวลาในอนาคต ปัจจุบัน หรือในอดีต หากค่าเป็นเวลา ในอดีต เอกสารจะมีสิทธิ์ถูกลบทันที เช่น คุณอาจสร้างดัชนี TTL ที่มีฟิลด์
expireAtซึ่งคุณจะเพิ่มลงใน เอกสารที่มีอยู่การใช้ข้อมูลประเภทอื่นหรือการไม่ตั้งค่าฟิลด์ 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 ได้เพียง 1 รายการต่อคอลเล็กชัน
- บันทึกการตรวจสอบสำหรับการสร้างดัชนี TTL ด้วย MongoDB API จะใช้ชื่อเมธอด
google.firestore.admin.v1.FirestoreAdmin.UpdateField
Google Cloud Console
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิกเวลาในการใช้งาน
คลิก Create Policy
ป้อนชื่อคอลเล็กชันและชื่อฟิลด์การประทับเวลา
คลิกสร้าง
คอนโซลจะกลับไปที่หน้าTime-to-live หากการดำเนินการเริ่มขึ้น สำเร็จ หน้าเว็บจะเพิ่มรายการลงในตารางดัชนี TTL หากไม่สำเร็จ หน้าเว็บจะแสดงข้อความแสดงข้อผิดพลาด
gcloud
ใช้คำสั่ง
firestore fields ttls updateเพื่อกำหนดค่าดัชนี TTL เพิ่มแฟล็ก--asyncเพื่อป้องกันไม่ให้ gcloud CLIรอให้การดำเนินการเสร็จสมบูรณ์gcloud firestore fields ttls update ttl_field --collection-group=collection_name --enable-ttl
ระยะเวลาในการสร้างดัชนี TTL
แม้จะเป็นฐานข้อมูลที่ว่างเปล่า การสร้างดัชนี TTL ก็อาจใช้เวลาอย่างน้อย 10 นาที เมื่อเริ่มการดำเนินการแล้ว การปิดเทอร์มินัลจะไม่ยกเลิกการดำเนินการ
ดูดัชนี TTL
หากต้องการดูดัชนี TTL ให้ทำตามขั้นตอนต่อไปนี้
MongoDB API
ใช้เมธอด listIndexes() เพื่อดูดัชนี TTL เช่น
db.restaurants.listIndexes()
โปรดทราบว่าเอาต์พุตจะมีทั้งดัชนี TTL และดัชนีที่ไม่ใช่ TTL ดัชนี TTL จะมีตัวเลือก expireAfterSeconds
Google Cloud Console
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิกเวลาในการใช้งาน
คอนโซลจะแสดงดัชนี TTL สำหรับฐานข้อมูลและมี สถานะของดัชนีแต่ละรายการ
gcloud
ใช้คำสั่ง
firestore fields ttls listเพื่อกำหนดค่าดัชนี TTL คำสั่งต่อไปนี้จะแสดงรายการดัชนี TTL ทั้งหมดgcloud firestore fields ttls list
หากต้องการแสดงดัชนี TTL ภายใต้คอลเล็กชันที่เฉพาะเจาะจง ให้ใช้คำสั่งต่อไปนี้
gcloud firestore fields ttls list --collection-group=collection_name
ดูรายละเอียดการดำเนินการ
คุณใช้ gcloud CLI เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับดัชนี TTL
ที่อยู่ในสถานะ CREATING ได้
ใช้คำสั่ง operations list เพื่อดูการดำเนินการทั้งหมดที่กำลังทำงานอยู่และ
การดำเนินการที่เพิ่งเสร็จสมบูรณ์
gcloud firestore operations list
การตอบกลับจะรวมค่าประมาณความคืบหน้าของการดำเนินการ
วางดัชนี TTL
หากต้องการทิ้งดัชนี TTL ให้ทำตามขั้นตอนต่อไปนี้
MongoDB API
ใช้เมธอด dropIndex() เพื่อทิ้งดัชนี TTL เช่น
วางดัชนี TTL โดยใช้ชื่อดัชนี
db.restaurants.dropIndex("ts_1")
ทิ้งดัชนี TTL โดยใช้คำจำกัดความดัชนี
db.restaurants.dropIndex({"ts": 1})
โปรดทราบว่าบันทึกการตรวจสอบสำหรับการทิ้งดัชนี TTL ด้วย MongoDB API จะใช้ชื่อเมธอด google.firestore.admin.v1.FirestoreAdmin.UpdateField
Google Cloud Console
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิกเวลาในการใช้งาน
ในตารางดัชนี TTL ให้ค้นหาแถวดัชนี TTL คลิกปุ่มลบ (ถังขยะ) ในแถวของตารางนี้
ยืนยันโดยคลิกลบ
คอนโซลจะกลับไปที่หน้าTime-to-live เมื่อสำเร็จแล้ว Cloud Firestore จะนำดัชนี TTL ออกจากตาราง
gcloud
ใช้คำสั่ง
firestore fields ttls updateเพื่อกำหนดค่าดัชนี TTL เพิ่มแฟล็ก--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 | จำนวนการลบ Time to Live |
จำนวนเอกสารทั้งหมดที่ดัชนี TTL ลบ |
| firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | การหมดอายุของ Time to Live จนถึงความล่าช้าในการลบ |
เวลาที่ผ่านไประหว่างที่เอกสารหมดอายุภายใต้ดัชนี TTL และเวลาที่ระบบลบเอกสารจริง |
หากต้องการตั้งค่าแดชบอร์ดที่มีเมตริก Cloud Firestore ให้ดู จัดการแดชบอร์ดที่กําหนดเองและ เพิ่มวิดเจ็ตแดชบอร์ด