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

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

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

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

ราคา

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

ขีดจำกัดและข้อจำกัด

  • คุณทำเครื่องหมายได้เพียง 1 ฟิลด์ต่อกลุ่มคอลเล็กชันเป็นฟิลด์ TTL
  • คุณมีการกำหนดค่าระดับฟิลด์ได้สูงสุด 1,000 รายการ การกำหนดค่าช่อง 1 รายการอาจมีการกำหนดค่าหลายรายการสำหรับช่องเดียวกัน ตัวอย่างเช่น การยกเว้นการจัดทำดัชนีช่องเดียวและนโยบาย TTL ในช่องเดียวกันจะนับเป็นการกำหนดค่าช่องเดียวตามขีดจำกัด
  • สำหรับลูกค้า Firestore ในโหมด Datastore จะใช้ TTL กับโหมดการเกิดขึ้นพร้อมกันแบบการเกิดขึ้นพร้อมกันในกลุ่มเอนทิตีไม่ได้ ลองเปลี่ยนโหมดการเกิดขึ้นพร้อมกันเป็นโหมดการเกิดขึ้นพร้อมกันแบบ 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

ดูบทบาทที่มอบหมายสิทธิ์เหล่านี้ได้ที่บทบาท Identity and Access Management ของ Cloud Firestore

สร้างนโยบาย 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. ในเมนูการนำทาง ให้คลิกระยะเวลาที่ใช้งานได้

  4. คลิก Create Policy

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

  6. ไม่บังคับ: กำหนดค่าออฟเซ็ตการหมดอายุ ป้อนค่าและเลือกหน่วย (วัน ชั่วโมง นาที หรือวินาที) โดยค่าเริ่มต้น ออฟเซ็ตจะเป็น 0

  7. คลิกสร้าง

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

  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. คลิกลบเพื่อยืนยัน

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

จำนวนเอกสารทั้งหมดที่ลบโดยนโยบาย TTL

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays ความล่าช้าในการลบเมื่อหมดอายุตามระยะเวลาที่กำหนด

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

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