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

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

ภาพรวม Time to Live

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

ราคา

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

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

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

ช่องและดัชนี 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 Platform ให้ไปที่หน้าฐานข้อมูล

    ไปที่ Databases

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

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

    ไปที่ Databases

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