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

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

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

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

ราคา

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

ข้อจำกัด

  • คุณสามารถทําเครื่องหมายฟิลด์ได้เพียง 1 ฟิลด์ต่อกลุ่มคอลเล็กชันเป็นฟิลด์ TTL
  • อนุญาตการกําหนดค่าระดับช่องได้ทั้งหมด 200 รายการ การกำหนดค่าช่อง 1 รายการอาจมีการกำหนดค่าหลายรายการสำหรับช่องเดียวกัน เช่น การยกเว้นการจัดทำดัชนีช่องเดียวและนโยบาย TTL ในช่องเดียวกันจะนับเป็นการกำหนดค่าช่อง 1 ช่องตามขีดจํากัด
  • สำหรับลูกค้า Firestore ในโหมด Datastore จะใช้ TTL กับโหมดการทำงานพร้อมกันแบบ Optimistic With Entity Groups ไม่ได้ ลองเปลี่ยนโหมดการเกิดขึ้นพร้อมกันเป็นโหมดการเกิดขึ้นพร้อมกันแบบมองโลกในแง่ดี

การลบ TTL

โปรดทราบลักษณะการทํางานที่สําคัญต่อไปนี้ของการลบตาม TTL

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

  • การลบเอกสารผ่าน TTL จะไม่ลบคอลเล็กชันย่อยในเอกสารนั้น

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

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

  • TTL ไม่จำเป็นต้องลบเอกสารตามลำดับเดียวกับการประทับเวลาหมดอายุ

  • การลบจะไม่ทำแบบธุรกรรม เอกสารที่มีวันหมดอายุเดียวกันไม่จำเป็นต้องถูกลบพร้อมกัน หากต้องการลักษณะการทำงานนี้ ให้ดำเนินการลบโดยใช้ไลบรารีไคลเอ็นต์

  • Cloud Firestore จะยึดตามช่อง TTL ล่าสุดเสมอเพื่อกำหนดเวลาหมดอายุ เช่น หากเอกสารที่หมดอายุแล้วแต่ยังไม่ได้ลบมีการอัปเดตช่อง TTL เป็นวันที่ที่ใหม่กว่า เอกสารจะไม่หมดอายุและระบบจะใช้วันที่ใหม่

  • TTL ออกแบบมาเพื่อลดผลกระทบต่อกิจกรรมอื่นๆ ในฐานข้อมูล การลบที่เกิดจาก TTL จะมีลำดับความสำคัญต่ำกว่า นอกจากนี้ เรายังมีกลยุทธ์อื่นๆ ในการทำให้การเข้าชมที่เพิ่มขึ้นจากการลบตาม TTL เป็นไปอย่างราบรื่น

  • การลบผ่าน TTL จะเรียก Listener ของสแนปชอตและทริกเกอร์ Cloud Functions Cloud Firestore ที่ใช้งานอยู่ทั้งหมด

ช่องและดัชนี TTL

ช่อง TTL สามารถจัดทำดัชนีหรือไม่จัดทำดัชนีก็ได้ อย่างไรก็ตาม เนื่องจากฟิลด์ TTL เป็นประทับเวลา การจัดทำดัชนีฟิลด์อาจส่งผลต่อประสิทธิภาพเมื่ออัตราการเข้าชมสูงขึ้น การจัดทําดัชนีช่องการประทับเวลาอาจสร้างจุดฮอตสปอต ซึ่งขัดต่อแนวทางปฏิบัติแนะนํา ฮอตสปอตคืออัตราการอ่าน เขียน และลบที่สูงในเอกสารช่วงแคบ

โดยค่าเริ่มต้น Cloud Firestore จะสร้างดัชนีช่องเดี่ยวสำหรับทุกช่อง คุณสามารถสร้างการยกเว้นดัชนีช่องเดียวเพื่อปิดใช้ดัชนีในช่อง TTL

สิทธิ์

ผู้ที่มีสิทธิ์กำหนดค่านโยบาย TTL ต้องมีสิทธิ์ต่อไปนี้ในโปรเจ็กต์

  • การดูนโยบาย TTL ต้องมีสิทธิ์ datastore.indexes.list และ datastore.indexes.get
  • การแก้ไขนโยบาย TTL ต้องมีสิทธิ์ datastore.indexes.update
  • การตรวจสอบสถานะการดำเนินการ TTL ต้องใช้ datastore.operations.list และ datastore.operations.get

ดูบทบาทที่มอบหมายสิทธิ์เหล่านี้ได้ที่Cloud Firestore บทบาทการจัดการข้อมูลประจำตัวและการเข้าถึง

ก่อนเริ่มต้น

ก่อนใช้ gcloud CLI เพื่อจัดการนโยบาย TTL ให้ใช้คำสั่ง gcloud components update เพื่ออัปเดตคอมโพเนนต์เป็นเวอร์ชันล่าสุดที่มีดังนี้

gcloud components update

สร้างนโยบาย TTL

เมื่อสร้างนโยบาย TTL จะเป็นการกําหนดช่องเอกสารเป็นเวลาหมดอายุของเอกสารในกลุ่มคอลเล็กชัน

TTL ใช้ฟิลด์ที่ระบุเพื่อระบุเอกสารที่มีสิทธิ์ลบ ฟิลด์ TTL นี้ต้องเป็นประเภท Date and time คุณสามารถเลือกช่องที่มีอยู่แล้ว หรือจะกำหนดช่องที่วางแผนจะเพิ่มในภายหลังก็ได้

โปรดพิจารณาสิ่งต่อไปนี้ก่อนตั้งค่าช่อง TTL

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

  • การใช้ประเภทข้อมูลอื่นหรือไม่ตั้งค่าช่อง TTL จะปิดใช้ TTL สำหรับเอกสารแต่ละรายการ

วิธีสร้างนโยบาย TTL มีดังนี้

Google Cloud Console

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

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

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

  3. คลิกอายุในเมนูการนำทาง

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

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

  6. คลิกสร้าง

คอนโซลจะกลับไปที่หน้า Time-to-live หากการดําเนินการเริ่มต้นสําเร็จ หน้าเว็บจะเพิ่มรายการลงในตารางนโยบาย TTL หากดำเนินการไม่สำเร็จ หน้าเว็บจะแสดงข้อความแสดงข้อผิดพลาด

gcloud

ใช้คำสั่ง firestore fields ttls update เพื่อกำหนดค่านโยบาย TTL เพิ่ม Flag --async เพื่อป้องกันไม่ให้ gcloud CLI รอให้การดำเนินการเสร็จสมบูรณ์

 gcloud firestore fields ttls update
  ttl_field --collection-group=collection_group_name
  --enable-ttl 

ระยะเวลาการเปิดใช้งานนโยบาย TTL

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

ดูนโยบาย TTL

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

Google Cloud Console

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

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

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

  3. คลิกอายุในเมนูการนำทาง

คอนโซลจะแสดงรายการนโยบาย 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. คลิกอายุในเมนูการนำทาง

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

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

คอนโซลจะกลับไปที่หน้า Time-to-live หากดำเนินการสำเร็จ Cloud Firestoreจะนำนโยบาย TTL ออกจากตาราง

gcloud

1. ใช้คำสั่ง firestore fields ttls update เพื่อกำหนดค่านโยบาย TTL เพิ่ม Flag --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 ระยะเวลาที่ข้อมูลจะหมดอายุจนกว่าจะลบ

เวลาที่ผ่านไประหว่างที่เอกสารหมดอายุภายใต้นโยบาย TTL กับเวลาที่ระบบลบเอกสารจริง

หากต้องการตั้งค่าแดชบอร์ดที่มีเมตริก Cloud Firestore โปรดดูหัวข้อจัดการแดชบอร์ดที่กำหนดเอง และเพิ่มวิดเจ็ตแดชบอร์ด