0

我们基于 PHP 和 MySQL 的应用程序创建自定义日志,这些日志写入 MySQL 数据库以供用户操作。我们这样做主要是为了便于搜索,并且因为该应用程序已经使用 MySQL 进行持久存储,所以这很有意义。

我们的日志现在包含 1760 万行,大小为 2GB。在这个地方走动时不是那么友好。

我想知道社区可能会建议作为一种更好更有效的方式来存储日志。

您显然可以将此表拆分为 1 周的所有日志,然后删除非关键日志并将表拆分为两个历史关键日志,例如付款等。

一般来说,我们通过函数的方式写入日志,例如

playerlog($id,$message,$cash,$page,$ip,$time);

但这是一个相当简化的版本,我们还使用 MySQL 的 INSERT DELAYED,因为日志对于页面加载并不重要。

4

2 回答 2

2

如果您有兴趣使用 MongoDB(我从标签中假设)执行此操作,您可能想看看这里:http ://docs.mongodb.org/manual/use-cases/storing-log-data/

于 2012-07-18T21:14:37.157 回答
0

您应该澄清需要什么日志。作为插入后的第二步,您可以设置一个处理日志数据的作业,例如读取日志并处理它们(这会将您的 DBMS 降级为某种消息传递中间件)。这可能是将部分(如付款)存储到不会被删除的档案中,或者将身份验证日志写入在指定保留时间后它们被删除的地方。但这一切都取决于您的用例。

根据您计划分析的内容或查询数据的方式,您甚至可以将它们存储在 MySQL 之外。

一些可能性:

  • 实施旨在分析事件、触发警报等的 SIEM 系统 (http://en.wikipedia.org/wiki/Security_information_and_event_management)。
  • 使用类似 SIEM 的软件,如 Splunk(请参阅 splunk.com),该软件适用于原始日志并针对日志搜索和分析
  • 如果它“足够快”,请坚持使用您的 DBMS 解决方案
  • 只需使用 syslog 并存储文本日志文件——然后你可以跳过整个 MySQL
  • ...
于 2012-07-18T17:21:57.017 回答