循环时间窗口

时间:2012-01-12 16:50:04

标签: date round-robin

我正在寻找一个存储带时间戳的值的系统,并自动删除比特定时间窗口更早的那些。

类似于 RoundRobin 系统,但是,据我所知, RoundRobin 基于特定数量的记录并删除了旧的那些新的人即将到来。

在此系统中,可以任意数量的记录,只删除比特定时间更长的记录。

一个近似值可以是一个系统,其中每个记录都有一个超时,如:

console.append "key", { :value => "value1", :timeout => 10.minutes_in_the_future }
console.append "key", { :value => "value2", :timeout => 10.minutes_in_the_future }
console.append "key", { :value => "value3", :timeout => 10.minutes_in_the_future }

不知何故,系统负责删除任何过期的记录。

系统可以基于任何高性能存储系统(Redis,Memcache,...)

我不是在寻找一个完整的详细解释实现,只是某种灵感或任何相关文章或已有的系统,所以我不是重新发明轮子

1 个答案:

答案 0 :(得分:0)

Memcache aprox

在办公室,我们正在研究这个问题:

前提条件

  • 时间窗口 10分钟
  • 我们只需要知道记录的数量而不是值。
  • 我们可以使用不太准确的解决方案。

实施

  1. 每分钟创建一个新的密钥,例如:mykey_<Time.now.strftime("%Y%m%d%H%M")>
  2. 给他们过期时间 10分钟
  3. 每当我们想要添加记录时,我们incr 实际分钟的关键。
  4. 要计算时间窗口值,我们会在过去10分钟内获得 10键的值,将它们相加
  5. 缺点

    • 我们无法存储实际值,但只能累积
    • 当每个 1分钟密钥过期时,总值会突然波动