我们使用RavenDB(2261)作为基于队列的视频上传系统的后端,并且我们被要求提供关于各种指标的“实时”SLA报告,以处理上传系统。你将如何处理基于RavenDB文档数据的聚合/报告方案?
该文件的格式如下:
{
"ClipGuid": "-1234-abcd-efef-123412341234",
"CustomerId": "ABC123",
"Title": "Shakespeare in Love",
"DurationInSeconds": 82,
"StateChanges": [
{
"OldState": "DoesNotExist",
"NewState": "ReceivedFromUpload",
"ChangedAt": "2013-03-15T15:38:38.7050002Z"
},
{
"OldState": "ReceivedFromUpload",
"NewState": "Validating",
"ChangedAt": "2013-03-15T15:38:38.8453975Z"
},
{
"OldState": "Validating",
"NewState": "AwaitingSubmission",
"ChangedAt": "2013-03-15T15:38:39.9529762Z"
},
{
"OldState": "AwaitingSubmission",
"NewState": "Submitted",
"ChangedAt": "2013-03-15T15:38:43.4785084Z"
},
{
"OldState": "Submitted",
"NewState": "Playable",
"ChangedAt": "2013-03-15T15:41:39.5523223Z"
}
],
}
在每个ClipInfo中的记录,有夹子从加工环节到另一个的一部分通过每次加StateChanges的集合。我们需要将这些StateChanges减少到两个特定时间段 - 我们需要知道剪辑从DoesNotExist更改为AwaitingSubmission需要多长时间,以及从DoesNotExist到Playable需要多长时间。然后,我们需要一群这些持续时间的日期/时间,因此,我们可以得出一个简单的SLA报告,看起来像这样:
必要的谓词可以表示为LINQ语句,但是当我试图确定这种Raven查询中的复杂逻辑我似乎只能得到空的结果(或许多DateTime.MinValue结果)
我意识到像Raven这样的文档数据库不适合报告 - 我们很乐意探索复制到SQL或其他类型的缓存机制 - 但目前我只是看不到任何提取数据的方式,除了进行多个查询来检索整个小组然后在.NET中执行计算。
有什么建议吗?
感谢,
迪伦
这可以通过map/reduce索引完成。我正在为您解决问题。当你说“今天” - 你的意思是“从午夜到UTC午夜”还是别的什么?当你说“本周”时,你的意思是“周日到周六UTC”或其他什么? – 2013-03-18 21:37:27
另外 - 我应该将哪个状态作为分组的目的?第一个与'OldState ==“DoesNotExist”' - 或其他? – 2013-03-18 21:40:20