Ограничение скорости Конечная точка API REST API со многими правилами — какую базу данных использовать?

Я должен оценить конечную точку API PHP REST. Каждый запрос уже сделан с уникальным идентификатором клиента / клиента. Я должен быть в состоянии добавить следующие правила:

  1. ограничение скорости за 5 минут (последние 5 минут в любое время)
  2. ограничение скорости в час (последние 60 минут в любое время)
  3. ограничение скорости в неделю (начиная с 1-го дня недели)
  4. ограничение скорости в месяц (начиная с 1-го числа каждого месяца)

Также я должен регистрировать каждый тип запроса и некоторые метаданные. Конечно, это должно работать как можно быстрее, чтобы минимизировать дополнительные затраты на конечную точку API.

В Postgres это будет выглядеть так:

INSERT INTO requests (created_at, client_id)
SELECT now(), client_id
FROM clients c
WHERE
c.id = 123 -- client id is passed inside request
AND (
SELECT COUNT(*)
FROM requests r
WHERE r.client_id = c.id
AND r.created_at > now() - '5 minutes'::interval
) > c.limit_per_5min
AND (
SELECT COUNT(*)
FROM requests r
WHERE r.client_id = c.id
AND r.created_at > now() - '1 hour'::interval
) > c.limit_per_1hour
-- and other limits...

Но я не уверен, что это хорошая идея использовать Postgres здесь. Я думал также о MongoDB или Redis, но я также не уверен, что они могут обрабатывать так много правил (и как?).

Посоветуйте, пожалуйста, какую технологию мне здесь использовать?


Также мне придется запросить, например, сколько запросов какого-либо типа было передано клиенту с идентификатором ххх.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]