CGFT《大數據技術原理與應用》中HBase與傳統(tǒng)關系數據庫的對比分析,今天小編帶大家一起學習。
數據庫從20世紀70年代發(fā)展到今天,已經是一種*成熟穩(wěn)定的數據庫管理系統(tǒng),通常具備的功能包括面向磁盤的存儲和索引結構、多線程訪問、基于鎖的同步訪間機制、基于日志記錄的恢復機制和事務機制等。
但是,隨著Web2.0應用的不斷發(fā)展,傳統(tǒng)的關系數據庫已經無法滿足Web2.0的需求,無論在數據高并發(fā)方面,還是在高可擴展性和高可用性方面,傳統(tǒng)的關系數據庫都顯得力不從心,關系數據庫的關鍵特性——完善的事務機制和高效的查詢機制,在eb2.0時代也成為“雞肋”。包括HBase在內的非關系型數據庫的出現,有效彌補了傳統(tǒng)關系數據庫的缺陷,在Web2.0應用中得到了大量使用。
HBase與傳統(tǒng)的關系數據庫的區(qū)別主要體現在以下幾個方面。
數據類型。關系數據庫采用關系模型,具有豐富的數據類型和存儲方式,HBase則采用了更加簡單的數據模型,它把數據存儲為未經解釋的字符串,用戶可以把不同格式的結構化數據和非結構化數據都序列化成字符率,保存到HBase中,用戶需要自己編寫程序把字將半解析成不同的數據類型。
數據操作、關系數假庫中包含了豐富的操作,如插入、刪除、更新、查詢等、其中會涉及復雜的多表連接,通常是借助于多個表之間的主外鍵關聯來實現的。HBase操作則不存在復雜的表與表之間的關系、只有簡單的輔入、查詢、刪除、清空等、因為HBase在設計上就避免了復雜的表和表之間的關系,通常只采用單表的主鍵查詢,所以,它無法實現像關系數據庫中那樣的表和表之間的連接操作。
存儲模式。關系數據庫是基于行模式存儲的,元組或行會被連續(xù)地存儲在磁盤頁中。在讀取數據時、需要順序掃描每個元組、然后、從中篩選出查詢所需要的屬性。如果每個元組只有少量屬性的值對于查詢是有用的、那么基于行模式存儲就會浪費許多做做空間和內存管寬。
HBase是基于列存儲的,每個列族都由幾個文件保存,不同列族的文件是分離的,它的優(yōu)點是:
可以降低10開銷、支持大量并發(fā)用戶查詢、因為僅需要處理可以回答這些查詢的列,而不需要處理與查詢無關的大量數據行;同一個列族中的數據會被一起進行壓縮,由于同一列族內的數據相似度較高,因此,可以獲得較高的數據壓縮比。
數據索引。關系數據庫通常可以針對不同列構建復雜的多個索引,以提高數據訪問性能與關系數據庫不同的是,HBase只有一個索引——行鍵,通過巧妙的設計,HBase中的所有請問方法,或者通過行鍵訪問,或者通過行鍵掃描,從而使得整個系統(tǒng)不會慢下來,由于HBase位于Hadoop框架之上,因此,可以使用Hadoop MapReduce來快速,高效地生成索引表。
數據維護。在關系數據庫中,更新操作會用*的當前值去替換記錄中原來的舊值,舊信被覆蓋后就不會存在。而在HBase中執(zhí)行更新操作時,并不會刪除數據舊的版本,而是生成一個新的版本,舊有的版本仍然保留。
可伸縮性。關系數據庫很難實現橫向擴展,縱向擴展的空間電比較有限,相反,HBase和BigTable這些分布式數據庫就是為了實現靈活的水平擴展面開發(fā)的,能夠輕易地通過在集群中增加或者減少硬件數量來實現性能的伸縮。
但是,相對于關系數據庫來說,HBase也有自身的局限性,如HBase不支持事務,因此,無法實現跨行的原子性。