0

我有一个 MVC 框架,它有一个处理所有请求的 Request 类。我记录了数据库中的每个请求,请求日志表的列如下:

  1. ID(自动递增)
  2. 控制器
  3. 行动
  4. 参数(GET、POST、PUT、DELETE)
  5. 参数(由斜线“/”分隔的 MVC 参数)
  6. 请求方法(GET、POST、PUT、DELETE)
  7. 请求类型(HTML、JSON、XML)
  8. 是请求 Ajax(真/假)
  9. 引荐网址
  10. 请求 URI
  11. 浏览器(用户代理浏览器)
  12. 浏览器版本
  13. 知识产权
  14. 平台
  15. 请求时间(日期时间)

现在我想一想,如果我有100 多个在线用户,每个用户每天发出大约500 多个请求,我每天得到100*500 = 50,000行,每年大约有1800 万行。

现在1 -2年后,如果我不清除日志,用户将他们的请求插入表中会更慢吗?

记录每个请求是个坏主意吗?

原因: 我想记录每个请求的原因是为了检测一种 DDOS 攻击,以便如果每 30 秒有超过 10 个请求,则锁定帐户20 分钟

4

2 回答 2

3

表现出的放缓程度主要取决于您在桌面上的索引。插入的每条记录都会导致该表的每个索引都被更新,从而随着表的增长而产生越来越慢的速度。

有几种方法可以长期保持性能,最简单的是将新数据写入 MySQL 内存表以进行插入和查询,然后让 cronjob 将数据传输到永久表。

还有消息队列(ZeroMQ、RabbitMQ 等)或 NoSQL 数据库(MongoDB)

于 2013-08-08T22:41:43.340 回答
1

原因:我想记录每个请求的原因是为了检测一种 DDOS 攻击,如果每 30 秒有超过 10 个请求,则锁定帐户 20 分钟。

那么,为什么不定期删除超过一天左右的日志呢?您可能不会根据两年前的访问来限制帐户的速率。

于 2013-08-08T22:44:11.077 回答