使用者向系統申請,系統會隨機給使用者產生一個不重複的短網址 xx.xx.xx/abced1用於編輯內容(其中abcde1就是短網址標識,稱coding)
現在要統計所有coding的訪問記錄。
目前有一張access_log表,每當某個coding的短網址被訪問時,先是根據UA資訊、ip地址、有效時間經過演算法得到一個uvmark(訪客標識),如果表裡已經有相同的uvmark,表示是同一個人訪問了多次,此時不做insert記錄,而是update該條資料的number欄位+1。不過沒有uvmark,就添加insert一條記錄(記錄包括coding.訪問的裝置.系統內容.瀏覽器環境.訪問城市.訪問時間等等)
但是隨著訪問量的增大,表裡的資料已經非常多了。將近9000萬條資料,每天增量大概200萬。統計一些掃描量大的碼,比如按時間的sql是這樣的: select number from access_log where coding = XXXX and time between time_start and time_end
取出來的資料 uv就是條數的數量 pv就是每條的number相加(按地區.環境等等同理) 效率比較低。如果一個短網址每天平均有2W的訪問量,那麼我要統計他最近一個月的訪問量,需要的時間達到50S以上
隨便找了個coding的訪問統計。如下
我這麼做有問題嗎? 有可以最佳化的地方嗎?像百度統計這種的資料庫設計是怎樣的,為什麼感覺他們的非常快。
回複討論(解決方案)
每天總結一下,過去的訪問量直接取總結的結果,而不是從頭統計
每天總結一下,過去的訪問量直接取總結的結果,而不是從頭統計
可是有一個模組是即時統計的,就是在某一天裡,每半小時的資料也是有的。總結掉的話,我想知道30天之前的某一天的24小時即時統計怎麼算
30天之前的某一天 還是即時嗎?
顯然就不是了!
除了今天的資料會發生變化以外,過去的任何一天的資料多不會發生變化(過去了就過去了)
所以你只要按統計方案記錄下統計結果就可以了
30天之前的某一天 還是即時嗎?
顯然就不是了!
除了今天的資料會發生變化以外,過去的任何一天的資料多不會發生變化(過去了就過去了)
所以你只要按統計方案記錄下統計結果就可以了
那我要知道8月1號 9點到12點的資料呢
那沒關係,你按每小時一統計,一天的才24條記錄
你也可以按每分鐘,甚至每秒鐘一統計,都會比你重新從未經處理資料中匯總起來要快
那沒關係,你按每小時一統計,一天的才24條記錄
你也可以按每分鐘,甚至每秒鐘一統計,都會比你重新從未經處理資料中匯總起來要快
受教。 哦對了,那對於其他統計方式怎麼每天總結呢,比如地區統計呢。既有時間條件又有地區條件
每個省下有市
這些資料我要怎麼總結呢
你這些資料是怎麼計算得來的?
1+1 會算,10+10 就不會算啦?
你這些資料是怎麼計算得來的?
1+1 會算,10+10 就不會算啦?
第一種是只有單條件的(時間),我可以把每小時 每個短網址的pv uv都存一條資料。
第二種是多條件的(時間與地點),我按每小時來總結資料,我需要把每小時 每個短網址 按照地區存N條資料 是這樣嗎
以 #6 的蘇州為例:訪問量519 表示的是迄今為止的訪問量,而明天的訪問量是 519 + n
這個不會有疑問吧?
那麼到了明天,今天的這個 519 還會變嗎?顯然是不會變的