Hive數據倉庫與數據庫的異同


Hive和數據庫除了擁有類似的查詢語言,再無類似之處。

數據庫可以用在Online的應用中,但是Hive是為數據倉庫而設計的(由於數據的訪問延遲較高,決定了 Hive 不適合在線數據查詢。

1.

由於 Hive 是針對數據倉庫應用設計的,而數據倉庫的內容是讀多寫少的。因此,Hive 中不支持對數據的改寫和添加,所有的數據都是在加載的時候中確定好的。而數據庫中的數據通常是需要經常進行修改的,因此可以使用 INSERT INTO ...  VALUES 添加數據,使用 UPDATE ... SET 修改數據。

 Hive的加載,是將整個文件加載到對應的HDFS中,不會對數據本身有任何修改。可以簡單理解為:hive的元數據,對應的是文件的位置,數據庫對應的是文件里面內容的位置。

Hive 在加載的過程中不會對數據本身進行任何修改,而只是將數據內容復制或者移動到相應的 HDFS 目錄中。而在數據庫中,不同的數據庫有不同的存儲引擎,定義了自己的數據格式。所有數據都會按照一定的組織存儲,因此,數據庫加載數據的過程會比較耗時。

2.

索引。之前已經說過,Hive 在加載數據的過程中不會對數據進行任何處理,甚至不會對數據進行掃描,因此也沒有對數據中的某些 Key 建立索引。Hive 要訪問數據中滿足條件的特定值時,需要暴力掃描整個數據,因此訪問延遲較高。由於 MapReduce 的引入, Hive 可以並行訪問數據,因此即使沒有索引,對於大數據量的訪問,Hive 仍然可以體現出優勢。數據庫中,通常會針對一個或者幾個列建立索引,因此對於少量的特定條件的數據的訪問,數據庫可以有很高的效率,較低的延遲。由於數據的訪問延遲較高,決定了 Hive 不適合在線數據查詢。

Hive 在查詢數據的時候,由於沒有索引,需要掃描整個表,因此延遲較高。另外一個導致 Hive 執行延遲高的因素是 MapReduce 框架。由於 MapReduce 本身具有較高的延遲,因此在利用 MapReduce 執行 Hive 查詢時,也會有較高的延遲。相對的,數據庫的執行延遲較低。當然,這個低是有條件的,即數據規模較小,當數據規模大到超過數據庫的處理能力的時候,Hive 的並行計算顯然能體現出優勢。

 3.

由於 Hive 建立在集群上並可以利用 MapReduce 進行並行計算,因此可以支持很大規模的數據;對應的,數據庫可以支持的數據規模較小。

界上最大的 Hadoop 集群在 Yahoo!,2009年的規模在 4000 台節點左右

目前最先進的並行數據庫 Oracle 在理論上的擴展能力也只有 100 台左右。

 

Hive是一個應用層的東西,定位是數據倉庫,所偏向的是數據分析,存儲和計算的方向,其本質是mapreduce。

Hive的應用場景

1》數據挖掘:

1.數據用戶行為分析

2.興趣分區

3.區域展示

2》非實時分析

1.日志分析

2.文本分析

3》數據匯總

1.每天/每周用戶點擊數

2.流量統計

3》作為數據倉庫(這也是我在公司接觸的最多的數據分析的場景)

1.數據抽取

2.數據加載

3.數據轉換

 

Hive缺點:

 

1》延遲很高:

 

      1.默認M/R執行引擎

 

      2.M/R啟動有所延遲

2》暫不支持列級,別的數據增加,更新,刪除操作。

 

3》暫不支持存儲過程

 關系型數據庫:Mysql,Oracle

非關系型數據庫:Redis,MongoDB,HBASE

類SQL數據庫:hive

具體地:

關系型數據庫(Mysql和Oracle)

1.表和表、表和字段、數據和數據存在着關系

優點:

1.數據之間有關系,進行數據的增刪改查的時候是非常方便的

2.關系型數據庫是有事務操作的,保證數據的完整性和一致性。

缺點:

1.因為數據和數據是有關系的,底層是運行了大量的算法

大量算法會降低系統的效率,會降低性能

2.面對海量數據的增刪改查的時候會顯的無能為力

3.海量數據對數據進行維護變得非常的無力

 

適合處理一般量級的數據(銀行轉賬和錢)

 

非關系數據庫的(redis和MangDB)

為了處理海量數據,非關系數據庫設計之初就是為了替代關系型數據庫的關系

查找key---value的時候:entry(即一條K-V記錄)默認是按照key的字典順序存儲的,當然開發者也可以重載這個排序函數;

優點:

1.海量數據的增刪改查是可以的

2.海量數據的維護和處理非常輕松

缺點:

1.數據和數據沒有關系,他們之間就是單獨存在的

2.非關系數據庫沒有關系,沒有強大的事務關系,沒有保證數據的完整性和安全性

 

適合處理海量數據,保證效率,不一定安全(統計數據,例如微博數據)

 

總之:

1.關系型數據庫支持SQL語句的查詢,增刪改查非常方便,並且支持多表的join操作,相比非關系型數據庫速度比較慢

2.非關系型數據庫讀寫非常快,但是不支持增刪改查的操作

3.hive數據倉庫是元數據和客戶端的形式,將數據存儲在HDFS上的。但是Hive 中不支持對數據的改寫和添加,所有的數據都是在加載的時候中確定好的。

4.非關系型數據庫的數是存儲在內存中的,關系型數據庫的數據是存儲在磁盤的

 

Hive query就是MapReduce jobs可以從5分鍾到數小時不止,HBase是非常高效的,肯定比Hive高效的多。
Hive本身不存儲和計算數據,它完全依賴於HDFS和MapReduce,Hive中的表純邏輯。hive需要用到hdfs存儲文件,需要用到MapReduce計算框架。
hbase是物理表,不是邏輯表,提供一個超大的內存hash表,搜索引擎通過它來存儲索引,方便查詢操作。
hbase是列存儲。


免責聲明!

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



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