1. 程式人生 > >Hive 與 資料庫比較

Hive 與 資料庫比較

由於 Hive 採用了類似SQL 的查詢語言 HQL(Hive Query Language),因此很容易將 Hive 理解為資料庫。其實從結構上來看,Hive 和資料庫除了擁有類似的查詢語言,再無類似之處。本文將從多個方面來闡述 Hive 和資料庫的差異。資料庫可以用在 Online 的應用中,但是Hive 是為資料倉庫而設計的,清楚這一點,有助於從應用角度理解 Hive 的特性。


查詢語言

由於SQL被廣泛的應用在資料倉庫中,因此,專門針對

Hive的特性設計了類SQL的查詢語言HQL。熟悉SQL開發的開發者可以很方便的使用Hive進行開發。


資料儲存位置

Hive 是建立在 Hadoop 之上的,所有 Hive 的資料都是儲存在 HDFS 中的。而資料庫則可以將資料儲存在塊裝置或者本地檔案系統中。


資料更新

由於Hive是針對資料倉庫應用設計的,而資料倉庫的內容是讀多寫少的。因此,Hive中不建議對資料的改寫,所有的資料都是在載入的時候確定好的。而資料庫中的資料通常是需要經常進行修改的,因此可以使用 INSERT INTO …  VALUES 新增資料,使用 UPDATE … SET修改資料。


執行

Hive中大多數查詢的執行是通過 Hadoop 提供的 MapReduce 來實現的。而資料庫通常有自己的執行引擎。


執行延遲

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

Hive的平行計算顯然能體現出優勢。


可擴充套件性

由於Hive是建立在Hadoop之上的,因此Hive的可擴充套件性是和Hadoop的可擴充套件性是一致的(世界上最大的Hadoop 叢集在 Yahoo!2009年的規模在4000 臺節點左右)。而資料庫由於 ACID 語義的嚴格限制,擴充套件行非常有限。目前最先進的並行資料庫 Oracle 在理論上的擴充套件能力也只有100臺左右。


資料規模

由於Hive建立在叢集上並可以利用MapReduce進行平行計算,因此可以支援很大規模的資料;對應的,資料庫可以支援的資料規模較小。