หน้านี้อธิบายวิธีใช้คอนโซล Google Cloud และ Google Cloud CLI เพื่อกำหนดค่านโยบาย Time to Live (TTL) ก่อนอ่านหน้านี้ คุณควรทำความเข้าใจ Cloud Firestoreโมเดลข้อมูล
ภาพรวมของ Time to Live
ใช้นโยบาย TTL เพื่อนำข้อมูลที่ล้าสมัยออกจากฐานข้อมูลโดยอัตโนมัติ นโยบาย TTL จะกำหนดให้ฟิลด์หนึ่งๆ เป็นเวลาหมดอายุของเอกสารในกลุ่มคอลเล็กชันที่ระบุ TTL ช่วยให้คุณลดค่าใช้จ่ายในการจัดเก็บได้ด้วยการล้างข้อมูลที่ล้าสมัย โดยปกติระบบจะลบข้อมูลภายใน 24 ชั่วโมงหลังจากวันที่หมดอายุ
ราคา
การดำเนินการลบด้วย TTL จะนับรวมกับค่าใช้จ่ายในการลบเอกสาร โปรดดูราคาของการดำเนินการลบที่ Cloud Firestore ราคา
ข้อจำกัดและข้อกำหนด
- คุณสามารถทำเครื่องหมายฟิลด์เป็นฟิลด์ TTL ได้เพียงฟิลด์เดียวต่อกลุ่มคอลเล็กชัน
- คุณกำหนดค่าระดับฟิลด์ได้สูงสุด 1,000 รายการ การกำหนดค่าฟิลด์ 1 รายการสามารถมีการกำหนดค่าหลายรายการสำหรับฟิลด์เดียวกัน เช่น การยกเว้นการทำดัชนีฟิลด์เดียวและนโยบาย TTL ในฟิลด์เดียวกันจะนับเป็นการกำหนดค่าฟิลด์ 1 รายการตามขีดจำกัด
- สำหรับลูกค้าที่ใช้ Firestore ในโหมด Datastore จะไม่สามารถใช้ TTL กับโหมดการทำงานพร้อมกันแบบ Optimistic With Entity Groups โปรดพิจารณาเปลี่ยนโหมดการทำงานพร้อมกันเป็นโหมดการทำงานพร้อมกันแบบ Optimistic
การลบด้วย TTL
โปรดทราบลักษณะการทำงานที่สำคัญของการลบด้วย TTL ดังนี้
การลบผ่าน TTL ไม่ใช่กระบวนการที่เกิดขึ้นทันที เอกสารที่หมดอายุแล้วจะยังคงปรากฏในการค้นหาและคำขอการค้นหาจนกว่ากระบวนการ TTL จะลบเอกสารเหล่านั้นออกจริงๆ TTL จะแลกเปลี่ยนความทันเวลาในการลบกับประโยชน์ของการลดต้นทุนรวมในการเป็นเจ้าของสำหรับการลบ โดยปกติระบบจะลบข้อมูลภายใน 24 ชั่วโมงหลังจากวันที่หมดอายุ
การลบเอกสารผ่าน TTL จะไม่ลบคอลเล็กชันย่อยภายใต้เอกสารนั้น
การใช้นโยบาย TTL กับกลุ่มคอลเล็กชันที่มีอยู่จะส่งผลให้มีการลบข้อมูลที่หมดอายุทั้งหมดแบบเป็นกลุ่มตามนโยบาย TTL ใหม่ โปรดทราบว่าการลบแบบเป็นกลุ่มนี้ไม่ได้เกิดขึ้นทันทีและขึ้นอยู่กับปริมาณข้อมูลที่มีสำหรับกลุ่มคอลเล็กชันนั้น
หากเอกสารมีเวลาหมดอายุในอดีตและคุณเพิ่มนโยบาย TTL ใหม่ลงในคอลเล็กชัน ระบบจะลบเอกสารภายใน 24 ชั่วโมงหลังจากที่นโยบาย TTL ตั้งค่าเสร็จสมบูรณ์และใช้งานได้
TTL ไม่จำเป็นต้องลบเอกสารตามลำดับเดียวกับที่ประทับเวลาหมดอายุ
การลบไม่ได้ดำเนินการแบบธุรกรรม เอกสารที่มีเวลาหมดอายุเดียวกันอาจไม่ได้ถูกลบในเวลาเดียวกัน หากต้องการให้เป็นเช่นนั้น ให้ลบโดยใช้ไลบรารีของไคลเอ็นต์
Cloud Firestore จะใช้ฟิลด์ TTL ล่าสุดเสมอเพื่อกำหนด การหมดอายุ เช่น หากเอกสารที่หมดอายุแล้วแต่ยังไม่ได้ลบมีการอัปเดตฟิลด์ TTL เป็นวันที่ในอนาคต เอกสารจะไม่หมดอายุและระบบจะใช้วันที่ใหม่
Cloud Firestore จะทำให้เอกสารหมดอายุเมื่อตั้งค่าฟิลด์ TTL เป็น ค่าประเภทใดประเภทหนึ่งต่อไปนี้เท่านั้น สำหรับฐานข้อมูลรุ่น Standard ฟิลด์ต้องตั้งค่าเป็น ค่า
Date and timeสำหรับฐานข้อมูลรุ่น Enterprise ฟิลด์ต้อง ตั้งค่าเป็นค่าDate and timeหรือค่าArrayที่มีค่าDate and timeการปล่อยให้ฟิลด์ว่างไว้หรือตั้งค่าเป็นค่า เช่นnullจะช่วยให้ปิดใช้การหมดอายุได้ทีละเอกสารTTL ได้รับการออกแบบมาเพื่อลดผลกระทบต่อกิจกรรมอื่นๆ ของฐานข้อมูล การลบที่เกิดจาก TTL จะได้รับการปฏิบัติด้วยลำดับความสำคัญที่ต่ำกว่า นอกจากนี้ เรายังมีกลยุทธ์อื่นๆ เพื่อลดความผันผวนของการเข้าชมที่เกิดจากการลบด้วย TTL
การลบผ่าน TTL จะเรียก Listener ของสแนปชอตที่ใช้งานอยู่ทั้งหมด และทริกเกอร์ Cloud Functions Cloud Firestore ทริกเกอร์
ฟิลด์และดัชนี TTL
ฟิลด์ TTL สามารถทำดัชนีหรือไม่ทำดัชนีก็ได้ อย่างไรก็ตาม เนื่องจากฟิลด์ TTL เป็นการประทับเวลา การทำดัชนีฟิลด์จึงอาจส่งผลต่อประสิทธิภาพการทำงานที่อัตราการเข้าชมสูงขึ้น การทำดัชนีฟิลด์การประทับเวลาอาจสร้าง ฮอตสปอตซึ่งขัดต่อแนวทางปฏิบัติแนะนำ ฮอตสปอตคืออัตราการอ่าน เขียน และลบสูงในช่วงเอกสารที่แคบ
โดยค่าเริ่มต้น Cloud Firestore รุ่น Standard จะสร้างดัชนีฟิลด์เดียวสำหรับทุกฟิลด์ คุณสามารถ สร้างการยกเว้นดัชนีฟิลด์เดียว เพื่อปิดใช้ดัชนีในฟิลด์ 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 จะใช้ฟิลด์ที่ระบุเพื่อระบุเอกสารที่มีสิทธิ์ถูกลบ
สำหรับฐานข้อมูลรุ่น Standard ฟิลด์ TTL ต้องตั้งค่าเป็นค่า Date and time
สำหรับฐานข้อมูลรุ่น Enterprise ฟิลด์ต้องตั้งค่าเป็นค่า Date and time หรือค่า Array
ที่มีค่า Date and time คุณสามารถเลือกฟิลด์ที่มีอยู่แล้วหรือกำหนดฟิลด์ที่จะเพิ่มในภายหลังก็ได้
โปรดพิจารณาสิ่งต่อไปนี้ก่อนตั้งค่าฟิลด์ TTL
ค่าฟิลด์ TTL อาจเป็นเวลาในอนาคต ปัจจุบัน หรืออดีต หากค่าเป็นเวลาในอดีต เอกสารจะมีสิทธิ์ถูกลบทันที เช่น คุณอาจสร้างนโยบาย TTL ที่มีฟิลด์
expireAtซึ่งคุณจะเพิ่มลงในเอกสารที่มีอยู่การใช้ข้อมูลประเภทอื่นหรือไม่ได้ตั้งค่าฟิลด์ TTL จะปิดใช้ TTL สำหรับเอกสารแต่ละรายการ
หากต้องการสร้างนโยบาย TTL ให้ทำตามขั้นตอนต่อไปนี้
Google Cloud Console
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
คลิก Time to Live ในเมนูการนำทาง
คลิกสร้างนโยบาย
ป้อนชื่อกลุ่มคอลเล็กชันและชื่อฟิลด์การประทับเวลา
ไม่บังคับ: กำหนดค่าออฟเซ็ตการหมดอายุ ป้อนค่าและเลือกหน่วย (วัน ชั่วโมง นาที หรือวินาที) โดยค่าเริ่มต้น ออฟเซ็ตจะเป็น 0
คลิกสร้าง
คอนโซลจะกลับไปที่หน้า Time to Live หากการดำเนินการเริ่มต้นสำเร็จ หน้าดังกล่าวจะเพิ่มรายการลงในตารางนโยบาย TTL หากไม่สำเร็จ หน้าดังกล่าวจะแสดงข้อความแสดงข้อผิดพลาด
gcloud
ใช้คำสั่ง firestore fields ttls
update
เพื่อกำหนดค่านโยบาย TTL เพิ่มแฟล็ก --async เพื่อป้องกันไม่ให้
gcloud CLI รอให้การดำเนินการเสร็จสมบูรณ์
gcloud firestore fields ttls update
ttl_field
--collection-group=collection_group_name
--enable-ttl
หากต้องการเปิดใช้ TTL ที่มีออฟเซ็ตการหมดอายุ ให้เพิ่มแฟล็ก
--expiration-offset ดังนี้
gcloud firestore fields ttls update
ttl_field
--collection-group=collection_group_name
--enable-ttl
--expiration-offset=expiration_offset
แทนที่ expiration_offset ด้วยระยะเวลา เช่น 7d
สำหรับ 7 วัน หรือ 24h สำหรับ 24 ชั่วโมง หากไม่ใส่แฟล็กนี้ ออฟเซ็ตการหมดอายุ
จะเป็น 0 โดยค่าเริ่มต้น
ระยะเวลาการเปิดใช้นโยบาย TTL
การเปิดใช้นโยบาย TTL อาจใช้เวลาอย่างน้อย 10 นาทีหรือนานกว่านั้น เมื่อเริ่มการดำเนินการแล้ว การปิดเทอร์มินัลจะไม่ยกเลิกการดำเนินการ
ดูนโยบาย TTL
หากต้องการดูนโยบาย TTL และสถานะของนโยบาย ให้ทำตามขั้นตอนต่อไปนี้
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_group_name
ดูรายละเอียดการดำเนินการ
คุณสามารถใช้ gcloud CLI เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับนโยบาย TTL ที่มีสถานะ CREATING
ใช้คำสั่ง operations list เพื่อดูการดำเนินการทั้งหมดที่กำลังทำงานอยู่และ
เพิ่งเสร็จสมบูรณ์
gcloud firestore operations list
การตอบกลับจะรวมถึงการประมาณความคืบหน้าของการดำเนินการ
ปิดใช้นโยบาย TTL
หากต้องการปิดใช้นโยบาย TTL ให้ทำตามขั้นตอนต่อไปนี้
Google Cloud Console
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
คลิก Time to Live ในเมนูการนำทาง
ในตารางนโยบาย TTL ให้ค้นหาแถวของนโยบาย TTL ภายในแถวของตารางนี้ ให้คลิกปุ่มลบ (ถังขยะ)
ยืนยันโดยคลิกลบ
คอนโซลจะกลับไปที่หน้า Time to Live หากสำเร็จ Cloud Firestore จะนำนโยบาย TTL ออกจากตาราง
gcloud
1. ใช้คำสั่ง
firestore fields ttls update
เพื่อกำหนดค่านโยบาย TTL เพิ่มแฟล็ก --async เพื่อป้องกันไม่ให้
gcloud CLI รอให้การดำเนินการเสร็จสมบูรณ์
gcloud firestore fields ttls update ttl_field --collection-group=collection_group_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 โปรดดู หัวข้อจัดการแดชบอร์ดที่กำหนดเอง และ เพิ่มวิดเจ็ตแดชบอร์ด