记录到文件与记录到数据库

时间:2013-07-20 15:13:03

标签: mysql django

我有一个待办事项列表应用程序(使用Django 1.5和MySQL),其中任务可以与另一个用户共享。因此,用户可以拥有个人任务和共享任务。共享任务将是一小部分(我猜大约占用户总任务的30%)

对于共享任务,我想保留一个日志,以便连接到该任务的用户可以知道谁做了哪些更改。 为此,我正在考虑为每个共享任务保留一个日志文件。每当任何用户进行更改时,它都会附加到该文件中。

我的问题是 - 我应该通过文件存储来实现,还是应该将其保存在数据库中?

请注意以下几点 -

  • 不会频繁访问日志(文件的日志可能会在一小时内最多读取5-10次。)
  • 在一个小时内,可能总共有> 500次写入(但对于不同的文件。因此对于文件,一小时内可能有10-50次最大写入。因此,并发性不是主要问题。)
  • 阅读后无论如何我都不需要搜索或修改数据。

提前致谢!

2 个答案:

答案 0 :(得分:2)

  

以便连接到该任务的用户可以知道谁做了哪些更改

这会将有问题的数据从系统级日志记录更改为应用程序可见数据。因此,它可能属于应用程序的数据库。这样也可以更轻松地过滤日志数据以进行显示。例如,如果要显示项目X的所有历史事件,则可以轻松查询与Items表具有外键关系的数据库表。从文件中读取数据并手动过滤将是不必要的困难。

附注:“审计数据”或“历史数据”可能是一个更好的术语,以区别于系统日志记录,例如错误日志。

答案 1 :(得分:0)

文件系统也可以被认为是一个数据库,但在这里你主要是比较文件系统和MySQL,一个关系数据库。我会在关系数据库中执行此操作有几个原因:

  • 首要原因是简单。您已在使用数据库。我不会介绍使用文件的额外复杂性。只需添加一个新表即可完成。
  • 数据库权限和文件系统权限通常不同,您需要担心这两者。
  • 这使您可以轻松迁移应用程序,因为您无需移动文件数据库。
  • 您还没有预见到任何过滤,但您的客户很可能会在将来要求过滤。
  • 在数据库中,您可以更好地控制性能。您无法真正索引文件系统。大多数文件系统将文件列表存储在每次都必须扫描的文件中。
  • 数据库中的分片比文件系统中的分片更透明。在不改变访问方式的情况下,很难将文件传播到多个存储位置。

如果您已经设置了关系数据库,我认为存储在文件系统上没有任何好处。