Anahtar / değer depolama alanının, hangisinin süresi dolabileceğini bulmak için tüm kv çiftleri üzerinde yineleme yapmak için çok büyük olduğunu varsayıyorum. Ayrıca, her bir okuma erişiminin süre sonu zaman damgasını yenilediğini varsayıyorum, bu nedenle yalnızca bir süredir erişilmeyen öğelerin süresi dolmuş.
Zorluk, süresi dolan tüm kayıtları etkin bir şekilde bulmaktır (temizleme zamanı geldiğinde), ancak her okuma erişimindeki süre sonu zaman damgasını da verimli bir şekilde yenilemektir (bu nedenle, süre sonu için kullanılan yapıdaki anahtarı bulmalıyız).
Benim önerim: expiry_timestamps grubunu gruplara yerleştirmek; örneğin, öğeler 8 saat yaşarsa, saatte bir kova yapın. Bu kovalar bağlantılı bir listede tutulur; son kullanma tarihi geldiğinde, ilk kova boşaltılır ve liste azaltılır. Kova sayısı kullanım ömrü / temizleme aralığıdır. Her bir kova, süresi dolması gereken tüm anahtarların bir karma kümesini içerir. Bir hashsetteki tüm tuşlar üzerinde yineleme yeterince etkilidir.
Okuma erişimi sırasında, program, anahtarın hangi grupta olduğunu ve şimdi hangi gruba ait olduğunu kontrol eder. Çoğu durumda, aynı kovadır, bu nedenle başka bir işlem yapılması gerekmez. Aksi takdirde, anahtarı eski kovadan çıkarın (bir karma kümesinden çıkarmak etkilidir) ve yeni kovaya takın.
+--------------+ +--------------+ +--------------+
-->+ Expiry 08:00 +-->+ Expiry 09:00 +-->+ Expiry 10:00 +
| KeySet | | KeySet | | KeySet |
+--------------+ +--------------+ +--------------+