2010-09-27 37 views
0

我正在嘗試構建一個基於tomcat日誌的web日誌分析器。針對網頁訪問者統計的Sql數據庫查詢優化

我首先將日誌推送到數據庫,然後做一些統計。

現在我滿足了一個問題:

對於例如(2010-09-20 2010-09-25到),我必須計算每一天的觀衆給定的數據範圍,所以我首先拆分數據範圍一天一天:

 

Split:(2010-09-20,2010-09-25) to 

(2010-09-20 00:00:00, 2010-09-21 00:00:00), 
(2010-09-21 00:00:00, 2010-09-22 00:00:00), 
(2010-09-22 00:00:00, 2010-09-23 00:00:00), 
(2010-09-23 00:00:00, 2010-09-24 00:00:00), 
(2010-09-24 00:00:00, 2010-09-25 00:00:00), 

然後我用sql來查詢每個範圍的訪問者數量。

例如:

 
select count(distinct ip) from log 
where time between 201009200000 and 201009210000 
group by ip. 

這SQL是用於計算的2010-09-20的訪問者。

因此,如果來自用戶請求的數據範圍覆蓋一天以上,我應該連接數據庫多次。效率低嗎?

任何解決方案?

BWT,我使用MySQL。

+0

一次查詢所有日子:類似於(語法旁)'SELECT日,COUNT(獨立IP)FROM日誌GROUP BY天ORDER BY日'... – pascal 2010-09-27 11:07:19

+0

但時間格式的文件我的數據庫是「yyyy-MM-dd HH:mm:ss」,因爲我還需要按小時計算訪客數量。 – hguser 2010-09-27 11:24:19

+0

我建議把'201009200000到201009210000'之間的時間改成'where時間> = 201009200000和時間<201009210000' - 這樣可以防止在錯誤的日子報告第二天的第一分鐘記錄的ip。 – 2010-09-27 14:34:38

回答

0

您首先製作一個表格(天),一年中的所有日期。

E.g. SELECT COUNT(不同的IP),從日誌 內day.starttime 加入關於day.starttime之間log.time天和day.endtime 其中201009200000和201009210000 組通過腹膜之間log.time,day.starttime

或類似的東西