我們使用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