Я столкнулся с этой проблемой и все еще пытаюсь решить эту проблему:
Вы хотите зарегистрировать количество посещений сайта.
Реализовать две функции,
log_hit (), который вызывается при регистрации попадания, и
get_hits_in_last_five_minutes (), которая возвращает общее количество попаданий
в последние пять минут.
Предположим, что все метки времени располагаются в возрастающем порядке.
Моя идея (попытка решить проблему):
Структура данных: массив.
Моя логика:
Когда вызывается log_hit (), мы в основном сохраняем время в мс (Date (). GetTime () в мс) в массиве и сохраняем обращения к определенной секунде в hashmap.
function Counter() {
this.map = {};
this.store = [];
}
Counter.prototype.log_hit = function() {
const d = new Date().getTime()/1000;
this.store.push(d);
this.map[d] = this.map[d] ? this.map[d]++ : 1;
}
Counter.prototype.get_hits_in_last_five_minutes = function() {
const fiveMin = 60 * 60; //seconds.
const initalPointer = new Date().getTime() / 1000 - fiveMin;
// Somehow retrieve the value and return it back
}
Однако я не думаю, что это самый оптимальный способ ее решения, если бы я хотел продлить решение на час или какую-то другую гранулярность.
Как бы я решил такую проблему?