在資料探勘中, 最重要的就是資料的計算與處理, 但無論說要計算前, 一定要先儲存, 且之中一定要讀取, 而這資料要做為儲存與讀取的介面就是指資料庫, 也就是說, 若是儲存的資料的地方就叫做是資料庫的話, 無論是 SQL 的方式, 或是 Filebase (檔案庫), 或者是最近很紅的 NoSQL / Cluster, 都是在 DBA 要處理的範圍之中.
在之前有提到在 Data Mining 中有幾個過程..
而之中事實上還有一個是 Data Transfering, 也就是在這些資料環節中, 要把這流程串起來, 一個 DBA 要知道的不只是一種資料庫而已.
當然雖然是這樣說, 我還是稍微列一下幾點好了.
資料探勘的資料是相當大的, 隨時要去準備去儲存與處理以億為單位的資料, 而我們都知道, 一個資料只要超過數十萬筆的時候, 就已經難已處理, 因此要設計一種資料處理方式同時可以儲存以億為單位的資料庫, 但又是可以以萬為單位的方式讀取, 也就是說要把資料同時拆開又同時組合的處理方式.
因為資料探勘是一個要讀取大量資料的系統, 因此要好好的讓每次資料的讀取足夠的資料是相當重要的, 也就是說每個 file, 每個 row, 每個 key 都要有數百筆數千筆或甚至上萬筆的 Data, 也就是說在某方面要做資料的逆正規化, 來降低讀取的次數增加讀取效率.
有時候有些資料有不同的觀點與不同的運作模式, 所以可能須要前台後台, 使用者或資料計算的不同資料庫的處理型態去設計, 不同的時期有不同的資料庫儲存與處理的方式, 當然在這某方面是為了效率考量, 也就是說, 要為了讀取去設計不同的 Schema, 所以有時要去 Replicate 出不同的使用環境, 而又要去逆正規化的動作.
資料庫永遠都是許多資料處理的瓶頸, 所以要降低這個瓶頸的發生, 就是把大部份的工作不要交給資料庫去做, 尤其是像 Join, Order, Distinct, 能不用就不要用, 就交給程式去處理, 尤其會有 Temp Table 發生的事就要避免去做.
通常系統一定會設計成 Cluster Computing, 也就是說, 許多會有很多 Clinet 同時讀取, 所以要降低 Lock 的機會, 但又要能夠讓更多的 Agent 去處理資料, 這其中就須要讓 Table 的讀取有一定的次序, 也包含須要適時的 Free Result, 甚至是 Close Connection, 這是很多系統不見得會這樣設計的.
雖然說效率是資料庫最重要的事, 且事實上效率調校也是 DBA 重要的責任, 當然所有的 DBA 所學的事以及該學的事都差不了多少, 有時也覺得資料探勘所須要的 DBA 知識不少, 但只是在 DBA 中一個過份要求效率的偏執, 也就是說有時這也是種專業.
當然, 除了程設與 DBA 之外, 系統設計也是很重要, 那我們明天再說.
雖然說我區分成程設, DBA, SA, PM 這四種角色, 但有時要區分很清楚是很困難的...
genehong提到:
DBA 中一個過份要求效率的偏執, 也就是說有時這也是種專業.
是啊...是一種偏執, 要求下精準SQL, 使用最少資源下, 往往可得最快回應~~