我希望以可查询的格式存储数据,而不必提前知道给定数据包将包含哪些字段。
简单/愚蠢的方法似乎就像一个大的键值对表,其中一个键返回到数据所描述的“父”对象表。
数据将具有以下属性:
例如
解析日志文件,并根据以下某些规则将消息拉入某种定义的格式:
可能会为许多不同的系统解析许多日志。每个系统可能有不同的字段。
日期/时间/级别/消息字段仅在创建解析文件的规则时才知道,而不是在构建数据存储时。
你会怎么做?你会使用什么样的数据库/设计?
答案 0 :(得分:0)
选项1:使用像MongoDB这样的NoSQL数据库之一 - 我不熟悉这些数据库,因为我生活在一个主要的SQL Server世界中。这些允许您拥有作为文档的记录,而不是像关系DB的
那样的静态列数选项2:关系数据库
表:日志{Id(PK),日期,时间,级别,消息} 表:ExtraFields {Id(PK),FieldName} 表:AdditionalFields {FieldId(PK),LogId(PK),Value}
这里每条记录都会获得一条Log记录,然后是AdditionalFields中的一些附加字段,它们会链接回LogId。然后,您可以将它们加载到Log对象中。 ExtraFields表将包含所有类型的字段。如果在加载记录时它不存在,则添加另一个记录。所以这可能有URL,IP,User-Agent等,如果它是web日志。
或者,您可以避免使用ExtraFields表,只需将字段名称直接放在AdditionalFields表中。