หน้านี้อธิบายวิธีใช้ 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
ดูบทบาทที่มอบหมายสิทธิ์เหล่านี้ได้ที่บทบาท Identity and Access Management ของ Cloud Firestore
สร้างดัชนี 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
ป้อนชื่อคอลเล็กชันและชื่อฟิลด์การประทับเวลา
ไม่บังคับ: กำหนดค่าออฟเซ็ตการหมดอายุ ป้อนค่าและเลือกหน่วย (วัน ชั่วโมง นาที หรือวินาที) โดยค่าเริ่มต้น ออฟเซ็ตจะเป็น 0
คลิกสร้าง
คอนโซลจะกลับไปที่หน้าระยะเวลาที่ใช้งานได้ หากการดำเนินการเริ่มต้นสำเร็จ หน้าเว็บจะเพิ่มรายการลงในตารางดัชนี 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-offsetดังนี้gcloud 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 ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิกระยะเวลาที่ใช้งานได้
คอนโซลจะแสดงดัชนี 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 ในแถวตารางนี้ ให้คลิกปุ่มลบ (ถังขยะ)
คลิกลบเพื่อยืนยัน
คอนโซลจะกลับไปที่หน้าระยะเวลาที่ใช้งานได้ เมื่อดำเนินการสำเร็จ 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 | จำนวนการลบตามระยะเวลาที่เก็บข้อมูล |
จำนวนเอกสารทั้งหมดที่ลบโดยดัชนี TTL |
| firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | ความล่าช้าในการลบเมื่อหมดอายุของ TTL |
เวลาที่ผ่านไประหว่างที่เอกสารหมดอายุภายใต้ดัชนี TTL และเวลาที่เอกสารถูกลบจริง |
หากต้องการตั้งค่าแดชบอร์ดที่มีเมตริก Cloud Firestore โปรดดูหัวข้อจัดการแดชบอร์ดที่กำหนดเองและเพิ่มวิดเจ็ตแดชบอร์ด