MapReduce 與 關係型資料庫的區別

GeoWin_CAS發表於2015-03-30

MapReduce 與 關係型資料庫的區別:

1 資料訪問模式受限於磁碟定址

磁碟定址時間提高速度遠遠小於資料傳輸速率提高速度。對於超大規模資料(以PB為單位)必須考慮使用其他方式。關係型資料庫使用B樹結構進行資料的更新查詢操作,對於最大到GB的資料量,一般相對資料量較小,效果很好。但是大資料量時,B樹使用排序/合併方式重建資料庫以更新資料的效率遠遠低於MapReduce。

2 MapReduce是關係型資料庫的補充。

MapReduce更適合批量更新大批量的資料集,一次寫入多次讀取。RDBMS更適合點查詢和更新,這時的資料集已經被索引以提供低延遲的檢索和短時間的少量資料更新,適合多次讀寫。

3 資料結構不同。

關係型資料使用的是結構化資料,在資料庫階段按具體型別處理資料。MapReduce資料模式半結構化或非結構化,資料處理是在Mapreduce操作中由使用者實現。

關係型資料的規範性非常重要,保持資料的完整性,一致性。這樣的規範限制了資料必須在非本地操作。而MapReduce最終要是讓資料在靠近資料的地方處理。

結構化資料

(structured data):是具體既定格式的實體化資料,如XML文件或滿足特定預定義格式的資料庫表。這是RDBMS包括的內容。

半結構化資料

(semi-structured data):比較鬆散,雖然可能有格式,但是經常被忽略,所以他只能作為對資料結構的一般指導。如:一張電子表格,其結構是由單元格組成的網格,但是每個單元格自身可儲存任何形式的資料。

非結構化資料

(unstructured data):沒有什麼特別的內部結構,如純文字或影像資料。

4 伸縮性。

關係型資料庫 對資料處理是非線性。

MapReduce線性。

其中有一句話難以理解,涉及到了關係型資料和MapReduce處理資料方式不同的根本原因。

原文:

Relational data is often normalized to retain its integrity, and remove redundancy.

Normalization poses problems for MapReduce, since it makes reading a record a nonlocal

operation, and one of the central assumptions that MapReduce makes is that it

is possible to perform (high-speed) streaming reads and writes

翻譯後:

關係型資料往往是規範的,以保持其完整性和刪除冗餘。規範化為MapReduce帶來問題,因為它使讀取記錄成為一個非本地操作,並且MapReduce的核心假設之一就是,它可以進行(高速)流的讀寫。

這段話難以理解是在 為什麼規範化使得讀取操作必須是非本地操作。這句話怎麼理解呢?

我的理解:

這個本地操作應該是指的資料傳輸還是演算法傳輸,mapreduce是將演算法傳輸到hdfs datanode上以便資料在本地執行。而關係型資料庫必須要通過 connection 將資料傳輸到演算法所在容器執行。而這個的根本原因是資料規範性。

資料規範性,為了保證約束(完整性、一致性)正常,資料就需要傳輸到資料庫容器外執行,資料處理邏輯完成後,由事務提交到資料庫,從而嚴格保證資料的規範。


比較項

MapReduce

RDBMS

資料訪問模式

不受磁碟定址的限制,磁碟定址時間提高速度遠遠小於資料傳輸速率提高速度。

受限於磁碟定址,關係型資料庫使用B樹結構進行資料的更新查詢操作,對於最大到GB的資料量,一般相對資料量較小,效果很好。

增刪改查

更適合批量更新大批量的資料集,一次寫入多次讀取

更適合點查詢和更新,這時的資料集已經被索引以提供低延遲的檢索和短時間的少量資料更新,適合多次讀寫。

資料結構

MapReduce資料模式半結構化或非結構化,資料處理是在Mapreduce操作中由使用者實現,MapReduce最終要是讓資料在靠近資料的地方處理

關係型資料使用的是結構化資料,在資料庫階段按具體型別處理資料。關係型資料的規範性非常重要,保持資料的完整性,一致性。這樣的規範限制了資料必須在非本地操作。

伸縮性

線性

非線性

還是先來比較下傳統關係型資料庫與MapReduce兩種方式的區別吧,如下表所示:

比較項 傳統關聯式資料庫 MapReduce
資料大小 GB PB
訪問 互動式批處理批處理 批處理
更新 多次讀寫 一次寫入多次讀取
結構 靜態模式 動態模式
完整性
橫向擴充套件 非線性 線性

由上表可見:

1.MapReduce比較適合以批處理的方式處理需要分析整個資料集的問題,尤其是即席分離。RDBMS適用於“點查詢”和更新,資料集被索引後,資料庫系統能夠提供低延遲的資料檢索和快速的少量資料更新。

2.MapReduce適合一次寫入、多次讀取資料的應用,而關係型資料庫更適合持續更新的資料集。

3.關係型資料庫中資料集是高度結構化的資料,而MapReduce中的資料是非結構化資料。

相信在不久的將來,關係型資料庫系統和MapReduce系統之間的差異很可能變得模糊。關係型資料庫都開始吸收MapReduce的一些思路,另一方面,基於MapReduce的高階查詢語言使MapReduce的系統更接近傳統的資料庫程式設計方式。

(注:部分內容摘自其他博主分享)

相關文章