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

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

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

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

ราคา

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

ข้อจำกัด

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

การลบ 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บทบาท Identity and Access Management

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

ก่อนใช้ 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. ในเมนูการนำทาง ให้คลิก Time-to-live

  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 ให้ไปที่หน้าฐานข้อมูล

    ไปที่ Databases

  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 ให้ไปที่หน้าฐานข้อมูล

    ไปที่ Databases

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