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

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

ภาพรวม Time to Live (TTL)

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

ราคา

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

ข้อจำกัด

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

การลบ 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 จะเรียกใช้เครื่องมือฟังข้อมูลสแนปชอตที่ใช้งานอยู่ทั้งหมด และทริกเกอร์Cloud Functions Cloud Firestore

ฟิลด์และดัชนี TTL

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

โดยค่าเริ่มต้น Cloud Firestore Standard Edition จะสร้างดัชนีแบบฟิลด์เดียวสำหรับทุกฟิลด์ คุณสามารถสร้างข้อยกเว้นดัชนีแบบฟิลด์เดียว เพื่อปิดใช้ดัชนีในฟิลด์ 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 ใช้ฟิลด์ที่ระบุเพื่อระบุเอกสารที่มีสิทธิ์ลบ สำหรับฐานข้อมูลรุ่นมาตรฐาน ต้องตั้งค่าช่อง 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. คลิก Create Policy

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

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

  7. คลิกสร้าง

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

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

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays การหมดอายุของ Time-to-live จนถึงความล่าช้าในการลบ

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

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