Storage and Big Data 大資料時代的儲存方式
一個巨大的資料流正在人類社會不斷的流動,他們的形成來自於各式不同的載具和設備 – 43億支手機和20億個互聯網用戶伴隨著300億個RFID標籤和數以千計的衛星不斷地傳送訊號。史上沒有任何一個時代像現在的人每日處理這麼大的資料。然而隨著餅不斷的長大,每個人所分到的部分也不斷的擴大。當你操作的那塊餅是以zettabytes計量,即使是很小的一塊也是非常的可觀。Twitter每日增加的總資料量為12 terabytes,這可是每則訊息不得超過140個字元限制下的值。
大型資料的處理是一個全新的範疇,大家都有不同的解釋與應對的理論,但是唯一的共識就是這個挑戰是前所未有的。
1000個Twitter使用者所產生的Big Data(網路截取時間為2012-02-28 01:55 UTC)
(http://siliconangle.com/blog/2012/02/28/marc-smith-from-social-media-research-foundation-speaks-on-big-data/)
上篇文章介紹了甚麼是Big Data以及近年來在各行各業的泛用性。以程式人員的角度介紹了新一代虛擬機Java HotSpot VM在處理大資料上的優勢。然而處理大型資料時所需注意的問題很多,除了使用對的開發工具外,資料儲存方式在分析時期就佔了關鍵性的因素。
Big Data: The three V’s
一般人聽到Big Data這個名詞就會立即聯想到大量資料。然而資料的數量(volume)只是第一個挑戰,另外兩個挑戰就是速度(velocity)和多變性(variety)。速度指的是收集、處理和使用資料的速度。很多分析演算法經過徹夜的計算足以處理大量的資料,然而講求即時的系統例如國家安全機制或是兒童醫療照護,數夜的等待就不足以滿足需求。
多變性指的是資料種類,視訊、音訊、文字和以上的混合等非結構性資料。傳統的資料庫可利用指令(例如select或是join)有效地處理以rows和columns形式儲存的資料。然而事實上並非所有的資料都適合用rows和columns的關係來儲存,這造成了資料分析上的困難。
當我們把以上三個挑戰擺在一起看,問題可能就更複雜了。如果我們要針對以上特性來儲存資料,現有的技術似乎已經不太可能達成。「傳統的資料庫,設計就是一切。全都是架構上的問題,如果資料改變了,或是你想知道甚麼改變了,或是你想將資料與其他的倉庫結合,你就必須改變倉庫所有的架構。在Big Data的觀念下,你通常只處理延續性的需求和一些與你任務上有關的資料來源,而非整個資料庫設計」 – IBM Information Management program director Tom Deutsch說到。
通常80%的資料都是非結構性的
(http://blog.prabasiva.com/2012/04/09/traditional-edw-vs-big-data/)
新的分析技術 – Apache Hadoop & NoSQL
Hadoop是由Doug Cutting所發起的Open Source分散式框架,發展自google的GFS與Map Reduce架構而來。不但擁有公有雲等級的資料儲存能力,並內建資料與任務的容錯機制,無需特殊硬體規格。為了獲得更好的速度與彈性,MapReduce將問題拆解為數以百萬計的平行運算到Map phase,輸出成帶有key-value的資料流在Reduce phase寫入到file system。例如當處理大量的銷售數據以獲得某個產品的銷售狀況時,Hadoop會將每個包含轉帳紀錄的檔案以Map的形式處理,最後再加總到每個產品的交易總和。基於Map和Reduce的機制,Hadoop非常的易於理解與使用,已經廣泛的運用在各種問題上,由其是社群媒體。
a Hadoop cluster infrastructure diagram
(http://www-01.ibm.com/software/ebusiness/jstart/hadoop/)
剛剛提到的Hadoop不是一個資料庫,它是一個filesystem(HDFS)和分散式程式設計框架的組合。接下來要介紹的NoSql就是一個真正的資料庫,然而它不是我們一般認知的關聯式資料庫 。 NoSql與傳統式資料庫兩者存在許多顯著的不同點,其中最重要的是NoSQL不使用SQL做為查詢語言,其資料儲存不需要固定表格模式,也經常避免使用join的操作,一般有水平可擴展性的特徵。NoSql的出現是為了改良關聯式資料庫設計上的瓶頸;例如為巨量的資料建立索引或是高流量的多媒體網站服務,傳統資料庫都展現了不佳的效能。其實現具有兩個特徵,主要使用硬碟,或者是盡可能把隨機存儲器當作存儲載體,目前主要有4種類型,分別是Key-Value資料庫、記憶體資料庫(In-memory Database)、圖學資料庫(Graph Database)以及文件資料庫(Document Database)。
我們大致介紹一下最常被用到Key-Value類型。這類資料最大的特色就是採用Key-Value資料,如同我們剛剛提到的Hadoop框架,使用的是HBase。另外還有Google的BigTable、Amazon的Dynamo、Cassandra、Hypertable等都是此類資料庫。Google自行研發的BigTable建置在Google的檔案系統GFS上,且大量的使用在自家的應用程式,例如Gmail、Google map以及Youtube等應用。BigTable是一張可以儲存PB等級的資料表,雖然Goole App Engine提供了類似select的語法來查詢Big Table的資料,但是不像是關聯式資料庫可以用join來進行跨表查詢。雖然Big Table的出現解決了一些問題,但是Google並沒有釋出相關雲端運算平台。所以Hadoop的框架因此出現,並發展出HBase分散式資料庫。HBase利用我們之前提到的MapReduce平行運算機制,也是在一張大資料表中存很多行資料,每一行的結構同樣有一個主要的Key值和任意數量的列欄位。
資料儲存與攫取技術的革新正在進行,儘管Oracle依然宣稱其資料庫類似MapReduce的機制早已存在,但是隨著多型態社群網站如雨後春筍般的大量出現,衍生出即時處理Big Data的需求,非關連性資料庫的角色已經日漸重要。雖然它的出現並不能解決所有的問題,也不可能因此摒棄傳統關聯式資料庫。但是業界已經開始有搭配使用的例子。這部分將來如果有實作上的心得,會再向大家報告。