记录到innoDB表或本地文件,哪一个更快?

时间:2011-01-16 12:20:22

标签: logging innodb

我需要为我的Web应用程序实现一个简单的日志记录机制。我有两个选项,一个是将日志记录放入本地文件,例如在/tmp/file.log之类的地方,另一种方法是使用InnoDB表(位于繁忙的数据库中),该表是只写的,不涉及读取操作。该表是直接的,有两列,一列是自动递增的主要id列,另一列是text类型的记录文本(1024)。日志记录将每秒调用10次,这意味着它每秒执行10次写入操作。目前,我无法访问生产服务器,无法在真实环境中对这两种不同方式进行基准测试。一般而言,哪一个会更快?为什么?

就我个人而言,我愿意采用InnoDB的方式,因为它简化了我的代码。我相信大多数Web应用程序都鼓励在生产环境中关闭运行时文件日志记录。但是,innoDB表确实位于繁忙的数据库中,是否会降低日志记录性能并使其慢于文件日志记录?

感谢。

2 个答案:

答案 0 :(得分:1)

数据库可以缓冲内容,从而优化磁盘访问(与内存相比速度非常慢),文件日志记录选项不会这样做,因此速度要快得多。我的意思是,它应该不会更慢,最糟糕的情况是它的行为就像文件记录一样。

它的速度有多快取决于太多的变量(例如,如果它有内存限制,它可能无法在内存中保存大量数据,因此它会经常保存到磁盘,这取决于操作系统,数据库实现,表引擎,服务器上的负载,数据库正在做的其他事情等等,虽然一天左右的基准测试(应该代表不同的负载等)应该让你知道速度有多快。 / p>

谷歌缓冲区缓存,可以窥探数据库缓冲的世界(更常用于磁盘读取,尽管它是true for disk writes as well

答案 1 :(得分:1)

数据库解决方案增加了很多复杂性:

  • 客户端 - 服务器通信
  • SQL Parser
  • 查询引擎
  • ...

文件解决方案是直接的,大多数操作系统都会在不可移动的设备上免费提供某种写缓存。

所以,去找文件。它不会变慢,而且更简单!