企業網D1Net 數據中心就是數據處理的中心,數據是數據中心里最寶貴的資產。沒有數據需要處理,數據中心也就失去了存在的意義。僅僅有數據,沒有分析與處理,對于社會來說,這些數據沒有體現出其應該有的價值,通過數據中心對數據進行二次加工處理,則可能產生出巨大的財富。21世紀社會發展開啟了大數據時代,與此同時,大數據也將反作用于社會,將給社會帶來巨大的變革。而只有數據中心才能夠擔負起大數據分析的重任,然而面對這些海量的數據,如何進行高效分析,并得到預期效果,那就是數據中心要認真去考慮的事情了。除了通過耗費大量資金去購買各種服務器,提升網絡和存儲能力這些硬件參數之外,關鍵是要采用高效的軟件數據處理算法,在單位時間內,相同的硬件資源條件下,可以計算更多的數據。下面就來說一說那些常用的數據處理算法。
數據分析的方法有很多,比如聚類分析、因子分析、相關分析、對應分析、回歸分析等等,而這些數據分析的方法往往忽略了一個非常關鍵的因素:計算性能,數據中心需要的就是這些計算性能高的數據分析方法,比如HASH算法,二叉樹算法。
HASH算法一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長度的輸入,通過散列算法,變換成固定長度的輸出,該輸出就是散列值。,HASH算法是根據特定的索引在海量的數據當中以最快的速度查找,這種方法在任何的數據分析中都有應用。比如:我們數據中心有這樣一個應用系統,就是記錄進入數據中心人員,那么當我們需要知道某個人是否以前也曾進入數據中心的時候,就需要在以往的登記數據中查找,比如我們系統記錄的是身份證號碼,那么怎么樣才能以最快的速度匹配呢。當然我們可以從頭到尾一條一條的查找,這時找到花費的時間是不定的,可能一次就找到,也可能幾千次都找不到。若采用HASH算法,基本通過一次查找就可以找到。我們可以通過HASH算法,將每個進入數據中心的人身份證都進行HASH計算(一般是選取不同位的數值進行異或運算),算出來的索引記錄保存到HASH 表中,隨著進入的人越來越多,HASH表也會越來越大。當我們需要得到現在進入數據中心的人是否曾經來過,那么根據這個人的身份證數據算出索引值,根據這個索引值直接去HASH表的這個位置去看是否為空,如果非空,就表明此人曾經來過,如果是空,就表明此人以前從來沒有進入過。這只是一個HASH算法的舉例,實際的應用系統算法要比這個復雜得多,但數據處理的根本還是要靠HASH算法來提升計算性能,有時甚至要做多次HASH計算。
我們在大學學習過數據結構課程的都知道,有個二叉樹算法,這是樹形算法的一種。其計算的理念就是將數據一分為二,然后判斷要查找的數據屬于哪一部分,這樣一次計算就排除掉了一半的數據量,以此類推,每計算一次就可以排除一半的數據,這種算法雖然沒有HASH 算法效率高,但使用簡單,編程設計容易實現,在一些要求不太高的軟件計算系統中也應用很普遍。這兩種算法都為在海量數據中查找到需要的數據提供了快速的計算方法,其實我們在百度上沒搜索一次,就是在海量的網頁里面查找想要搜索的數據,那么在搜索的算法中,就廣泛地使用了HASH和二叉樹算法,除了這些算法,還有一種就是集群算法。
在海量的網頁里查找到關鍵字,僅僅靠一臺服務器計算是不可能在短時間完成的,而我們在搜索的時候幾乎在一秒之內就會得到數萬條搜索記錄,其實后臺是靠數百臺服務器同時計算完成的,這些服務器我們定義為一個集群系統。集群技術就是使用多個服務器的計算資源來共同完成一件事,和我們經常談及的云計算類似,可以將集群技術歸結為云計算的前身,在云計算概念沒有出來之前,基本都是集群技術的天下。比如在奇虎360,采用200臺服務器完成搜索的工作,當然百度的搜索集群的服務器數量要更多一些,當一個搜索詞語進來,通過集群技術就將需求同時發向200臺服務器,每臺服務器將計算的結果發給發出請求的服務器,這200臺服務器哪個都可以作為發起請求的服務器,當得到其余199臺設備返回的結果,然后就將計算的結果返回給用戶。通過增加集群里服務器的數量,就可以達到提升計算性能的目的。另外集群技術還有一個好處,就是假如這200臺設備有一臺是故障的,并不會大大影響計算的性能,有其余的199臺承擔全部的搜索需求,避免出現由于單臺硬件故障導致搜索功能無法使用。在我們實際的使用中可以回憶一下幾乎從來沒有遇到過百度搜索不好用的情況,就是因為采用了集群技術,不僅計算速度快,還能避免單點故障導致整個搜索無法進行。一般搜索系統至少多做好兩到三個集群系統,當其中一個集群無法工作時,可以將搜索需求調整到其它的集群系統中來計算完成,避免了整個搜索業務癱瘓掉。
除了這些算法,其實還有不少的提升計算性能的好方法,比如哈夫曼編碼,數據挖掘的K-means,isodata等,這些算法都不是太常用,但是在算法領域都是比較知名的,在數據中心的各種軟件應用系統中也很常見。
本文簡單介紹了數據中心最常用的一些數據分析算法,本意就是希望對數據中心里軟件對提升數據處理效率的作用和硬件一樣不能小視,高性能的數據中心并不意味著一定不斷地引進先進的計算設備,優化軟件處理算法往往可以讓數據中心的計算效率有質的提升。