我正在嘗試一些不同的選項來在RavenDB中以有效的方式設計和存儲文檔結構。文檔設計
我正在處理用戶的結構是會話和活動跟蹤信息。
會話在用戶登錄系統並開始創建活動時啓動。每個會話可能有數百個活動。 會話在用戶關閉/註銷時結束。
使情景稍微複雜化的一個因素是會話實時顯示在Web門戶中。換句話說,我需要跟蹤會話和活動,並將它們關聯起來,以便能夠確定它們是否正在進行(以及它們已經運行了多久)或者它們是否已完成。
你也可以在歷史中挖掘歷史。
我做了一些研究,發現這裏有兩個相關的問題上堆棧溢出,但沒有人真的幫了我: Document structure for RavenDB Activity stream design with RavenDb
我已經上調成功的是兩個選擇:(簡化結構)
1:
{
"User": "User1",
"Machine": "machinename",
"StartTime": "2012-02-13T13:11:52.0000000",
"EndTime": "2012-02-13T13:13:54.0000000",
"Activities": [
{
"Text": "Loaded Function X",
"StartTime": "2012-02-13T13:12:10.0000000",
"EndTime": "2012-02-13T13:12:10.0000000"
},
{
"Text": "Executed action Z",
"StartTime": "2012-02-13T13:12:10.0000000",
"EndTime": "2012-02-13T13:12:10.0000000"
}
}
2:
{
"Session" : "SomeSessionId-1",
"User": "User1",
"Machine": "machinename",
"Text": "Loaded Function X",
"StartTime": "2012-02-13T13:12:10.0000000",
"EndTime": "2012-02-13T13:12:10.0000000"
}
{
"Session" : "SomeSessionId-1",
"User": "User1",
"Machine": "machinename",
"Text": "Executed action Z",
"StartTime": "2012-02-13T13:12:10.0000000",
"EndTime": "2012-02-13T13:12:10.0000000"
}
替代方案1感覺更自然,從關係背景提交,加載Session,添加事件和存儲很簡單。每次加載Session對象和附加事件的開銷都會影響插入性能。
方案2感覺效率更高,我可以簡單地附加事件(幾乎像事件源)。但是,在事件中進行挖掘並在每個會話中顯示它們的選擇會變得更加複雜。
有沒有第三個更好的選擇? 解決方案是分開事件並創建另一個讀取模型嗎? 我是不是在過度複雜的問題?
可以有多個用戶同時創建多個會話 - 活動嗎? – ZVenue 2012-02-17 01:43:22
是的,可以有多個用戶在同一時間,他們當然只會將活動添加到他們自己的會話 – Jon 2012-02-17 08:25:33
要清楚:我保留用戶名和機器的唯一原因是能夠在用戶界面中對它們進行分組/排序 – Jon 2012-02-17 08:31:50