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

หน้านี้อธิบายวิธีใช้ MongoDB API, คอนโซล Google Cloud และ Google Cloud CLI เพื่อกำหนดค่าดัชนี Time to Live (TTL)

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

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

ราคา

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

ข้อจำกัด

  • คุณสร้างดัชนี TTL ได้เพียง 1 รายการต่อคอลเล็กชัน
  • คุณมีดัชนี TTL ได้สูงสุด 500 รายการ

การลบ TTL

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

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

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

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

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

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

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

  • Cloud Firestore จะทำให้เอกสารหมดอายุเมื่อตั้งค่าช่อง TTL เป็นค่า Date and time/BSON Date หรือค่า Array ที่มีค่า Date and time/BSON Date เท่านั้น เว้นว่างช่องนี้ไว้หรือตั้งค่าเป็นค่า เช่น null เพื่อปิดใช้การหมดอายุในระดับเอกสาร

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

ความแตกต่างกับดัชนี TTL

ดัชนี TTL จะไม่ใช้ในระหว่างการวางแผนการค้นหาเพื่อเพิ่มประสิทธิภาพ ซึ่งต่างจากดัชนี Firestore อื่นๆ หากต้องการปรับปรุงประสิทธิภาพการค้นหาในฟิลด์ที่ใช้กับ TTL คุณต้องเพิ่มฟิลด์ดังกล่าวลงในดัชนีที่ไม่ใช่ TTL แยกต่างหาก

โปรดทราบว่าเนื่องจากฟิลด์ TTL ใช้การประทับเวลา การเพิ่มฟิลด์เหล่านี้ลงในดัชนีที่ไม่ใช่ 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 เป็นค่า Timestamp/BSON Date หรือค่า Array ที่มีค่า Timestamp/BSON Date คุณเลือกฟิลด์ที่มีอยู่แล้วหรือกำหนดฟิลด์ที่วางแผนจะเพิ่มในภายหลังได้

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

  • ค่าในช่อง TTL อาจเป็นเวลาในอนาคต ปัจจุบัน หรือในอดีต หากค่าเป็นเวลา ในอดีต เอกสารจะมีสิทธิ์ถูกลบทันที เช่น คุณอาจสร้างดัชนี TTL ที่มีฟิลด์ expireAt ซึ่งคุณจะเพิ่มลงในเอกสารที่มีอยู่

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

หากต้องการสร้างดัชนี TTL ให้ทำตามขั้นตอนต่อไปนี้

MongoDB API

ใส่expireAfterSecondsตัวเลือกดัชนีเมื่อเรียกใช้เมธอด createIndex()

db.COLLECTION_NAME.createIndex({"TTL_FIELD": 1, "expireAfterSeconds": EXPIRATION_OFFSET_SECONDS})

เช่น

db.restaurants.createIndex({"ts": 1, "expireAfterSeconds": 3600})

expireAfterSeconds ระบุ TTL เป็นดัชนี TTL และเป็นออฟเซ็ตระหว่างค่าการประทับเวลาจากฟิลด์ TTL และเวลาหมดอายุ หากตั้งค่า expireAfterSeconds เป็น 0 เวลาหมดอายุ จะกำหนดโดยค่าการประทับเวลาจากช่อง TTL โดยตรง

โปรดทราบข้อจำกัดต่อไปนี้

  • ดัชนี TTL ต้องมีฟิลด์เพียงฟิลด์เดียว
  • ระบบจะไม่ใช้ดัชนี TTL ในการวางแผนการค้นหา และไม่ได้ปรับปรุงประสิทธิภาพของการค้นหา
  • คุณสร้างดัชนี TTL ได้เพียง 1 รายการต่อคอลเล็กชัน
  • บันทึกการตรวจสอบสำหรับการสร้างดัชนี TTL ด้วย MongoDB API จะใช้ชื่อเมธอด google.firestore.admin.v1.FirestoreAdmin.UpdateField

Google Cloud Console

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

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

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

  3. ในเมนูการนำทาง ให้คลิกTime-to-live

  4. คลิก Create Policy

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

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

  7. คลิกสร้าง

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

gcloud

  1. ติดตั้งและเริ่มต้น gcloud CLI CLI

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

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

    หากต้องการเปิดใช้ดัชนี TTL ที่มีการชดเชยการหมดอายุ ให้เพิ่มแฟล็ก --expiration-offset

     gcloud firestore fields ttls update \
      ttl_field \
      --collection-group=collection_name \
      --enable-ttl \
      --expiration-offset=expiration_offset 

    แทนที่ expiration_offset ด้วยระยะเวลา เช่น 7d เป็นเวลา 7 วัน หรือ 24h เป็นเวลา 24 ชั่วโมง หากไม่ใส่ Flag นี้ ค่าออฟเซ็ตการหมดอายุ จะเป็น 0 โดยค่าเริ่มต้น

ระยะเวลาในการสร้างดัชนี TTL

การสร้างดัชนี TTL อาจใช้เวลาอย่างน้อย 10 นาทีหรือนานกว่านั้น เมื่อ เริ่มการดำเนินการแล้ว การปิดเทอร์มินัลจะไม่ยกเลิกการดำเนินการ

ดูดัชนี TTL

หากต้องการดูดัชนี TTL ให้ทำตามขั้นตอนต่อไปนี้

MongoDB API

ใช้เมธอด listIndexes() เพื่อดูดัชนี TTL เช่น

db.restaurants.listIndexes()

โปรดทราบว่าเอาต์พุตจะมีทั้งดัชนี TTL และดัชนีที่ไม่ใช่ TTL ดัชนี TTL จะมีตัวเลือก expireAfterSeconds

Google Cloud Console

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

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

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

  3. ในเมนูการนำทาง ให้คลิกTime-to-live

คอนโซลจะแสดงดัชนี TTL สำหรับฐานข้อมูลและมี สถานะของดัชนีแต่ละรายการ

gcloud

  1. ติดตั้งและเริ่มต้น gcloud CLI CLI

  2. ใช้คำสั่ง firestore fields ttls list เพื่อกำหนดค่าดัชนี TTL คำสั่งต่อไปนี้จะแสดงรายการดัชนี TTL ทั้งหมด

    gcloud firestore fields ttls list
    

    หากต้องการแสดงดัชนี TTL ภายใต้คอลเล็กชันที่เฉพาะเจาะจง ให้ใช้คำสั่งต่อไปนี้

    gcloud firestore fields ttls list  --collection-group=collection_name
    

ดูรายละเอียดการดำเนินการ

คุณใช้ gcloud CLI เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับดัชนี TTL ที่อยู่ในสถานะ CREATING ได้

ใช้คำสั่ง operations list เพื่อดูการดำเนินการทั้งหมดที่กำลังทำงานอยู่และ การดำเนินการที่เพิ่งเสร็จสมบูรณ์

gcloud firestore operations list

การตอบกลับจะมีการประมาณความคืบหน้าของการดำเนินการ

วางดัชนี TTL

หากต้องการทิ้งดัชนี TTL ให้ทำตามขั้นตอนต่อไปนี้

MongoDB API

ใช้เมธอด dropIndex() เพื่อทิ้งดัชนี TTL เช่น

วางดัชนี TTL โดยใช้ชื่อดัชนี

db.restaurants.dropIndex("ts_1")

ทิ้งดัชนี TTL โดยใช้คำจำกัดความดัชนี

db.restaurants.dropIndex({"ts": 1})

โปรดทราบว่าบันทึกการตรวจสอบสำหรับการทิ้งดัชนี TTL ด้วย MongoDB API จะใช้ชื่อเมธอด google.firestore.admin.v1.FirestoreAdmin.UpdateField

Google Cloud Console

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

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

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

  3. ในเมนูการนำทาง ให้คลิกTime-to-live

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

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

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

gcloud

  1. ติดตั้งและเริ่มต้น gcloud CLI CLI

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

    gcloud firestore fields ttls update ttl_field --collection-group=collection_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) หมดอายุจนถึงการลบ

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

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