我有几个脚本经常由cron加载。现在我不存储任何日志,所以如果任何脚本无法加载,我在看到结果之前就不会知道它失败了——甚至当我注意到结果不正确时,我也无能为力,因为我不知道哪个脚本失败了。
我决定存储日志,但我仍然不确定如何做。所以,我的问题是——将日志存储在SQL数据库中还是文件中更有效?
我可以在mysql数据库中创建“日志”表,并将每个日志存储在单独的行中,或者我可以使用php的file_put_contents或fopen/fwrite将日志存储在单独的文件中。
我的脚本在工作时大约会添加5个日志(总共)每分钟。我进行了几次测试来确定什么更快——fopen/fwrite还是mysql的插入。我循环执行了3000次“insert”语句以生成3000行,并循环执行了3000次fopen/fwrite以生成带有示例文本的3000个文件。fwrite的速度比sql的insert快4-5倍。我进行了第二个循环——我循环执行了“select”语句,并将其分配给一个字符串3000次——我还使用“fopen”打开了3000个文件,并将结果分配给该字符串。结果是相同的——fopen/fwrite完成任务的速度快4-5倍。
因此,对于所有有经验的程序员——您在存储日志方面的经验是什么?有什么建议吗?
// 04.09.2011 编辑 - 感谢大家的答案,它们对我很有帮助。每篇文章都很有价值,所以只选择一个答案是非常困难的;-)
insert
语句的开销。如果您将数据添加到CSV文件中,并使用load data infile
读取该文件,则4-5倍速度将迅速降至2倍,1倍用于编写CSV文件,1倍用于load data infile
。 - Johan