NoSQL(Not only sql)基礎簡介
NoSQL是非關係型資料庫
兩者關係,HBase是NoSQL的一種。
NoSQL特性
1.Eventual consistency(最終一致性):
寫入資料庫之後,
你不一定能馬上讀到剛寫入的資料
但最終會保持一致。
2. NoSQL資料庫不怕資料冗餘多副本,因為成本比較低。
而且這樣查詢很多資料就不需要join了,很多資料在一張表裡就搞定了。
關係型資料庫要避免資料冗餘,成本會增加不少。
關係型資料庫本身硬碟是特殊的,空間就已經很貴了,column可以用成char絕對不會用varchar。
NoSQL概念解釋
1. CAP理論:
Consistency:資料一致性
Availability :服務可用性(7x24小時)
Partition Tolerance:分割槽容錯性(不同機器上分散式部署後並行處理,
並可以進行災難恢復。也就是某臺機器上服務掛了,不影響整個系統的繼續處理)
可以看到關係型資料庫比較側重於資料一致性(讀寫隨時一致)和服務7x24小時可用
Nosql資料庫就比較重視一致性和容災,雖然不是強一致性,而是最終一致性
,對於服務7x24小時可用做的也沒那麼好。
HBase的Availability是通過zookeeper實現的,原生不支援,但是有方案。
2. 索引自己看吧,功能比較弱。
HBase要用到HDFS
index一般建在主鍵上。
3. Nosql幾種主流查詢方式
(1)指令碼語言,如js
(2)後面加了對sql語言的支援,但是優化器還沒有,做的不是很好。不如hive。
(3)有些對mapreduce 程式碼也支援,所以mapreduce可以跨節點來計算。
4.Sharding(分片)
和hive partition是一個意思!!!
相當於把一個表,分散式儲存在不同機器上,進而分散式查詢。
5. 根據業務需求來選擇Nosql產品
主要是四類:
(1)key-value store
最廣泛但不是最流行,基於key-value。可以理解為一個大的hashmap table。
對資料結構schema沒有特別要求。
產品如redis等。
資料的格式最大的特點是:都有一個key,比如說下圖中row_id是key,其他列都是value。
(2)wide Column
和key-value方式唯一的區別就是寬列(column families / super column)。
Column famiilies就是一組column的集合,
以Hbase領銜,Google big table,Cassandra等。
更接近大資料的處理規模。
格式如下圖所示,column families也就是多個supercolumn,supercolumn下還有column。
(3)Document Store(完全沒聽懂,但是不重要)
以mongoDB領銜
文件通常是json物件,本身就是一種schema。
(4)用於關係型分析,比如朋友網路如何建立的。
基於圖的資料庫分析會方便。