จัดการการเก็บรักษาข้อมูลด้วยนโยบาย TTL

หน้านี้อธิบายวิธีการใช้คอนโซล Google Cloud และ Google Cloud CLI เพื่อกำหนดค่านโยบาย Time to Live (TTL) ก่อนอ่านหน้านี้ คุณควรทำความเข้าใจ Cloud Firestoreโมเดลข้อมูล

ภาพรวมของ Time to Live

ใช้นโยบาย TTL เพื่อนำข้อมูลที่ล้าสมัยออกจากฐานข้อมูลโดยอัตโนมัติ นโยบาย TTL จะกำหนดช่องที่ระบุเป็นเวลาหมดอายุของเอกสารในกลุ่มคอลเล็กชันที่กำหนด TTL ช่วยให้คุณลดค่าใช้จ่ายในการจัดเก็บข้อมูลได้ด้วยการล้างข้อมูลที่ล้าสมัย โดยปกติระบบจะลบข้อมูลภายใน 24 ชั่วโมงหลังจากวันที่หมดอายุ

ราคา

การดำเนินการลบด้วย TTL จะนับรวมกับค่าใช้จ่ายในการลบเอกสาร โปรดดูราคาของการดำเนินการลบที่ Cloud Firestore ราคา

ข้อจำกัดและข้อกำหนด

  • คุณสามารถทำเครื่องหมายช่องเป็นช่อง TTL ได้เพียงช่องเดียวต่อกลุ่มคอลเล็กชัน
  • คุณสามารถกำหนดค่าระดับช่องได้สูงสุด 500 รายการ การกำหนดค่าช่อง 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

  1. ไปที่หน้าฐานข้อมูล ในคอนโซล Google Cloud

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล

  3. คลิก Time to Live ในเมนูการนำทาง

  4. คลิกสร้างนโยบาย

  5. ป้อนชื่อกลุ่มคอลเล็กชันและชื่อช่องการประทับเวลา

  6. คลิกสร้าง

คอนโซลจะกลับไปที่หน้า 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

การเปิดใช้นโยบาย TTL อาจใช้เวลาอย่างน้อย 10 นาทีหรือนานกว่านั้น เมื่อเริ่มการดำเนินการแล้ว การปิดเทอร์มินัลจะไม่ยกเลิกการดำเนินการ

ดูนโยบาย TTL

หากต้องการดูนโยบาย TTL และสถานะของนโยบาย ให้ทำตามขั้นตอนต่อไปนี้

Google Cloud Console

  1. ไปที่หน้าฐานข้อมูล ในคอนโซล Google Cloud

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล

  3. คลิก 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

  1. ไปที่หน้าฐานข้อมูล ในคอนโซล Google Cloud

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล

  3. คลิก Time to Live ในเมนูการนำทาง

  4. ในตารางนโยบาย TTL ให้ค้นหาแถวของนโยบาย TTL ภายในแถวของตารางนี้ ให้คลิกปุ่มลบ (ถังขยะ)

  5. ยืนยันโดยคลิกลบ

คอนโซลจะกลับไปที่หน้า 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 โปรดดู จัดการแดชบอร์ดที่กำหนดเอง และ เพิ่มวิดเจ็ตแดชบอร์ด