1.1 數據管理技術算法
Ø 信息是現實世界中對客觀事物的反映。這種反映主要體現爲事物屬性的表現形式,是對事物存在方式或運動狀態的刻畫。數據庫
Ø 信息的主要特徵編程
• 可傳遞性:信息是能夠傳遞的,但其傳遞的前提是必須有載體,且傳遞過程消耗能量。數組
• 可感知性:信息能夠被人類「感受」獲得的,但感受的方式可能因爲信息源的不一樣而呈現多樣性。安全
• 可管理性:信息是能夠被管理的,咱們能夠經過必定的方法對信息進行加工、存儲、傳播、再生和增值等。性能優化
Ø 數據是描述事務的符號記錄,是信息的符號化表示,是信息的載體。服務器
• 數據是信息表示的一種符號形式。這種符號形式能夠是語言、圖表、數字、聲音等。但無論用什麼樣的符號形式,其目的只有一個,那就是客觀地反映信息的內容。信息的內容不會隨着數據表現形式的不一樣而改變。網絡
Ø 信息和數據的區分和聯繫:數據結構
• 數據是信息的載體,能夠有多種表現形式,其目的都是爲了揭示信息的內容;架構
• 信息是數據的內涵,它僅由客觀事物的屬性來肯定,而與數據形式無關。
但在實際應用中,若是不須要特別強調信息和數據的差別,這兩個概念每每是互換的。例如,「信息處理」和「數據處理」一般意指有相同內涵的兩個概念。
數據處理
Ø 數據處理也稱信息處理,它泛指用計算機對各類類型數據進行的處理操做。
Ø 這些操做包括對數據進行採集、轉換、分類、存儲、排序、加工、維護、統計和傳輸等系列活動。
Ø 數據處理的目的是從原始數據中提取有價值的、可做決策依據的信息。
數據管理
Ø 數據管理指在複雜的數據處理過程當中的一些基本操做,如數據存儲、分類、統計和檢索等。
Ø 數據管理是數據處理的任務之一,是數據處理的核心內容,數據庫系統的基本功能就是數據管理。
這一階段主要指是從計算機誕生到20世紀50年代中期的這一個時期。世界上第一臺計算機ENIAC於1946年2月14日在美國賓夕法尼亞大學誕生,在隨後的近十年中計算機的主要應用是科學計算,處理的是數字數據,數據量不大。
計算機沒有操做系統(實際上當時根本沒有操做系統的概念),也沒有數據的管理軟件,是以批處理方式對數據進行計算。
計算機硬件自己也沒有磁盤,所使用的「存儲設備」是磁帶、卡片等。
人工處理階段數據管理技術的特色體如今:
Ø 數據不保存。一是當時計算機所處理的數據量很小,不須要保存;二是計算機自己就沒有有效的存儲設備。
Ø 數據缺少獨立性和有效的組織方式。這體如今數據依賴於應用程序,缺少共享性。其緣由在於,數據的邏輯結構跟程序是緊密聯繫在一塊兒的,程序A處理的數據,對程序B而言可能就沒法識別,更談不上處理。解決的辦法是修改數據的邏輯結構,或者修改應用程序。顯然,這種數據管理方法僅適用於小量數據,對大量數據則是低效的。
Ø 數據爲程序所擁有,冗餘度高。因爲數據缺少獨立性,一組數據只能爲一個程序所擁有,而不能同時爲多個程序所共享,這就形成了一份數據的多個拷貝,各程序之間存在大量重複的數據,從而產生大量的冗餘數據。
這一階段是從50年代後期到60年代中期的這一段時間。這個時期,計算機除了用於科學計算之外,還大量用於數據的管理。
計算機已經有了操做系統,而且在操做系統之上已經開發了一種專門用於數據管理的軟件——文件管理系統。在文件管理系統中,數據的批處理方法發展到了文件的批處理方式,且還能夠實現了必定程度的聯機實時處理。
計算機硬件自己已經出現了磁盤、磁鼓等外部存儲設備計算機硬件經出現了磁盤、磁鼓等外部存儲設備。
文件系統階段特色
Ø 計算機的應用從單純的科學計算逐步轉移到數據處理,特別是在該階段的後期,數據處理已經成爲計算機應用的主要目的。主要限於對文件的插入、刪除、修改和查詢等基本操做。
Ø 數據按照必定的邏輯結構組成文件,並經過文件實現數據的外部存儲。即數據是以文件的方式存儲在外部存儲設備中,如磁盤、磁鼓等。
Ø 數據具備必定的獨立性。因爲數據是以文件的方式存儲,文件的邏輯結構與存儲結構能夠自由地進行轉換,因此多個程序能夠經過文件系統對同一數據進行訪問,實現了必定程度的數據共享。
Ø 文件形式具備多樣化,除了數據文件之外還產生了索引文件、連接文件、順序文件、直接存取文件和倒排文件等。
Ø 基本上以記錄爲單位實現數據的存取。
缺點:
Ø 數據和程序並不相互獨立,數據冗餘度仍然比較大。一個程序基本上是對應着一個或一組文件,即數據仍是面向應用的,不一樣的程序還需創建本身的數據文件,能真正實現數據共享的狀況並很少。緣由在於,文件中數據的邏輯結構與其對應的程序密切相關,並且沒有統一標準的邏輯結構。
Ø 難以保證數據一致性。因爲文件之間沒有關聯機制,因此當對一個數據進行更改時難以保證對該數據的其餘副本進行一樣的更改。
Ø 文件的數據表達能力十分有限。這主要體如今,文件中的數據結構比較單一,也比較簡單,還難以表示複雜的數據結構。
數據庫系統階段始於20世紀60中後期,一直到如今。這時計算機除了用於科學計算之外,更多時候是用於數據管理,並且數據的量已經很大,管理功能也愈來愈強大。
計算機硬件自己也發生了深入的變化,出現了大容量磁盤和高主頻的CPU等。
在軟件上,數據的管理軟件已經由原來的文件系統上升到了數據庫管理系統(DBMS)。
數據管理的主要特色是數據集中存放在一個地方,這個地方就是所謂的數據庫。應用程序要實現對數據庫中的數據進行訪問,則必須經過數據庫管理系統來完成。
數據庫技術是基於數據庫的數據管理技術。其特色:
• 數據組織的結構化。從整體上看,文件系統中的數據是「渙散」的,而數據庫中的數據是結構化的,具備統一的邏輯結構。數據的結構化是數據庫的主要特徵之一,是數據庫和文件系統的最大和根本的區別。
• 減小數據冗餘度,加強數據共享性。從整個系統上看,數據再也不面向某一個特定的應用程序,而是面向由全部應用程序組成的系統。因此一個數據能夠爲多個應用程序所共享,一個應用程序也能夠同時訪問多個數據。
• 保證數據的一致性。經過創建文件間的關聯,使得在對某一個數據進行更新時,與之相關的數據也獲得相應更改。
• 具備較高的數據獨立性。在數據庫系統中,數據獨立性包含兩個方面,一個是數據的物理獨立性,另外一個是數據的邏輯獨立性。
數據的物理獨立性是指在數據的物理存儲結構發生改變時,數據的邏輯結構能夠不變的特性;
數據的邏輯獨立性是指在整體邏輯結構改變時,應用程序能夠不變的一種特性。
數據庫之因此具備較好的數據獨立性,主要是由於數據庫提供了兩個映象功能:數據的存儲結構和邏輯結構之間的映象或轉換功能以及數據的整體邏輯結構和局部邏輯結構之間的映象功能。前者保證了數據的物理獨立性,後者則保證了數據的邏輯獨立性。
• 以數據項爲單位進行數據存取。相對文件系統而言,數據庫能夠實現更小粒度的數據處理,知足更多的應用需求。
• 具備統一的數據控制功能。這些功能包括數據的安全性控制、完整性控制、併發控制和一致性控制等功能。
數據管理技術發展的這三個階段是一個漸進的過程,它們的區別主要體如今應用程序和數據的關係上:
Ø 在人工管理階段,應用程序和數據是「混合」在一塊兒;
Ø 在文件系統階段,應用程序則經過文件系統完成對數據的訪問,實現了數據和程序必定程度的分離;
Ø 在數據庫系統階段,應用程序是經過數據庫管理系統(DBMS)對數據進行訪問,實現了數據和程序的高度分離。
三個階段之間的關係表示:
2008年,英國著名學術雜誌《Nature》上推出了大數據的專刊。
美國一些知名數據管理領域的專家從專業角度出發聯合發佈了一份名爲《大數據的機遇與挑戰》(Challenges and opportunities with big data)的白皮書,從學術角度介紹了大數據的產生、處理流程和所面臨的若干挑戰。
在工業界,全球知名的諮詢公司麥肯錫公司(McKinsey)2011年也發表了一份名爲《大數據:下一個創新、競爭和生產力的前沿》(Big Data: the next frontier for innovation, competition and productivity)的詳盡報告,對大數據帶來的巨大影響、關鍵技術和應用領域進行了詳盡闡述和分析。
美國奧巴馬政府更是在2012年發佈了「大數據研究和發展倡議」(Big data research and development initiative),斥資2億多美圓計劃在科研、環境、生物醫學等領域利用大數據分析管理技術取得新的突破。我國政府也於2015年發佈了《中共中央關於制定國民經濟和社會發展第十三個五年規劃的建議》提出實施國家大數據戰略,超前佈局下一代互聯網。
目前「大數據」(Big data)已成爲一個煊赫一時的名詞。從表面上看,其表示數據規模的龐大,但僅僅從數據規模上沒法區分「大數據」這一律念和以往的「海量數據」(Massive data)和「超大規模數據」(Very large data)等概念的區別。然而,至今仍沒有一個對「大數據」公認的準肯定義。
根據維基百科的解釋,大數據指的是數據規模巨大到沒法經過目前主流的軟件工具在合理時間內完成處理的數據集。因而可知,隨着時間的推移,計算機的計算能力、存儲能力會不斷提高,所以大數據的含義也會不斷演化。
今天所說的大數據在將來可能就不算「大」了,但那時也必定仍會存在更大的數據是當時的技術處理不了的,於是仍會被稱爲大數據。可見,如何駕馭大數據將會成爲人們長期須要面對的數據常態。
大數據的「4V」特性:
(1)體量大(Volume)。大數據體如今數據量極爲龐大,其計量單位能夠是TB級、PB級甚至更大的計量單位。
(2)速度快(Velocity)。大數據呈現出高速增加的態勢,並且產生速度仍在不斷加快。
(3)多樣化(Variety)。大數據包含多種多樣的數據類型,既能夠是存儲在二維表中的結構化數據,也能夠是文本、視頻、圖像、語音、圖(Graph)、文件等非結構化數據。
(4)價值高(Value)。大數據中蘊藏着巨大價值,但價值密度低。經過對大數據進行合理的分析,可以從中挖掘出不少有價值的信息,這些信息將有助於提升社會生產效率,提高人們生活質量,或者創造更大商業價值。
隨着大數據時代的到來,傳統關係型數據庫的發展面對大數據時代的數據管理需求愈來愈力不從心,主要體如今:
• 沒法保證對大數據的查詢效率:在大數據時代,短短的1分鐘時間內新浪微博能夠產生2萬條微博,蘋果能夠產生4.7萬次應用下載記錄,淘寶則能夠賣出6萬件商品,百度能夠產生90萬次搜索記錄。可見對於上述公司而言很快就會積累超過10億的數據量。然而,因爲關係模型嚴謹得過於死板,例如複雜的事務處理機制就成爲了阻礙其性能提高的桎梏,使得傳統關係型數據庫在一張包含10億條記錄的數據表之上進行SQL查詢時效率極低。
• 沒法應對繁多的數據類型:關係型數據庫存儲的是清潔規整的結構化數據,然而在大數據時代,數據種類繁多,包括文本、圖片、音頻和視頻在內的非結構化數據所佔比重更是超過了90%,這無疑是關係型數據庫所不能應對的。
• 橫向可擴展能力不足:傳統關係型數據庫因爲自身設計機理的緣由,一般很難實現性價比較高的「橫向擴展」,即基於普通廉價的服務器擴充現有分佈式計算系統,使系統的處理能力和存儲能力獲得提高。而「橫向擴展」是大數據時代計算和存儲的重要需求。
• 很難知足數據高併發訪問需求:大數據時代諸如購物記錄、搜索記錄、朋友圈消息等信息都須要實時更新,這就會致使高併發的數據訪問,可能產生每秒高達上萬次的讀寫請求。在這種狀況下,傳統關係型數據庫引覺得傲的事務處理機制和包括語法分析和性能優化在內的查詢優化機制卻阻礙了其在併發性能方面的表現。
在以上大數據時代的數據管理需求的推進下,各類新型的NoSQL數據庫不斷涌現,一方面彌補了關係型數據庫存在的各類缺陷,另外一方面也撼動了關係型數據庫的傳統壟斷地位。
NoSQL(Not only SQL)不是指某個具體的數據庫,是對非關係型數據庫的統稱。
NoSQL數據庫採用相似鍵/值、列族、文檔和圖(Graph)等非關係數據模型,一般沒有固定的表結構,沒有複雜的查詢優化機制,也沒有嚴格的事務ACID特性的約束,所以和關係型數據庫相比,NoSQL數據庫具備更優秀的查詢效率,更靈活的橫向可擴展性和更高併發處理性,並可以存儲和處理非結構化數據。
根據所採用的數據模型的不一樣,NoSQL數據庫具體又能夠分爲如下四類:
• 鍵值(Key-Value)存儲數據庫。這一類數據庫主要使用哈希表做爲數據索引,哈希表中有一個特定的鍵和一個指針指向特定的數據。這種數據庫的優點是簡單、易部署、查詢速度快;缺點是數據無結構,一般只被看成字符串或者二進制數據。Tokyo Cabinet/Tyrant、Redi、Voldemort、Oracle BDB等都屬於這一類數據庫。
• 列存儲數據庫。這類數據庫一般用來應對分佈式存儲海量數據的存儲需求。在列存儲數據庫中,數據以列簇式存儲,將同一列數據存在一塊兒。這種數據庫的優勢是查找速度快,可擴展性強,更容易進行分佈式擴展;缺點是功能相對侷限。Cassandra、HBase、Riak等屬於這一類數據庫。
• 文檔型數據庫。這類數據庫與鍵值存儲數據庫相似,數據按鍵值(Key-Value)存對的形式進行存儲,但與鍵值存儲數據庫不一樣的是,Value爲結構化數據。這類數據庫適用於Web應用。文檔型數據庫的優勢是對數據結構要求不嚴格,表結構可變,不須要像關係型數據庫同樣須要預先定義表結構;缺點是查詢性能不高,缺少統一的查詢語法。uCouchDB、MongoDB等屬於這一類數據庫。
• 圖(Graph)數據庫。這類數據庫專一於構建關係圖譜,存儲圖結構數據,適用於社交網絡、推薦系統等。圖數據庫的優勢是可以直接利用圖結構相關算法,如最短路徑尋址、N度關係查找等;缺點是不少時候須要對整個圖作計算才能得出須要的信息。Neo4J、InfoGrid、Infinite Graph等屬於這一類數據庫。
NoSQL數據庫不受關係模型約束,具備較好的擴展性,很好地彌補了傳統關係型數據庫的缺陷。但NoSQL數據庫並無一個統一的架構,每一類NoSQL數據庫都有各自適用的場景。同時,NoSQL數據庫不能嚴格保證事務的ACID特性,致使數據的一致性和正確性無法保證。並且NoSQL數據庫缺少完備系統的查詢優化機制,在複雜查詢方面的效率不如關係型數據庫。爲此,業界又提出了NewSQL數據庫。
NewSQL 數據庫是對各類新的可擴展、高性能數據庫的簡稱,這類數據庫不只具備NoSQL對海量數據的存儲管理能力,還保持了傳統數據庫支持事務ACID和SQL等特性。
不一樣NewSQL數據庫的內部架構差別較大,可是有兩個共同的特色:都支持關係數據模型;都是用SQL做爲其主要的訪問接口。
目前市面上已有的NewSQL數據庫有Spanner、PostgreSQL、SAP HANA、VoltDB、MemSQL等。
Ø Spanner是谷歌公司研發的、可擴展的、多版本、全球分佈式、同步複製數據庫,是谷歌公司第一個能夠全球擴展並支持數據外部一致性的數據庫。
Ø PostgreSQL是很受歡迎的開源數據庫,穩定性強,有大量的幾何、字典、數組等數據類型,在地理信息系統領域處於優點地位。
Ø SAP HANA基於內存計算技術,是面向企業分析性應用的產品,主要包括內存計算引擎和HANA建模工具兩部分。
Ø VoltDB是基於內存的關係型數據庫,其採用NewSQL體系架構,既追求與NoSQL體系架構系統具備相匹配的系統可展性,又維護了傳統關係型數據庫系統的事務特性和SQL語言訪問特性,在執行高速併發事務時比傳統的關係型數據庫系統快45倍。
Ø MemSQL有符合ACID特性的事務處理功能、SQL兼容性以及高度優化的SQL存儲引擎,提供了與MySQL相同的編程接口,但速度比MySQL快30倍。
Ø 還有一些在雲端提供存取服務的NewSQL數據庫(亦可稱爲雲數據庫),例如Amazon RDS和Microsoft SQL Azure。
大數據具備數據體量大、產生速度快的特色,於是傳統的單機串行處理模式每每難以完成對大數據的高效處理,必須藉助並行分佈式處理方法。根據大數據應用類型的不一樣,大數據處理模式分爲批處理(Batch processing)和流處理(Stream processing)兩種。下面以Apache的Hadoop和Storm爲例分別介紹批處理和流處理的典型處理模式。
1. 分佈式批處理模式的表明——Hadoop
批處理則是對數據先存儲後統一處理。Hadoop是一個由Apache基金會用Java語言開發的開源分佈式批處理架構,其中實現了MapReduce批處理編程模型。Google公司在2004年提出的MapReduce編程模式是最具表明性的分佈式數據批處理模式。
MapReduce模型包含三種角色:Master進程、Map進程和Reduce進程,其中Master進程負責任務的劃分與調度,Map進程用於執行Map任務,Reduce進程用於執行Reduce任務。該模型的主要思想是Master進程把大規模的數據劃分紅多個較小的部分,分別映射到多個Map進程進行並行處理獲得中間結果,以後由Reduce進程對這些中間結果進行規約、整理,進而獲得最終結果,如圖1.4所示。
一個MapReduce做業(MapReduce Job)的執行流程以下:
(1)首先從用戶提交的程序建立出Master進程,Master進程啓動後劃分任務並根據輸入文件所在位置和集羣信息選擇機器建立出Map進程或Reduce進程;
(2)Master進程將劃分好的任務分配給Map進程和Reduce進程執行,任務劃分和任務分配能夠並行執行;
(3)Map進程執行Map任務,即讀取相應的輸入文件,根據指定的輸入格式不斷地讀取<key, value>對,並對每個<key, value>對執行用戶自定義的Map函數;
(4)Map進程不斷往本地內存緩衝區輸出中間<key, value>對結果,等到緩衝區超過必定大小時寫入到本地磁盤中,Map進程將中間結果組織成文件,便於後續Reduce進程獲取;
(5)Map任務執行完成後向Master進程彙報,Master進程進一步將該消息通知Reduce進程。Reduce進程向Map進程請求傳輸生成的中間結果數據,當Reduce進程獲取完全部的中間結果後,須要進行排序操做;
(6)Reduce進程執行Reduce任務,即對中間結果的每個相同的key及value集合,執行用戶自定義的Reduce函數,Reduce函數的輸出結果被寫入到最終的輸出文件。
除了使用MapReduce批處理編程框架,Hadoop的核心內容還包括HDFS(Hadoop Distributed File System,Hadoop分佈式文件系統)。
HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,適合處理大規模數據集的應用程序。
Hadoop的優勢包含如下幾個方面:
(1)方便部署。Hadoop能夠方便部署在由通常商用機器構成的大型集羣或者雲計算服務之上。
(2)容錯健壯。即便集羣中的計算機硬件頻繁出現失效,Hadoop也可以處理大多數此類故障。
(3)容易擴展。Hadoop經過增長集羣節點,能夠線性地擴展以處理更大的數據集。
(4)使用簡單。Hadoop容許用戶快速編寫出高效的並行代碼。
(5)免費、開源。Hadoop是一款開源批處理框架,能夠無償使用。
Hadoop的典型應用包括網絡搜索、日誌處理、推薦系統、數據分析、視頻圖像分析和數據集成等。
2. 分佈式流處理模式的表明——Storm
和先存儲再處理的批處理模式不一樣,流處理將源源不斷產生的數據視爲數據流,每當新的數據到達系統時就馬上對數據進行處理並返回結果。可見,流處理適合包括網頁點擊數統計、股票交易數據分析和傳感器網絡事件檢測等實時分析應用。Apache Storm是一個免費、開源的分佈式實時流處理系統。Storm在流處理中的地位至關於Hadoop對於批處理的重要地位。
Storm基於拓撲(Topology)實現對數據流的分佈式實時處理。拓撲是一個有向無環圖(Directed Acyclic Graph),一個典型的Storm的拓撲結構如圖1.5所示。
Topology中數據以元組(Tuple)的形式進行轉發和處理。和Hadoop中的MapReduce做業不一樣,Storm的拓撲一經啓動將永久運行,不斷處理實時到達的數據元組。
Storm拓撲由Spout和Bolt兩類組件構成。Spout做爲數據產生者,從一個外部源(例如Kafka)讀取數據並並向Storm拓撲中噴射數據元組。Bolt做爲數據消費者,對所接收的數據元組進行處理和轉發。
一個複雜的Storm拓撲可由多個Spout和多個Bolt組成,且能夠爲每一個Spout或Bolt設置其任務(Task)並行度,由多個任務並行完成其處理邏輯。Storm提供多種組件間的數據分發策略,例如隨機分組(Shuffle grouping)、按字段分組(Field grouping)、全局分組(Global grouping)和廣播發送(All grouping),用以完成Storm拓撲中上游組件的各個任務向下遊組件的各個任務的數據分發.
Storm的優勢包含如下幾個方面:
(1)易整合:Storm能夠方便與數據庫系統進行整合。
(2)易使用:Storm提供豐富的API,方便用戶的使用。
(3)易擴展:Storm能夠方便部署和運行在大規模分佈式集羣中。
(4)易糾錯:Storm能夠自行重啓故障節點,並完成對故障節點任務的從新分配。
(5)可靠的消息處理:Storm保證每一個消息都能被系統完整處理。
(6)免費、開源:Storm是一款開源流處理框架,能夠無償使用。
大數據的一個重要特性就是多樣化(Variety),這意味着產生大數據的來源普遍、類型龐雜、並常常存在數據冗餘和錯漏現象,給數據處理帶來了巨大挑戰。要想處理大數據,首要任務就是對數據源抽取的數據進行合理的集成。
數據集成是指經過訪問、解析、規範化、標準化、整合、清洗、抽取、匹配、分類、修飾和數據交付等功能把不一樣來源、格式、特色、性質的數據在邏輯上或物理上有機地集中,從而爲後期數據處理提供保障。數據集成的目的是保證數據的質量和可信性。若是數據集成工做沒有作好,會致使整個大數據項目的延期甚至失敗。所以,在大數據給人們帶來價值以前,必須對其進行合理的集成。
數據分析是整個大數據處理流程中的核心環節,由於大數據所蘊含的價值須要經過數據分析得以實現。傳統的數據分析技術包括數據挖掘、機器學習、統計分析等在用於處理大數據時可能須要進行必要的調整,由於這些技術在處理大數據時面臨一些新的挑戰,體如今如下幾個方面:
大數據價值大(Value)的特性雖然意味着大數據蘊含了巨大價值,可是大數據同時也存在價值密度低的特色,體如今大數據中存在大量的冗餘數據、噪音數據、遺漏數據和錯誤數據。所以,在進行數據分析以前,須要對大數據進行數據清洗、整合等集成工做。然而,對如此大規模的數據進行清洗和整合無疑會對硬件環境和算法性能提出新的要求。
雖然數據分析是大數據處理的核心,可是用戶更關注對分析結果的展現。即便分析過程高效、分析結果正確,若是沒有經過容易理解的方式給用戶展現大數據的分析結果將會大大下降分析結果的實際價值,極端狀況下甚至會誤導用戶。
傳統的數據解釋方法是在電腦終端上打印顯示分析結果或以文本的形式向用戶呈現分析結果。然而,大數據的分析結果每每規模大並且結果之間的關係錯綜複雜,於是傳統的數據解釋方法不適用於解釋大數據的分析結果。
目前,業界推出了不少數據可視化技術,用圖表等形象的方式向用戶展示大數據的分析結果。常見的數據可視化技術包括標籤雲(Tag cloud)、歷史流(History flow)和空間信息流(Spatial information flow)等。