我正在構建一個網站分析工具並使用Postgresql作爲數據庫。我不會插入Postgres的每個用戶的訪問,但只有彙總數據分別5秒期間:帶有postgres的網站分析架構
time country browser num_visits
========================================
0 USA Chrome 12
0 USA IE 7
5 France IE 5
正如你可以看到每5秒一個我插入多行(每個維度組合中的一個)。
爲了減少查詢中需要掃描的行數,我想根據分辨率使用上述模式的多個表:5SecondResolution,30SecondResolution,5MinResolution,...,1HourResolution。現在,當用戶詢問最後一天時,我將轉到小於5秒分辨率表格的小時分辨率表格(儘管我也可以使用那個表格 - 這只是更多行掃描)。
現在如果小時分辨率表具有小時0,1,2,3,...的數據,但用戶要求從小時的1:59到8:59看到小時的趨勢。爲了獲得1:59-2:59的數據,我可以對不同的分辨率表進行多種查詢,所以我從1分辨率獲得1:59:2:00,從30分辨率獲得2:00-2:30等等。 AFAIU我已經把一個查詢交易到一個巨大的表(有許多相關的行要掃描),多個查詢到中表+在客戶端結合結果。
這聽起來像是一個很好的優化? 對此有何其他考慮?
目前尚不清楚首先要解決的問題。什麼推動你需要優化這個?順便說一句,這聽起來像是一個很好的用於PostgreSQL 9.4的minmax索引的用例。這是一段時間了,但最初的結果在大餐桌上很不錯。 –
問題是,如果我只使用一個表格(5秒分辨率,因爲它是我需要的最高分辨率),那麼在幾天時間內實際上對小時分辨率感興趣的查詢將需要做一個完整的表格掃描(可能有500M行)。我想通過使用具有相同數據但分辨率較低(5分鐘,1小時等)的附加表格來緩解它的想法。 –