2010-01-01 50 views
0

我的自定義Web服務器以掛鐘時間戳(會話開始)的形式報告會話信息以及會話持續的掛鐘秒數。如何將範圍非規格化並將它們存儲在數據倉庫中?

我想存儲在數據倉庫這一信息的方式,可以讓我舉例來說,在一個特定的時間查詢特定實體的會話數(+ MySQL的啓動模式)。一個要求是我們必須能夠提取將被饋送到圖形的時間序列數據。

是否有任何其他的方式來存儲數據,而不是插入一行會話的每個絕對第二?

+0

有什麼不對的存儲一行每個會話,與一列實體ID,「會話開始」列和「會議持續時間的牆數量」列「(或者可能更容易查詢:會話結束)?查詢時可以將數據轉換爲另一種形式。 – 2010-01-01 19:13:48

+0

@Mark:因爲我無法真正弄清楚如何彙總這些記錄並能夠從中生成時間序列數據。任何指針? – jrydberg 2010-01-01 19:17:54

回答

0

我會說,最簡單的方法是與開始時間,結束時間存儲每節一列的事實表。

比方說,我們有factSession有:

( 
    ... 
    ,SessionID int 
    ,StartTime datetime 
    ,EndTime datetime 
    ,EntityID int 
    ... 
) ; 

TimeSeries TABLE (TimePoint datetime) ; 

您可以:

SELECT t.TimePoint 
     ,f.EntityID 
     ,COUNT(f.SessionID) AS cnt 
FROM TimeSeries AS t 
     LEFT JOIN factSessions AS f ON (f.StartTime <= t.TimePoint 
              AND t.TimePoint <= f.EndTime 
             ) 
GROUP BY t.TimePoint ,f.EntityID 
ORDER BY t.TimePoint 
+0

工程像魅力。用約700行的時間序列表和約350,000行的事實表進行了測試。即使我嘗試限制會話表中的行數,Quires也需要約45秒。有沒有辦法來優化這個不知何故?我在開始和結束時間添加了一個索引,但沒有獲得任何結果。這是對查詢的解釋; http://pastebin.ca/1735275 – jrydberg 2010-01-02 18:08:27

相關問題