2011-10-20 172 views
0

我想以一种可查询的格式存储数据,而无需提前知道给定的数据包将包含哪些字段。元数据结构在?数据库

简单/愚蠢的方法似乎是一个大的键 - 值对表和一个关键字返回到数据描述的“父”对象表。

的数据将具有以下性质:

  1. 许多将被关联到一个父对象
  2. 的数据将始终在键 - 值对的形式的元数据'片段
  3. 的数据将不会是平等的(只有一个关键值对)
  4. 会有很多。从未清除过。移动复制档案存储器如果需要

例如

日志文件进行解析和它的消息被拉入基于某些规则的一些定义的格式如下:

  • 日志/系统名称
  • 位置
    • 日期
    • 时间
    • 级别
    • 消息

可能有许多日志分析为许多不同的系统。每个系统可能有不同的领域。

仅当创建解析文件的规则时才知道日期/时间/级别/消息字段,而不是在构建数据存储时。

你会怎么做呢?你会使用什么样的数据库/设计?

回答

0

选项1:使用MongoDB之类的NoSQL数据库之一 - 我并不熟悉这些数据库,因为我生活在大多数SQL Server环境中。这些让你有那些文件,如关系数据库的

选项2列的不是静态的数字记录:关系数据库

表:登录{ID(PK),日期,时间,级别,消息} 表:ExtraFields {Id(PK),FieldName} 表:AdditionalFields {FieldId(PK),LogId(PK),Value}

这里每个记录都会得到一个Log记录,然后在AdditionalFields中获得一些附加字段,该链接返回到LogId。然后你可以将它们加载到一个Log对象中。 ExtraFields表将包含所有类型的字段。如果在加载记录时不存在,则添加另一个记录。所以这可能有URL,IP,用户代理等,如果它是网络日志。

或者,您可以避开ExtraFields表并将字段名称直接放在AdditionalFields表中。