Будет ли mysql Insert замедлять работу страницы, если она будет использоваться при каждом запросе? PHP

У меня есть структура MVC с классом Request, который обрабатывает все запросы. Я регистрирую каждый запрос, поступающий в базу данных, и столбцы таблицы журнала запросов выглядят следующим образом:

  1. ID (автоинкремент)
  2. Контроллер
  3. Действие
  4. Параметры (GET, POST, PUT, DELETE)
  5. Параметры (параметры MVC разделены косой чертой "/")
  6. Метод запроса (GET, POST, PUT, DELETE)
  7. Тип запроса (HTML, JSON, XML)
  8. Запрос Ajax (true/false)
  9. URL-адрес реферера
  10. URI запроса
  11. Браузер (Браузер агента пользователя)
  12. Версия браузера
  13. IP
  14. Платформа
  15. Время запроса (дата-время)

Теперь, если подумать, если у меня есть 100+ пользователей в сети, каждый из которых делает около 500+ запросов в день, я получаю 100*500 = 50 000. strong> строк в день, а в год выходит около 18 миллионов.

Теперь, через 1-2 года, если я не буду очищать журнал, пользователи будут медленнее вставлять свои запросы в таблицу?

Плохо ли регистрировать каждый запрос?

Причина: причина, по которой я хочу регистрировать каждый запрос, заключается в обнаружении вида DDOS-атаки, чтобы, если будет более 10 запросов за 30 секунд, заблокировать учетную запись для 20 минут.


person GGio    schedule 08.08.2013    source источник
comment
Не downvoter, но IMO было бы более разумно использовать готовый инструмент мониторинга сети вместо развертывания собственного решения для базы данных. Если вы подвергаетесь DDoS-атаке, ваша система может быть слишком засорена, чтобы реагировать на запросы.   -  person Cᴏʀʏ    schedule 09.08.2013
comment
ну, это не только для DDos, я также хочу использовать его для пользователя, пытающегося войти в систему и терпящего неудачу несколько раз. Я блокирую его аккаунт, если 3 неудачные попытки за 5 минут.   -  person GGio    schedule 09.08.2013
comment
Вы регистрируете каждый запрос к вашей базе данных? Получайте удовольствие от этого кошмара. Вы понимаете, что существуют возможности мониторинга/регистрации сервера, верно?   -  person Axel    schedule 09.08.2013


Ответы (2)


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

Есть несколько способов поддерживать производительность в течение длительного времени, самый простой из которых — записать ваши свежие данные в таблицу памяти MySQL для вставок и запросов, а затем передать данные cronjob в постоянную таблицу.

Также есть очередь сообщений (ZeroMQ, RabbitMQ и т. д.) или база данных NoSQL (MongoDB).

person Gigline    schedule 08.08.2013

Причина: причина, по которой я хочу регистрировать каждый запрос, состоит в том, чтобы обнаружить тип DDOS-атаки, чтобы, если будет более 10 запросов за 30 секунд, заблокировать учетную запись на 20 минут.

Тогда почему бы периодически не удалять журналы старше дня или около того? Предположительно, вы не собираетесь ограничивать скорость учетной записи на основе двухлетнего доступа.

person ceejayoz    schedule 08.08.2013