數據類型與分佈式存儲

數據類型與分佈式存儲

================================================================================

概述:


================================================================================

數據類型

 1.結構化數據

定義:

  • 結構化數據即行數據,存儲在數據庫裏,可以用二維表結構來邏輯表達實現的數據;

  • 能夠用數據或統一的結構加以表示,我們稱之爲結構化數據,如數字、符號傳統的關係數據模型、行數據,存儲於數據庫,可用二維表結構表示;

  • 結構化數據,簡單來說就是數據庫。結合到典型場景中更容易理解,比如企業ERP、財務系統;醫療HIS數據庫;教育一卡通;政府行政審批;其他核心數據庫等。這些應用需要哪些存儲方案呢?基本包括高速存儲應用需求、數據備份需求、數據共享需求以及數據容災需求;

  • 所有關係型數據庫中的數據全部爲結構化數據;

  • 結構化數據:SQL, TPS(事物處理系統)較差, MySQL(主從複製、分庫分表來提升性能);

 2.非結構化數據

定義及作用:

  • 非結構化數據,包括所有格式的辦公文檔、文本、圖片、XML、HTML、各類報表、圖像和音頻/視頻信息等等

  • 相對於結構化數據(即行數據,存儲在數據庫裏,可以用二維表結構來邏輯表達實現的數據)而言,不方便用數據庫二維邏輯表來表現的數據即稱爲非結構化數據,包括所有格式的辦公文檔、文本、圖片、XML、HTML、各類報表、圖像和音頻/視頻信息等等。

  • 非結構化數據庫是指其字段長度可變,並且每個字段的記錄又可以由可重複或不可重複的子字段構成的數據庫,用它不僅可以處理結構化數據(如數字、符號等信息)而且更適合處理非結構化數據(全文文本、圖象、聲音、影視、超媒體等信息)

  • 非結構化WEB數據庫主要是針對非結構化數據而產生的,與以往流行的關係數據庫相比,其最大區別在於它突破了關係數據庫結構定義不易改變和數據定長的限制,支持重複字段、子字段以及變長字段並實現了對變長數據和重複字段進行處理和數據項的變長存儲管理,在處理連續信息(包括全文信息)和非結構化信息(包括各種多媒體信息)中有着傳統關係型數據庫所無法比擬的優勢。

  • 非結構化數據:k-v

 3.半結構化數據

定義及作用:

  • 所謂半結構化數據,就是介於完全結構化數據(如關係型數據庫、面向對象數據庫中的數據)和完全無結構的數據(如聲音、圖像文件等)之間的數據,HTML文檔就屬於半結構化數據。它一般是自描述的,數據的結構和內容混在一起,沒有明顯的區分。

  • 半結構化數據:json, xml (Document Store文檔存儲, mongodb、Elasticsearch)

  4.數據模型

  • 結構化數據:二維表(關係型)

  • 半結構化數據:樹、圖

  • 非結構化數據:無 

  • RMDBS的數據模型有:如網狀數據模型、層次數據模型、關係型 (oracle,mysql等

  • nosql非關係數據庫(memcached,redis,mangodb)

  • 結構化數據:先有結構、再有數據

  • 半結構化數據:先有數據,再有結構

CAP理論(一致性、可用性、分區容錯性)

 CAP理論在互聯網界有着廣泛的知名度,知識稍微寬泛一點的工程師都會把其作爲衡量系統設計的準則。大家都非常清楚地理解了CAP:任何分佈式系統在可用性、一致性、分區容錯性方面,不能兼得,最多隻能得其二,因此,任何分佈式系統的設計只是在三者中的不同取捨而已

定義及作用:

  • C(一致性):所有的節點上的數據時刻保持同步;

  • A(可用性):每個請求都能接受到一個響應,無論響應成功或失敗;

  • P(分區容忍):系統應該能持續提供服務,即使系統內部有消息丟失(分區);

高可用、數據一致是很多系統設計的目標,但是分區又是不可避免的事情

CA without P:

  • 如果不要求P(不允許分區),則C(強一致性)和A(可用性)是可以保證的。但其實分區不是你想不想的問題,而是始終會存在,因此CA的系統更多的是允許分區後各子系統依然保持CA。

CP without A:

  • 如果不要求A(可用),相當於每個請求都需要在Server之間強一致,而P(分區)會導致同步時間無限延長,如此CP也是可以保證的。很多傳統的數據庫分佈式事務都屬於這種模式。

AP wihtout C:

  • 要高可用並允許分區,則需放棄一致性。一旦分區發生,節點之間可能會失去聯繫,爲了高可用,每個節點只能用本地數據提供服務,而這樣會導致全局數據的不一致性。現在衆多的NoSQL都屬於此類。

分佈式存儲技術及應用

 1.海量數據的關鍵環節及面臨的挑戰

大數據下的關鍵環節:

海量數據的生成

  • 訪問日誌數據

  • 業務數據

  • 用戶上傳

海量數據應用

  • 精準廣告

  • 個性化定製

  • 未來預測

海量數據的管理

  • 文件

  • 圖片

  • 數據

大數據帶來的挑戰

  • 數據採集

  • 數據存儲

  • 數據搜索

  • 數據共享

  • 數據傳輸

  • 數據分析

  • 數據可視化

 2.大數據如何存儲

   根據did you know(http://didyouknow.org/)的數據,目前互聯網上可訪問的信息數量接近1秭= 1百萬億億 (1024)。毫無疑問,各個大型網站也都存儲着海量的數據,這些海量的數據如何有效存儲,是每個大型網站的架構師必須要解決的問題。分佈式存儲技術就是爲了解決這個問題而發展起來的技術.

傳統存儲問題:

  • 縱向擴展受陣列空間限制;

  • 橫向擴展受交換設備限制;

  • 節點受文件系統限制

如:NFS圖片存儲會遇到帶寬、存儲空間、請求併發等問題

分佈式存儲的概念:

  • 與目前常見的集中式存儲技術不同,分佈式存儲技術並不是將數據存儲在某個或多個特定的節點上,而是通過網絡使用企業中的每臺機器上的磁盤空間,並將這些分散的存儲資源構成一個虛擬的存儲設備,數據分散的存儲在企業的各個角落。

分佈式存儲系統的特性:

可擴展(Scalable)

  • 分佈式存儲系統可以擴展到幾百臺甚至幾千臺的集羣規模,而且,隨着集羣規模的增長,系統整體性能表現爲線性增長。

可靠性(Reliable)

  • 高性能。無論是針對整個集羣還是單臺服務器,都要求分佈式存儲系統具備高性能。

低成本(Cheap)

  • 分佈式存儲系統的自動容錯、自動負載均衡機制使其可以構建在普通PC機之上。另外,線性擴展能力也使得增加、減少機器非常方便,可以實現自動運維。

易用

  • 分佈式存儲系統需要能夠提供易用的對外接口,另外,也要求具備完善的監控、運維工具,並能夠方便地與其他系統集成,例如,從Hadoop雲計算系統導入數據。

分佈式存儲的機制分類:

通用分佈式存儲:

  • 分佈式存儲(不支持掛載,不支持複雜的文件系統機制,不支持權限模型),mogilefs, fastdfs, ...

專用分佈式存儲:

  • 分佈式文件系統(支持掛載), moosefs, ...

分佈式存儲的挑戰

  • 節點間通信;

  • 數據存儲;

  • 數據空間平衡;

  • 容錯;

  • 文件系統支持

分佈式存儲的核心點

  • 元數據存儲(高效)

  • 數據存儲(冗餘)

存儲一般分爲兩種類型:

集中式:

  • NAS:Network Attached Storage; 文件系統級別, 例如NFS, FTP, SAMBA… 

  • SAN:Storage Aera Network; 塊級別, 例如IP SAN, FC SAN…

分佈式 :

  • 中心節點存儲:每個集羣中有節點專門用來存儲元數據, 其他節點則存儲部分數據 

  • 無中心節點存儲:每個集羣各節點都存儲元數據和部分數據

分佈式存儲和分佈式文件系統:

  • 文件系統: 有文件系統接口

  • 存儲: 無文件系統接口, 通過API訪問

分佈式存儲文件系統的常見實現

Google Filesystem

GFS擅長處理單個大文件

GFS+MapReduce (編程模型-運行框架-API)可以實現程序切割到多節點運行,實現分佈式處理

Hadoop Distributed Filesystem

根據GFS思想開發的,擅長處理單個大文件

ClusterFS擅長處理單個大文件
Taobao Filesystem淘寶開源的文件系統,擅長處理海量小文件,適用於大規模場景。
MogileFS是一個高性能的分佈式存儲,擅長處理海量小文件
Ceph是一個 Linux PB級別的分佈式文件系統,測試中
MooseFS分佈式文件系統,兼容POSIX(FUSE),可以直接掛載使用,當節點多,併發量大環境中,可擴展性差,性能一般。
Lustre一種平行分佈式文件系統

 3.具體技術及應用

  -海量的數據按照結構化程度來分,可以大致分爲結構化數據,非結構化數據,半結構化數據

結構化數據的存儲及應用

定義:

  • 所謂結構化數據是一種用戶定義的數據類型,它包含了一系列的屬性,每一個屬性都有一個數據類型,存儲在關係數據庫裏,可以用二維表結構來表達實現的數據。

存儲:

  • 大多數系統都有大量的結構化數據,一般存儲在oraclaMySQL的等的關係型數據庫中,當系統規模大到單一節點的數據庫無法支撐時,一般有兩種方法:垂直擴展與水平擴展。

垂直擴展:

  • 垂直擴展比較好理解,簡單來說就是按照功能切分數據庫,將不同功能的數據,存儲在不同的數據庫中,這樣一個大數據庫就被切分成多個小數據庫,從而達到了數據庫的擴展。一個架構設計良好的應用系統,其總體功能一般肯定是由很多個鬆耦合的功能模塊所組成的,而每一個功能模塊所需要的數據對應到數據庫中就是一張或多張表。各個功能模塊之間交互越少,越統一,系統的耦合度越低,這樣的系統就越容易實現垂直切分。

水平擴展:

  • 簡單來說,可以將數據的水平切分理解爲按照數據行來切分,就是將表中的某些行切分到一個數據庫中,而另外的某些行又切分到其他的數據庫中。爲了能夠比較容易地判斷各行數據切分到了哪個數據庫中,切分總是需要按照某種特定的規則來進行的,如按照某個數字字段的範圍,某個時間類型字段的範圍,或者某個字段的hash值。

垂直擴展與水平擴展各有優缺點,一般一個大型系統會將水平與垂直擴展結合使用。

非結構化存儲及應用

定義:

  • 相對於結構化數據而言,不方便用數據庫二維邏輯表來表現的數據即稱爲非結構化數據,包括所有格式的辦公文檔、文本、圖片、XML、HTML、各類報表、圖像和音頻/視頻信息等等。

存儲:分佈式存儲

分佈式文件系統是實現非結構化數據存儲的主要技術,

  • Google File System(GFS)

  • Hadoop Distributed Filesystem(HDFS)

  • TFS:Taobao Filesystem

  • GlusterFS(去中心化設計)

  • Lustre,HPC

  • Ceph(內核級別構建)

  • Mogile Filesystem(分佈式存儲)

    ·API(php,java,perl,python)

  • Moose Filesystem(MFS)

  • FastDFS

半結構化存儲及應用

定義:

  • 就是介於完全結構化數據(如關係型數據庫、面向對象數據庫中的數據)和完全無結構的數據(如聲音、圖像文件等)之間的數據, 半結構化數據模型具有一定的結構性,但較之傳統的關係和麪向對象的模型更爲靈活。半結構數據模型完全不基於傳統數據庫模式的嚴格概念,這些模型中的數據都是自描述的。

  • 由於半結構化數據沒有嚴格的schema定義,所以不適合用傳統的關係型數據庫進行存儲,適合存儲這類數據的數據庫被稱作“NoSQL”數據庫。

存儲:NoSQL 數據庫

  • 被稱作下一代的數據庫,具有非關係型,分佈式,輕量級,支持水平擴展且一般不保證遵循ACID原則的數據儲存系統。“NoSQL”其實是具有誤導性的別名,稱作Non Relational Database(非關係型數據庫)更爲恰當。所謂“非關係型數據庫”指的是:

  • 使用鬆耦合類型、可擴展的數據模式來對數據進行邏輯建模(Map,列,文檔,圖表等),而不是使用固定的關係模式元組來構建數據模型。

  • 以遵循於CAP定理(能保證在一致性,可用性和分區容忍性三者中中達到任意兩個)的跨多節點數據分佈模型而設計,支持水平伸縮。這意味着對於多數據中心和動態供應(在生產集羣中透明地加入/刪除節點)的必要支持,也即彈性(Elasticity)。

  • 擁有在磁盤或內存中,或者在這兩者中都有的,對數據持久化的能力,有時候還可以使用可熱插拔的定製存儲。

  • 支持多種的‘Non-SQL’接口(通常多於一種)來進行數據訪問。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章