為什么說HADOOP擴展性優于MPP架構的關系型數據庫?
一、為什么說HADOOP擴展性優于MPP架構的關系型數據庫
1. hadoop(hive)跟mpp的本質區別是什么,這個有的時候界限很模糊,比如說存儲,如果我把mpp的存儲架在hdfs上,那存儲模型就沒有區別了,所以地下我打算還是用比較傳統的認知來作區別。
2. hive跟mpp的存儲模型不一樣,hive用的hdfs,而mpp需要自己做切分,自己做切分就帶來動態調整的問題,hdfs的擴展是通過元數據來做的,他有中心節點用來存元數據,在加入新的節點的時候,只需要修改元數據就可以了,所以hdfs的擴展能力是受到管理元數據那臺機器的性能限制的,一般來說可以到10k這個規模,再向上就不行了。但是mpp通常采用的是沒有中心節點的存儲模型,比如hash,你每次增加節點的時候,都需要rehash,這樣當規模到了幾百臺的時候,擴展能力就下來了。當然,現在可以把存儲架在hdfs上,這樣在存儲上就沒有太大區別了。
3. hive跟mpp的內存管理方式不大一樣,mpp內存管理比較精細,他主要的想法是在每個機器上放個數據庫,傳統數據庫的內存管理比較復雜,主要是內外存交互的東西,這樣的架構決定了mpp在小數據量的時候,latency可以做的比較小,但是在大數據量的時候,throughput做不上去。而hive的內存管理非常粗放,他后來就是mapreduce的job,mr的job是沒有太多精細的內存管理的,他就是拼了命地scan,完了頂多就是個spill,這樣的架構導致throughput很大,但是latency很高,當你集群規模很大的時候,你一般會追求很大的throughput,當數據量很大的時候,如果你用mpp那種傳統的內存管理的話,大批量的計算反而會慢,而且更加占資源,所以vertica這種一開始就考慮了列式存儲就是這個道理。
4.事務,你可以認為hive不支持傳統意義上的那種高并發的事務,而mpp試圖想要支持,一旦你要上分布式事務,基本上你的可擴展性就上不去了,至于為啥,陳皓有一篇文章寫的不錯,建議看下。hive的ddl是可以多個并發的,但是dml不行,而ddl他是通過傳統的數據庫去做的,所以這個也是個中心節點,dml不行的話,就決定了他可以在底層跑mr這么重粒度的東西,他跑的時候,會在整個表上面加一把大鎖。
5.failover機制,hive的failover就是mr的failover,job掛掉了重新換機器跑就完了,但是mpp如果采用傳統架構的話,他的計算是要attach到數據節點上去的,如果你規模上去,那么fail的可能性就上去了,這樣如果你每次計算都有臺機器掛了,你一掛,別人就要等你,而不是換臺機器繼續跑,那么這個也限制了可擴展性,當然,如果mpp在底層用了統一的存儲,完了計算也可以到處轉移,再想個辦法把中間狀態記錄下來,也可以擴展(這個實際上就是sparksql)。
延伸閱讀:
二、MongoDB是什么
非關系型數據庫(nosql ),屬于文檔型數據庫。MongoDB采用類JSON的documents來存儲數據。數據結構由鍵值(key=>value)對組成。
MongoDB采用動態數據模型schema,這意味著不需要預先定義表的數據類型和字段名。當MongoDB需要更新文檔documents的時候,可以輕松增加新的字段名或者刪除舊的字段。MongoDB讓數據結構更加層級化,因而存儲數組等復雜數據結構。 在同一個集合collection中,文檔document對字段也沒有強約束,因此更容易設計差異化的數據結構。

相關推薦HOT
更多>>
在 iPad 上運行 Windows 是什么體驗?
一、在 iPad 上運行 Windows 是什么體驗目前市面上有一些能夠在 iPad 上運行 Windows 的應用程序,例如 Parallels Access、Splash較好、VMware ...詳情>>
2023-10-14 19:14:27
vector, list, map等容器使用場合是什么?
一、vector, list, map等容器使用場合vector適用于對象簡單,變化較小,并且頻繁隨機訪問的場景。list適用經常進行插入和刪除并且不經常隨機訪...詳情>>
2023-10-14 14:59:11
分庫分表的數據庫和分布式數據庫有什么區別?
一、分庫分表的數據庫和分布式數據庫有什么區別分庫分表的數據庫:沒有這種數據庫,所謂分庫分表,這是開發應用的程序員通過自己的代碼、或者底...詳情>>
2023-10-14 13:59:18
APP定制開發的難點有哪些?
一、APP定制開發的難點1、多平臺適配不同的移動平臺(如iOS和Android)具有不同的操作系統、開發語言和開發工具。在進行APP定制開發時,需要適...詳情>>
2023-10-14 12:57:35