登录到文件还是数据库表?


12

我正在开发一个使用MS SQL来处理各种数据的Web应用程序:包括用户,用户帐户,用户许可证,许可证价格,发票。

我需要记录用户对系统的实时使用情况,并将其用于每月计费:例如,每当用户获得特定页面/ URL时就记录一次,并在月底根据所获取的页面数向用户计费。

  • 是否应该将这些日志事件写入MS SQL数据库的表中?

  • 是否应将这些日志事件写入非SQL的仅追加日志文件?

  • 我应该为每个用户将这些日志事件写入不同的日志文件吗?

这不是一个特别庞大的网站:例如,最多10,000个用户,每个用户平均每天进行5个可记录事件=> 50,000个事件/天= 30个事件/分钟= 18,000,000个事件/年。

我问是因为这两种选择似乎都是可行的,而且我看不出是否有明显的优势。

与计费事件相关的数据很简单,例如:

  • 用户ID(SQL中与Users表的外键关系)
  • 日期和时间
  • 计费页面的URL

我对这个问题的回答如下:

  • 将日志写入数据库表的一些好处:

    • 关系完整性:例如,记录的事件与有效的用户ID相关联(通过将用户ID定义为表之间的外键)
    • 易于阅读的账单:例如SELECT COUNT GROUP BY,获得每个用户的日志事件数的计数
  • 写入日志文件的一些好处:

    • 性能更容易:SQL较少使用,例如仅用于用户登录事件,而大多数仅用于读取
    • 易于管理:通过移动旧日志文件而不是通过从数据库中删除/存档,例如在年底时更易于归档旧数据

如果我的答案有误,请告诉我;或夸大某事的重要性;或忘记了一些重要的考虑。

和/或,如果与我的答案不同,请告诉我您的答案是什么。


3
您需要从常规日志记录信息中分离出用于制定业务决策的信息。将您的应用程序以后将使用的所有内容存储在数据库中,其他内容存储在日志文件中。
汤姆(Tom)2014年

1
如果您使用的是众所周知的软件包,例如log4net-而不是自己动手包装,那可能是个好主意-只需翻转配置即可。@tom-分离很好,但是为什么不简单地拥有两个数据库,一个用于实时数据,一个用于归档日志等呢?
朱莉娅·海沃德2014年

2
OP表示这是按月计费的-因此,我曾希望将计费逻辑应用于数据库会比平面文件容易得多吗?
朱莉娅海沃德2014年

1
当您表示“数据库”时,使用了“ SQL”一词。我做了一些更正。SQL是用于读取和写入数据库的语言。MS SQL Server是RDBMS的名称。仅“ SQL”并不意味着“ MS SQL Server数据库”。
图兰斯·科尔多瓦2014年

1
@gnat我不认为这是重复的:另一种是关于记录错误,而这是关于记录计费的用法(在这种情况下,建议并接受的答案是使用RDBMS)。
ChrisW

Answers:


13

由于您将这些信息用于计费目的,因此我不明白为什么您不希望在数据库中轻松地查询,汇总,报告和将其添加到其他数据中。

我还认为,维护包含日志信息的单个数据库表比一堆单独的日志文件要容易得多。与您对服务器负载的担心相同,与将数据保存在平面文件中相比,有更好的处理方法。

顺便说一句,您的第三个选择是同时做这两个。使用数据库满足大多数需求,但保留日志文件用于审核。


3
使用数据库的另一个好处是利用触发器进行某些日志记录。无需其他代码。如果数据被插入到表A,然后插入日志消息X.
格雷格瑞光
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.