我正在开发一个使用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年
如果您使用的是众所周知的软件包,例如log4net-而不是自己动手包装,那可能是个好主意-只需翻转配置即可。@tom-分离很好,但是为什么不简单地拥有两个数据库,一个用于实时数据,一个用于归档日志等呢?
—
朱莉娅·海沃德2014年
OP表示这是按月计费的-因此,我曾希望将计费逻辑应用于数据库会比平面文件容易得多吗?
—
朱莉娅海沃德2014年
当您表示“数据库”时,使用了“ SQL”一词。我做了一些更正。SQL是用于读取和写入数据库的语言。MS SQL Server是RDBMS的名称。仅“ SQL”并不意味着“ MS SQL Server数据库”。
—
图兰斯·科尔多瓦2014年
@gnat我不认为这是重复的:另一种是关于记录错误,而这是关于记录计费的用法(在这种情况下,建议并接受的答案是使用RDBMS)。
—
ChrisW