หน้านี้อธิบายวิธีใช้ MongoDB API, คอนโซล Google Cloud และ 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 ต่างจากดัชนี 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 ต้องมีฟิลด์เดียวเท่านั้น
- ระบบจะไม่ใช้ดัชนี TTL ในการวางแผนการค้นหา และไม่ได้ปรับปรุงประสิทธิภาพของการค้นหา
- คุณสร้างดัชนี TTL ได้เพียง 1 รายการต่อคอลเล็กชัน
- บันทึกการตรวจสอบสำหรับการสร้างดัชนี TTL ด้วย MongoDB API จะใช้ชื่อเมธอด
google.firestore.admin.v1.FirestoreAdmin.UpdateField
Google Cloud Console
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิกTime-to-live
คลิก Create Policy
ป้อนชื่อคอลเล็กชันและชื่อฟิลด์การประทับเวลา
ไม่บังคับ: กำหนดค่าออฟเซ็ตการหมดอายุ ป้อนค่าและเลือก หน่วย (วัน ชั่วโมง นาที หรือวินาที) โดยค่าเริ่มต้น ออฟเซ็ต จะเป็น 0
คลิกสร้าง
คอนโซลจะกลับไปที่หน้า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 ที่มีการชดเชยการหมดอายุ ให้เพิ่มแฟล็ก
--expiration-offsetgcloud firestore fields ttls update \ ttl_field \ --collection-group=collection_name \ --enable-ttl \ --expiration-offset=expiration_offset
แทนที่ expiration_offset ด้วยระยะเวลา เช่น
7dเป็นเวลา 7 วัน หรือ24hเป็นเวลา 24 ชั่วโมง หากไม่ใส่แฟล็กนี้ ออฟเซ็ตการหมดอายุ จะมีค่าเริ่มต้นเป็น 0
ระยะเวลาการสร้างดัชนี 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) |
จำนวนเอกสารทั้งหมดที่ดัชนี TTL ลบ |
| firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | การหน่วงเวลาตั้งแต่ Time to Live (TTL) หมดอายุจนถึงการลบ |
เวลาที่ผ่านไปตั้งแต่เอกสารหมดอายุภายใต้ดัชนี TTL จนถึงเวลาที่ลบจริง |
หากต้องการตั้งค่าแดชบอร์ดที่มีเมตริก Cloud Firestore โปรดดู จัดการแดชบอร์ดที่กําหนดเองและ เพิ่มวิดเจ็ตแดชบอร์ด