หน้านี้อธิบายวิธีใช้ MongoDB API, คอนโซล Google Cloud และ Google Cloud CLI เพื่อกำหนดค่าดัชนี Time to Live (TTL)
ภาพรวมของ Time to Live
ใช้ดัชนี TTL เพื่อนำข้อมูลที่ล้าสมัยออกจากฐานข้อมูลโดยอัตโนมัติ ดัชนี TTL จะกำหนดฟิลด์ที่ระบุเป็นเวลาหมดอายุของเอกสารในคอลเล็กชันที่ระบุ TTL ช่วยให้คุณลดค่าใช้จ่ายในการจัดเก็บข้อมูลได้ด้วยการล้างข้อมูลที่ล้าสมัย โดยปกติแล้ว ระบบจะลบข้อมูลภายใน 24 ชั่วโมงหลังจากเวลาหมดอายุ
ราคา
การดำเนินการลบ TTL ใช้หน่วยการลบที่มีการจัดการ ดูราคาได้ที่ Cloud Firestoreราคา Enterprise Edition.
ข้อจำกัดและข้อกำหนด
- คุณสร้างดัชนี 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 ไม่ได้ใช้ในระหว่างการวางแผนการค้นหาเพื่อเพิ่มประสิทธิภาพ ซึ่งแตกต่างจากดัชนี Firestore อื่นๆ หากต้องการปรับปรุงประสิทธิภาพการค้นหาในฟิลด์ที่ใช้กับ 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
สร้างดัชนี 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 ต้องมีฟิลด์เพียง 1 ฟิลด์
- ดัชนี TTL ไม่ได้ใช้ในการวางแผนการค้นหาและไม่ได้ปรับปรุงประสิทธิภาพการค้นหา
- คุณสร้างดัชนี TTL ได้เพียง 1 รายการต่อคอลเล็กชัน
- บันทึกการตรวจสอบสำหรับการสร้างดัชนี TTL ด้วย MongoDB API จะใช้ชื่อเมธอด
google.firestore.admin.v1.FirestoreAdmin.UpdateField
Google Cloud Console
ไปที่หน้าฐานข้อมูล ในคอนโซล Google Cloud
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิก Time to Live
คลิก 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
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิก Time to Live
คอนโซลจะแสดงรายการดัชนี 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
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิก Time to Live
ในตารางดัชนี 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 โปรดดู จัดการแดชบอร์ดที่กำหนดเอง และ เพิ่มวิดเจ็ตแดชบอร์ด