2010-04-28 71 views
1

您建議使用哪種方法?爲什麼?Mysql - 摘要表

創建彙總表和。 。 。

1)當動作實時發生時更新表格。

2)每15分鐘運行一次查詢組更新彙總表。

3)其他?

的數據必須是近實時,它不能等待一個小時,一天等

回答

2

我認爲是第三選擇,這可能讓您管理您的CPU資源更好一點。如何編寫一個定期更新彙總數據表的獨立進程?而不是使用group by來重新創建摘要,這可以保證隨着時間推移運行得更慢,因爲每次執行時都會有更多的行,也許您可​​以更新這些值。根據數據的性質,這可能是不可能的,但如果它非常重要,它不能等待並且必須接近實時,那麼我認爲你可以花時間調整模式並允許進程來更新它,而不必讀取源表中的每一行。

例如,假設您的數據只是login_data(cols username,login_timestamp,logout_timestamp)。您的摘要可以是login_summary(cols username,count)。每15分鐘一次,可以截斷login_summary表,然後使用選擇的用戶名,計數(*)類型的代碼插入。但是,你必須每次重新掃描整個表格。爲了加快速度,您可以將彙總表更改爲last_update列。然後,每15分鐘爲每個記錄更新一次,而不是該用戶的last_update記錄。當然更復雜,但它有一些好處:1)您只更新已更改的行,並且2)您只讀取新行。

如果15分鐘對於您的用戶來說太舊了,您可以將其調整爲每10分鐘運行一次。這對CPU當然會有一些影響,但不會像每15分鐘重做整個摘要那麼多。

+0

不知道爲什麼這沒有upvote,很好的回答 – NateDSaint 2012-05-17 17:44:57

+0

謝謝,@Nate。現在要更新已經有點舊了,所以我認爲OP已經解決了他的問題並繼續前進。無論如何希望如此。 – MJB 2012-05-19 01:37:03

+0

我想找出相同問題的答案,所以它幫助了我。 :) – NateDSaint 2012-05-19 02:22:20