RoundRobin по временному окну - PullRequest
0 голосов
/ 12 января 2012

Я ищу систему, которая хранит метки времени и автоматически удаляет те, которые старше определенного временного окна .

Что-то вроде системы 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 голосов
/ 13 января 2012

Memcache aprox

В офисе мы изучаем это приблизительно:

Предпосылки

  • Временное окно равно 10 минут .
  • Нам нужно знать только количество записей, а не значения.
  • Мы можем жить с не очень точным решением.

Осуществление

  1. Создать новую клавишу каждую минуту, например: mykey_<Time.now.strftime("%Y%m%d%H%M")>.
  2. Дайте им время истечения из 10 минут .
  3. Каждый раз, когда мы хотим добавить запись, мы incr ключ для нашей фактической минуты .
  4. Для расчета значения временного окна мы получаем значения 10 клавиш за последние 10 минут и суммируем их .

Против * * тысяча пятьдесят-одна Мы не можем хранить реальные значения, но только накопить . Когда каждая 1-минутная клавиша истекает, общее значение внезапно колеблется .

...