ฉันถือว่าที่เก็บคีย์ - ค่านั้นใหญ่เกินไปที่จะวนซ้ำทุกคู่ kv เพื่อหาว่าอันไหนจะหมดอายุ ฉันยังสมมติว่าการเข้าถึงการอ่านแต่ละครั้งจะรีเฟรชเวลาประทับที่หมดอายุดังนั้นเฉพาะรายการที่ไม่ได้เข้าถึงในบางครั้งจะหมดอายุ
ความท้าทายคือการค้นหาระเบียนทั้งหมดที่สามารถหมดอายุได้อย่างมีประสิทธิภาพ (ทุกครั้งที่มีการล้างข้อมูล) แต่ยังรีเฟรชเวลาประทับบนการเข้าถึงการอ่านทุกครั้งได้อย่างมีประสิทธิภาพ (ดังนั้นเราต้องค้นหาคีย์ในโครงสร้างที่ใช้สำหรับการหมดอายุ)
ข้อเสนอของฉัน: กลุ่ม expiry_timestamps เป็นที่เก็บข้อมูล; ตัวอย่างเช่นหากรายการมีชีวิตอยู่เป็นเวลา 8 ชั่วโมงให้สร้างที่เก็บข้อมูลหนึ่งถังต่อชั่วโมง ถังเหล่านั้นจะถูกเก็บไว้ในรายการที่เชื่อมโยง; เมื่อหมดอายุเกิดขึ้นฝากข้อมูลแรกจะถูกลบและรายการจะลดลง จำนวนของที่เก็บข้อมูลคือช่วงอายุ / การล้างข้อมูล ที่ฝากข้อมูลแต่ละชุดประกอบด้วย hashSet ของคีย์ทั้งหมดที่ควรจะหมดอายุ การวนซ้ำของปุ่มทั้งหมดใน hashset นั้นมีประสิทธิภาพเพียงพอ
ในระหว่างการเข้าถึงการอ่านโปรแกรมจะตรวจสอบว่าที่ฝากข้อมูลรหัสใดอยู่ในปัจจุบันและที่ฝากข้อมูลที่อยู่ในขณะนี้ ในกรณีส่วนใหญ่เป็นที่เก็บข้อมูลเดียวกันดังนั้นจึงไม่จำเป็นต้องดำเนินการใด ๆ เพิ่มเติม มิฉะนั้นให้เอากุญแจออกจากที่เก็บข้อมูลอันเก่า (การลบออกจากชุดแฮชนั้นมีประสิทธิภาพ) และใส่ลงในที่ฝากข้อมูลใหม่
+--------------+ +--------------+ +--------------+
-->+ Expiry 08:00 +-->+ Expiry 09:00 +-->+ Expiry 10:00 +
| KeySet | | KeySet | | KeySet |
+--------------+ +--------------+ +--------------+