我正在寻找存储日志条目的不同选项,以便于查询/报告 目前我编写的脚本可以解析和查找数据,但数据的需求越来越多,因此将日志数据放入数据库变得越来越有价值。
日志条目由键值对组成,例如{"timestamp":"2012-04-24 12:34:56.789", "Msg":"OK"
(简化示例)
我确信最终将日志格式扩展为{"timestamp":"2012-04-24 12:34:56.789", "Msg":"OK", "Hostname":"Bubba"
,这意味着“架构”或“文档定义”将需要更改。此外,我们是Windows + .NET商店。
因此,我主要是在寻找一些NoSQL引擎,并发现RavenDB在.NET中很有吸引力 但是,我很难找到有关它和其他NoSQL数据库如何处理异构记录的信息 你认为什么是合适的?
答案 0 :(得分:3)
使用RavenDB,您只需存储不同类型的文档,它就能够处理模式中的“更改”。因为它实际上是“无架构的”,所以您可以编写仅索引其中字段的索引。有关其他信息,请参阅this blog post。它正在谈论迁移,但这同样适用于此。
dynamic fields选项也可以帮助您。所以给定具有任意属性的doc:
public class LogEntry
{
public string Id { get; set; }
public List<Attribute> Attributes { get; set; }
}
public class Attribute
{
public string Name { get; set; }
public string Value { get; set; }
}
你可以写这样的查询:
var logs = session.Advanced.LuceneQuery<LogEntry>("LogEntry/ByAttribute")
.WhereEquals("Msg", "OK")
.ToList();