【问题标题】:Database schema for storing IIS logs用于存储 IIS 日志的数据库架构
【发布时间】:2014-04-02 16:13:30
【问题描述】:

我一直试图想出一个数据库模式来存储 IIS 日志文件信息,但没有成功。我们的日志当前记录,

  • 日期
  • 时间
  • 客户用户名
  • 客户端 IP
  • 客户端用户代理
  • 服务器 IP
  • 服务器站点名称
  • 状态
  • 子状态
  • win-32-状态
  • 请求方法类型
  • URI 词干
  • URI 查询
  • 端口

什么是允许我解析日志文件并将它们插入 SQL Server 数据库以供以后查询的良好数据库设计?我想将它插入到一个以上的巨型表中,以帮助保持数据库的大小不会快速增长。

【问题讨论】:

  • 有了这个小信息:就放在一张桌子上?请更具体地说明您的需求!
  • 已编辑问题。它不必在一张桌子上,实际上最好不要:)
  • 除日期和时间之外的每一列以及那些已经是代码(例如状态)的列都可以在查找表中。
  • 您没有指定真正重要的一件事:您如何查询这些数据?如果您不打算查询它,请不要存储它。如果您要查询它,请指定您要运行的查询,因为这将是您设计的主要驱动力。
  • @Hogan 所以每一列都是自己的表?然后只需从这些表中选择 ID 或插入新记录然后将它们连接到日期和时间?

标签: sql-server database iis database-design database-schema


【解决方案1】:

您可以为字符串列创建查找表:

Client Username
Client IP
Client User Agent
Server IP
Server sitename
Request method type
URI-Stem
URI-query

我会将这些查找表中的每一个都设置为相同的。例如对于客户端用户名

ClientUsername
ID - int unique
VALUE - VARCHAR(100)

然后,当您处理一行时,您获取用户名值并查看它是否在 ClientUsername 表中,如果是,则在 Client Username 列中添加具有该 ID 号的行。如果不是,则将新用户名添加到查找表并获取新 ID 并使用它。

对要引用查找表的每一列重复。

从表中选择时,您只需加入查找表以获取值列。

【讨论】:

  • 好的。至于状态,你会怎么做?将它们排除在查找表之外?
  • @michael_clarke - 它们是整数......存储整数以查找整数没有任何好处......只需存储原始整数。对于其中一些,您可以使用 small int 获得几个字节
  • 好的,我会试一试并报告结果。感谢您的指导。
  • @michael_clarke - 玩得开心
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多