hbase實戰——(1.1 nosql介紹)


什么是nosql

NoSQL(NoSQL = Not Only SQL),意思是不僅僅是SQL的擴展,一般指的是非關系型的數據庫。

隨着互聯網web2.0網站的興起,傳統的關系數據庫在應付web2.0網站,特別是超大規模和高並發的SNS類型的web2.0純動態網站已經顯得力不從心,傳統的電信行業動輟就千萬甚至上億的數據,甚至有客戶提出需要存儲相關的日志數據50年以上,暴露了很多難以克服的問題,而非關系型的數據庫則由於其本身的特點得到了非常迅速的發展。

關系型數據庫難以克服的問題:

  • 不能很好處理對數據庫高並發讀寫的需求
  • 不能很好處理對海量數據的高效率存儲和訪問的需求
  • 不能很好處理對數據庫的高可擴展性和高可用性的需求

為什么使用nosql

SQL語言和關系型數據庫(MySQL、PostgreSQL、Oracle等)是通用的數據解決方案,占有絕大多數的市場。但是就像上面提到的,它有很多難以解決的問題。不過在最近興起的NoSQL運動中,涌現出一批具備高可用性、支持線性擴展、支持Map/Reduce操作等特性的數據產品,它們具有如下特性:

  • 頻繁的寫入操作、相對較少的讀取統計信息的操作
  • 海量數據(如數據倉庫中需要分析的數據)適合存儲在一個結構松散、分布式的文件存儲系統中
  • 存儲二進制文件(如mp3或者pdf文檔)並且能夠直接為用戶的瀏覽器提供下載功能

使用這些數據產品並不是要取代原有的數據產品,而是為不同的應用場景提供更多的選擇。也就是說,在一些特定的情況下如果是關系型的數據庫解決不了的問題,那么就可以考慮使用nosql,而不是說完全將應用移植到nosql上,畢竟適合才是最好的。

現在流行的nosql

下面對現在的nosql進行了整理,其中包括各種nosql的官方網站。

15個nosql數據庫

HBase是什么

HBase是Apache Hadoop中的一個子項目,Hbase依托於Hadoop的HDFS作為最基本存儲基礎單元,通過使用hadoop的DFS工具就可以看到這些這些數據 存儲文件夾的結構,還可以通過Map/Reduce的框架(算法)對HBase進行操作,如下圖所示:

HBase在產品中還包含了Jetty,在HBase啟動時采用嵌入式的方式來啟動Jetty,因此可以通過web界面對HBase進行管理和查看當前運行的一些狀態,非常輕巧方便。

HBase是Apache Hadoop中的一個子項目,現已成為Apache的頂級項目。

HBase是Google Bigtable(基於Google File System)的開源山寨版本。

為什么采用HBase

HBase 不同於一般的關系數據庫,它是一個適合於非結構化數據存儲的數據庫.所謂非結構化數據存儲就是說HBase是基於列的而不是基於行的模式,這樣方便讀寫你的大數據內容。

HBase是介於Map Entry(key & value)和DB Row之間的一種數據存儲方式。就點有點類似於現在流行的Memcache,但不僅僅是簡單的一個key對應一個 value,你很可能需要存儲多個屬性的數據結構,但沒有傳統數據庫表中那么多的關聯關系,這就是所謂的松散數據。

簡單來說,你在HBase中的表創建的可以看做是一張很大的表,而這個表的屬性可以根據需求去動態增加,在HBase中沒有表與表之間關聯查詢。你只需要 告訴你的數據存儲到Hbase的那個column families 就可以了,不需要指定它的具體類型:char,varchar,int,tinyint,text等等。但是你需要注意HBase中不包含事務此類的功能。

Apache HBase 和Google Bigtable 有非常相似的地方,一個數據行擁有一個可選擇的鍵和任意數量的列。表是疏松的存儲的,因此用戶可以給行定義各種不同的列,對於這樣的功能在大項目中非常實用,可以簡化設計和升級的成本。

HBase的存儲結構

HBase 是基於列的數據庫,讓我們看一下關系型數據庫和hbase數據庫存儲的對比。

行式存儲和列式存儲對比:

行式存儲

  • 數據是按行存儲的
  • 沒有索引的查詢使用大量I/O
  • 建立索引和物化視圖需要花費大量時間和資源
  • 面對查詢的需求,數據庫必須被大量膨脹才能滿足性能要求

列式存儲

數據按列存儲——每一列單獨存放

數據即是索引

只訪問查涉及的列——大量降低系統IO

每一列由一個線索來處理——查詢的並發處理

數據類型一致,數據特征相似——高效壓縮

HBase與關系型數據庫的對比

HBase 是基於

下面的表格中hbase和RDBMS的對比關系

 

HBase

RDBMS

數據類型

只有字符串

豐富的數據類型

數據操作

簡單的增刪改查

各種各樣的函數,表連接

存儲模式

基於列存儲

基於表格結構和行存儲

數據保護

更新后舊版本仍然會保留

替換

可伸縮性

輕易的進行增加節點,兼容性高

需要中間層,犧牲功能

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM