資料分析結果的取得方式

edited 十月 2013 in 其他
各位前輩&先進&大家早啊!
最近遇到一個關於資料分析的小問題:當資料比數越來越多的時後,
要產生分析結果就要花越來越多的運算時間.
比如分析每個月的資料數,假設有100萬筆資料,那程式就要串過100萬筆資料,
比對每一比資料的時間落在哪一年月份...等,然後作計數,總是要花上一點時間,
後來我就想說不如在新增資料的時候就進行判斷分析,將分析數據累計在另一個資料表,
這樣一來只要讀取一筆(或很少筆)資料就可以得到分析結果了,
只是說這樣的作法可能會在新增資料的環節多增加一點負擔就是了,
而且這樣作要先想清楚並且確定究竟需要得到哪些數據?(每年,每月,每日,時...等等項目)
免得後患無窮...
不知道大家在類似的狀況下都怎麼處理或抉擇呢?

(我這個方法應該很老套XD,不過還是稍為演示一下:
資料表A記錄資料-欄位有SN,TITLE,DATE,
資料表B記錄統計數據-欄位有YEAR,Jan,Feb...Dec
假設在今天新增一筆資料,除了存入表A外,
會判斷今天的日期為何?2010-08-04
當表B的YEAR欄位沒有2010時新增一筆YEAR=2010的資料,並且在Aug欄位+1
假設在2010-08-05新增一筆資料,
因表B已經已經有一列資料的欄位為2010,所以不必再新增資料,只需要在Aug欄位+1
日後想要得到分析數據,就只要取出表B少少的資料就可以了~
...以上,如果有甚麼缺陷或指教請不吝提出)


原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=5302

評論

  • edited 八月 2010
    這樣做是很好的. 不過通常還是要再加一個功能- 重算機制!
    因為統計數量是由前端的交易資料而計算出來的.
    如果2者的連動機制有做好, 通常問題就解決了一半.
    但如果有其它方法可以"直接"變動前端的交易資料(如某某某直接進DB改資料),
    就有可能會發生統計資料不準確的問題.

    所以, 既然要寫重算功能, 那...最後通常會演變成幾個程式:
    1. 交易資料管理程式
    -負責交易資料的處理
    2. 排程統計程式
    -可設定時間, 定期計算指定條件的資料計算(如排在夜間做)
    3. 報表介面
    -可將統計結果顯示出來的報表/查詢 程式.

    以上, 是我的作法, 供你參考囉~
  • edited 八月 2010
    會比較建議透過定時的排程去整理資料,例如每天凌晨兩點去整理資料、產生報表,平常要看的報表就依據這些資料去彙整,這樣可以避免在需求量大的操作中增加額外負擔。
  • edited 八月 2010
    我看到MySQL 5.0之後的版本有Stored Procedure的功能...看了一些網路文章
    範例都差不多,可是我搞不太懂,接下來的疑問可能會很蠢...
    簡單的說就是用MySQL的指令寫程式?是寫在MySQL的系統裡面?
    (自定義MySQL的Function之類的)之後才用PHP去呼叫這個自訂的MySQL指令?
    我有點搞不太懂,因為到目前為止我都是用php的 mysql_query與MySQL作連結...
    Stored Procedure的使用方式讓我搞不大懂...orz(加上MySQL的基礎也不是很好)
  • edited 八月 2010
    資料表B記錄統計數據-欄位有YEAR,Jan,Feb...Dec
    我覺得應該是
    year,month,records
    2010,8,+1
  • edited 八月 2010
    你說的沒錯, 簡單來說就是把程式寫在MySQL上.

    官網說明 上有指出:
    Stored routines (procedures and functions) 能提升效率-減少資料在Server 跟 Client 之間的往返.
    再者也可以把一些處理過程(因機密為由)包在 DB Server 內.

    而 procedures and functions 的差別, 就在 Function 可以有回傳值, 其它的, 就交由 Google 來幫你解答~
    ├145┤
  • edited 八月 2010
    總合以上的應用, 你可以把 計算功能 寫成 store procedure,
    然後定時去執行它就可以了.
  • edited 八月 2010
    謝謝各位前輩,雖然沒有做甚麼豐功偉業只是在自己的機器上玩一下,覺得利用MySQL這樣搞頗有趣的,也後知後覺到有些大型系統的特殊環境要求(獨立主機不可多系統...等等),多少也有可能跟這樣的設計或需求有關吧...
    不過聽到比較多的方法通常是將資料處理結果做快照之類的(例如:x人類的系統),
    總之,真的很有趣就是了(實際上常常卡住對螢幕發呆XD)
  • edited 八月 2010
    mysql 的 trigger 應該更適合你的需求
    當有資料新增或刪除 , 都會觸發事件來處理
    也不用怕直接改資料庫內容了
Sign In or Register to comment.