在PHP Web应用程序中登录

3

我希望在我的应用程序中记录一些人们的操作活动,以便在需要的情况下可以撤销。

将这样的日志存储在文件还是数据库中更好呢?除了设置另一个表之外,我完全不知道其优缺点。

是否有第三种(或第四种等)选项,我不知道但应该了解和学习吗?

5个回答

9
至少有一个明确的理由选择将数据存储在数据库中。您可以在MySQL中使用INSERT DELAYED(或其他数据库中的类似结构),它会立即返回。这些类型的查询不会返回任何数据库返回数据,并且不能保证应用它们。
通过使用INSERT DELAYED,由于日志记录,您不会使应用程序减慢太多速度。数据库可以随时将INSERT写入磁盘,因此可以将一堆插入操作捆绑在一起。
您需要注意使用MySQL内置的时间戳函数(如CURRENT_TIMESTAMP或CUR_DATE()),因为它们将在实际执行查询时调用。因此,您应该确保任何时间数据都是由编程语言生成的,而不是由数据库生成。(此段可能是针对MySQL的)

2
这对我来说是新鲜事。非常流畅。 - Mark Biek
1
“not guaranteed? that sounds like not such a good idea. could you explain that?” “不保证?这听起来不太好啊。你能解释一下吗?” - Ape-inago

5
您几乎肯定希望使用数据库进行灵活的、基于记录的访问,并利用数据库处理并发数据访问的能力。如果您需要跟踪可能需要撤消的信息,则将其保存在结构化格式中是有益的,还可以更新一行以指示何时以及由谁撤消了给定的交易。
如果非常高的性能是一个问题,或者如果每个记录有非常不规则或大量的数据,则可能只想写入文件,这些数据可能难以存储在数据库中。请注意,除非您的应用程序具有非常多的事务,否则数据库速度不太可能成为问题。还要注意,如果您正在使用文件,则需要非常小心地处理并发访问(读/写/锁定),这可能不是您想要处理的事情。

3

我非常喜欢 log4php 这个工具。它提供了一个标准的接口来记录日志操作,基于 log4j 技术,可以加载一个中央配置文件,因此您无需更改代码即可更改日志记录方式,同时还提供多种日志目标,例如文件、syslog、数据库等。


1
我会使用数据库主要是为了可维护性——此外,对文件进行多次编辑可能会导致一些被忽略。

1

我同意以上两个建议,并补充说明,在平面文件日志上进行文件锁定可能会在有很多用户时引起问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接