记录日志到文件 vs. 记录日志到数据库

3
我有一个待办事项应用程序(使用Django 1.5和MySQL),其中任务可以与另一个用户共享。因此,用户可以拥有个人任务和共享任务。共享任务将占用户总任务的一部分(我猜大约30%)。
对于共享任务,我想保留日志,以便连接到任务的用户可以知道谁做了哪些更改。为此,我考虑为每个共享任务保留日志文件。每当任何用户进行更改时,它都会附加到该文件中。
我的问题是-我应该通过文件存储来实现它,还是应该将其保存在数据库中?
请注意以下几点-
-很少访问日志(一个文件的日志可能最多每小时读取5-10次) -在一小时内,可能有总共> 500个写入(但是针对不同的文件。因此,一个文件可能每小时最多有10-50个写入。因此,并发性不是主要问题。) -在阅读数据后,我不需要搜索或修改数据。
提前感谢!
2个回答

2
所以与任务连接的用户可以知道谁做了哪些更改。
这会将相关数据从系统级别日志更改为应用程序可见数据。因此,它可能属于应用程序的数据库。这样也将使过滤日志数据以进行显示变得容易得多。例如,如果您想显示所有项目X的历史事件,则可以轻松查询具有对项目表的外键关系的数据库表。 从文件中读取并手动过滤该数据将是不必要的困难。
副注:“审计数据”或者“历史数据”可能是一个更好的术语,以区分其与系统日志(如错误日志)的差别。

感谢您解释我所需和日志之间的区别。关于过滤,我不需要过滤日志或读取其中的部分。我只需要直接在客户端上显示它。因此,这不是一个问题。 - Parin Porecha

1
文件系统也可以看作是一个数据库,但这里主要是比较文件系统和关系型数据库MySQL。我会选择使用关系型数据库,原因如下:
  • 首要原因是简单易用。你已经在使用数据库了,没有必要再引入文件的复杂性。只需添加一个新表格即可。
  • 数据库权限和文件系统权限通常不同,你需要考虑两者。
  • 这样做可以方便迁移应用程序,因为你不需要移动文件和数据库。
  • 你目前还没有预见到任何过滤需求,但你的客户很可能会在未来提出。
  • 在数据库中,你可以更好地控制性能。你无法真正为文件系统建立索引。大多数文件系统都将文件列表存储在一个文件中,每次都必须扫描它。
  • 数据库中的分片比文件系统更透明。如果不改变访问方式,很难将文件分配到多个存储位置。

如果你已经设置了关系型数据库,我看不出在文件系统上存储的任何好处。


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