MapReduce 與 關係型資料庫的區別
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的系統更接近傳統的資料庫程式設計方式。
(注:部分內容摘自其他博主分享)
相關文章
- SQL與NoSQL(關係型與非關係型)資料庫的區別SQL資料庫
- 關係型資料庫和非關係型資料庫的區別資料庫
- 非關係型資料庫(NOSQL)和關係型資料庫(SQL)區別詳解資料庫SQL
- 關係型資料庫與非關係型資料庫介紹!資料庫
- MYSQL資料庫型別與JAVA型別對應關係MySql資料庫型別Java
- Java資料型別與資料庫欄位型別對應關係Java資料型別資料庫
- 關係型資料庫資料庫
- 資料庫入門之3張表對比關係型與非關係型資料庫資料庫
- 關係型資料庫原理資料庫
- 關係型資料庫概要資料庫
- MySQL與Java常用資料型別的對應關係MySqlJava資料型別
- 常見的關係型資料庫有什麼區別?網路安全入門資料庫
- redis—非關係型資料庫Redis資料庫
- 關係型資料庫之SQL資料庫SQL
- 關係型資料庫之索引資料庫索引
- C++與Rust資料型別對應關係C++Rust資料型別
- 關係型資料庫 RDBMS 的舊與新 — 談談 NewSQL資料庫SQL
- 雲端計算和大資料的區別與關係大資料
- 架構與資料庫的關係架構資料庫
- 列舉常見的關係型資料庫和非關係型都有那些?資料庫
- Docker與containerd的關係與區別DockerAI
- Excutors 與 ThreadPoolExcutor 的關係與區別thread
- FastAPI(44)- 操作關係型資料庫ASTAPI資料庫
- mysqlclient操作MySQL關係型資料庫MySqlclient資料庫
- SQLALchemy操作MySQL關係型資料庫MySql資料庫
- Node MySQL打造關係型資料庫MySql資料庫
- Android NDK開發中java資料型別與C/C++資料型別的對應關係AndroidJava資料型別C++
- 資料庫型別區分資料庫型別
- 資料庫——關係型資料庫MySQL--簡單使用資料庫MySql
- 反DDD模式之關係型資料庫模式資料庫
- nodejs之MongoDB 非關係型資料庫NodeJSMongoDB資料庫
- 平時常見關係型資料庫資料庫
- 聊聊非關係型資料庫MongoDB索引資料庫MongoDB索引
- R 語言中雙中括號 [[]]與資料型別列表的關係資料型別
- 模型型別與加速潛力的關係模型型別
- 關係型和非關係型資料庫一定要對立?達夢資料提供新思路資料庫
- Java中類與物件的關係與區別Java物件
- 雲關係型資料庫(Relational Database Service,RDS)資料庫Database
- Spark與MapReduce的對比(區別)Spark