原文來自Medium,作者SeattleDataGuy
原文鏈接:https://medium.com/better-programming/dynamodb-vs-hadoop-vs-mongodb-4f05714312b2
用戶如何選擇最能滿足當前業(yè)務需求的數(shù)據(jù)庫,通常取決于其開發(fā)團隊的技術和已使用的應用程序。了解哪種數(shù)據(jù)庫系統(tǒng)最適合用戶公司的當前和未來需求十分重要。數(shù)據(jù)庫在所有行業(yè)和組織機構(gòu)中都扮演著至關重要的角色。因此,是否能從需求和價格兩個維度選擇最合適的數(shù)據(jù)庫系統(tǒng)可能成為項目與戰(zhàn)略成敗間的分水嶺。
隨著公司數(shù)據(jù)存儲方式的不斷擴展,本文旨在比較公司使用的一些更現(xiàn)代的數(shù)據(jù)庫系統(tǒng)——了解DynamoDB,Hadoop和MongoDB可以提供哪些功能將幫助用戶針對業(yè)務模型做出更好的決策。所有這些系統(tǒng)彼此間不一定都可以互換,而且在某些情況下,它們更像是比較蘋果和橙子。但是,由于它們通常都屬于NoSQL(譯注:NoSQL泛指非關系型的數(shù)據(jù)庫,NoSQL數(shù)據(jù)庫促進了可擴展性,且能夠幫助Web應用減少開發(fā)時間)的范疇,這幾個系統(tǒng)通常會被放在一起比較。
因此,我們先從介紹每個系統(tǒng)開始,之后再進行比較。
什么是DynamoDB ?
DynamoDB是Amazon精心打造的一項NoSQL數(shù)據(jù)庫服務,可以作為Amazon Web Services(AWS)產(chǎn)品組合的一部分。
DynamoDB起源于Dynamo系統(tǒng)——一個高度可用的鍵值(key-value)存儲系統(tǒng)。Amazon建立該系統(tǒng)的目的是避免像2004年假日電商促銷活動出現(xiàn)的系統(tǒng)中斷情況。
最初,由于Dynamo操作復雜性很高,并且需要在數(shù)據(jù)一致性、性能、查詢靈活性和可靠性之間進行權(quán)衡,即便是Amazon內(nèi)部也只有少數(shù)團隊采用了Dynamo系統(tǒng)。
而且在這期間,Amazon的開發(fā)人員更傾向使用SimpleDB NoSQL數(shù)據(jù)庫,該數(shù)據(jù)庫可以減輕用戶數(shù)據(jù)庫的管理工作。但是,由于SimpleDB受到一些限制,最終限制了它的使用場景。
2012年推出的DynamoDB是AWS的數(shù)據(jù)庫服務,旨在打破Dynamo和SimpleDB的局限。
什么是Hadoop?
Apache Hadoop軟件庫是一個框架,它允許使用簡單的編程模型在計算機集群之間對大型數(shù)據(jù)集進行分布式處理。它旨在從單個服務器擴展到數(shù)千臺機器, 每臺機器提供本地計算和存儲。
Hadoop本身的目的是檢測和處理應用層的故障,而無須依靠硬件來提供高的可用性。再深層次地看,Hadoop實際上是模塊化的。這就意味著用戶可以更換其中的任何部分,搭建成各種軟件工具。這一過程實現(xiàn)了非常靈活、有效、強勁的體系架構(gòu)。
什么是MongoDB?
MongoDB是由MongoDB Inc創(chuàng)建的非表格和開放式數(shù)據(jù)庫。發(fā)起者最初專注于創(chuàng)建一個完全使用開放源代碼的平臺,但為了獲得現(xiàn)有數(shù)據(jù)庫使用客群以滿足其在云中構(gòu)建服務的需求,他們開始創(chuàng)建個人數(shù)據(jù)庫系統(tǒng)。
意識到創(chuàng)建數(shù)據(jù)庫軟件的可能性之后,該團隊就將重點轉(zhuǎn)移到了創(chuàng)建MongoDB上。2009年發(fā)布的MongoDB旨在創(chuàng)建一個技術基礎,使開發(fā)團隊能夠獲得分布式系統(tǒng)設計、文檔數(shù)據(jù)模型和統(tǒng)一的體驗。
2016年,MongoDB推出云托管數(shù)據(jù)庫服務MongoDB Atlas。MongoDB Atlas提供了正版MongoDB服務,使用戶可以擺脫具體的操作任務。
現(xiàn)在來說說差異。
使用、設置和管理的便捷性
DynamoDB
DynamoDB的托管服務將用戶從底層基礎結(jié)構(gòu)中解放出來,并且僅通過遠程端點與數(shù)據(jù)庫進行交互。用戶使用DynamoDB時無需擔心操作問題或關注其他硬件規(guī)定,這使得DynamoDB非常容易上手。
Hadoop
Hadoop在設置方面有選擇多樣,無需抽象(abstraction,譯注:數(shù)據(jù)抽象是一種僅向用戶暴露接口而把具體的實現(xiàn)細節(jié)隱藏起來的機制。),僅憑命令行(command-line)即可實現(xiàn)管理Hadoop。當然,這意味著用戶需要熟悉命令行,并了解如何設置硬件。由于其復雜性,已有多家公司(例如Cloudera)圍繞Hadoop開發(fā)產(chǎn)品,幫助用戶減輕管理Hadoop的復雜工作。
如果做得好,使用上述第三方公司的產(chǎn)品可為用戶節(jié)省成千上萬的人事費用(因為雇用Hadoop工程師通常要花費15萬美元以上)。
MongoDB
MongoDB不是SaaS服務,它是最容易直接管理的數(shù)據(jù)系統(tǒng)之一。用戶可以輕松下載并快速開始與MongoDB進行交互。
質(zhì)量支持
DynamoDB
DynamoDB用戶可通過社區(qū)支持論壇、企業(yè)支持、ServerFault和Stack Overflow獲得質(zhì)量支持。
DynamoDB社區(qū)提供示例應用程序、驅(qū)動程序、擴展程序和支持工具。此外,由于DynamoDB是AWS的一部分,因此用戶可直接根據(jù)其的業(yè)務規(guī)模向Amazon獲得進一步的支持。
Hadoop
多家公司提供了針對Hadoop的商業(yè)服務,并提供專業(yè)的技術支持。而Hadoop已經(jīng)存在了很長時間,已經(jīng)擁有多個社區(qū)支持論壇、支持工具和課程支持,可幫助用戶提高使用系統(tǒng)進行管理和開發(fā)的能力。
就個人而言,如果用戶使用的是Hadoop原始軟件,我們認為Hadoop可能是很難獲得質(zhì)量支持的系統(tǒng)之一。但是,鑒于這么多第三方介入,我們認為多數(shù)大公司可以將Hadoop視為數(shù)據(jù)存儲系統(tǒng)。
MongoDB
MongoDB提供社區(qū)支持論壇、ServerFault和Stack Overflow。其用戶還可以獲得每周七天,每天24小時的企業(yè)支持。除此之外,MongoDB社區(qū)還會組織活動、MongoDB大學、用戶組和網(wǎng)絡研討會的相關信息。
數(shù)據(jù)庫結(jié)構(gòu)
DynamoDB
DynamoDB將屬性、項目和表作為核心部分,以便用戶經(jīng)常使用。
-表涉及眾多項目,而單個項目又是屬性的組合。
-此外,DynamoDB使用主碼(primary key)專門標識表中的單個項目。
-使用二級索引可實現(xiàn)更高的查詢靈活性。
MongoDB
MongoDB在存儲模式自由數(shù)據(jù)時采用了類似JSON格式的doc文件。
MongoDB中的文檔集合并不包含預定義的列和結(jié)構(gòu),這些預定義的列和結(jié)構(gòu)可能因各種文檔而有所不同。關系數(shù)據(jù)庫中MongoDB的一些特點包括:
-查詢語言易于閱讀。
-一致性強。
由于其模式自由,MongoDB允許不在先創(chuàng)建文檔結(jié)構(gòu)的情況下創(chuàng)建文檔。
MongoDB與關系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)的主要對比包括:
表|列|值|記錄
與MongoDB相比,它包括:
集合|鍵|值|文檔
這種方法意味著MongoDB的集合和RDBMS的表是相似的。此外,文檔與記錄也類似。
Hadoop
Hadoop不限定數(shù)據(jù)結(jié)構(gòu)。從本質(zhì)上講,它只接受在系統(tǒng)上使用的數(shù)據(jù)類型。Hadoop采用讀時模式,提高了其對所有數(shù)據(jù)集的通用性。
Hadoop中的所有數(shù)據(jù)都存儲為文件系統(tǒng),Hive和Immpala等建立在Hadoop文件系統(tǒng)上的數(shù)據(jù)倉儲架構(gòu)則使用戶能夠以表格式查看基礎數(shù)據(jù)。
如果用戶要通過Hadoop原始軟件來管理Hadoop,這將變得非常復雜。因為用戶選擇和編碼的文件類型在從速度到空間的所有方面都起巨大作用,撤銷操作也會變得非常困難。
用戶的商業(yè)權(quán)利
DynamoDB
在游戲和物聯(lián)網(wǎng)(IoT)領域,DynamoDB仍然是一個受歡迎的選擇。如果用戶使用AWS堆棧并且需要一個NoSQL數(shù)據(jù)庫,那么使用DynamoDB是一個不錯的選擇。注意:一旦使用DynamoDB,用戶可能無法像在MongoDB上那樣訪問嵌入式數(shù)據(jù)結(jié)構(gòu)。
Hadoop
Hadoop是大型企業(yè)中比較熱門的選擇,因為大型企業(yè)需要服務器集群,而專門的數(shù)據(jù)管理、編程技能和高成本的實施方式對于這些服務器集群來講并不是問題。
在構(gòu)建未來的企業(yè)數(shù)據(jù)中心方面,Hadoop也可以積極發(fā)揮作用。它可能很難管理(這取決于用戶決定如何管理、有或沒有第三方),但它同時也帶來了很多優(yōu)勢。
MongoDB
在高速緩存和可伸縮性(scalability)特點上,MongoDB是個極好的選擇。
MongoDB在Web開發(fā)中也起著重要作用,它可以使后端到前端的文檔樣式數(shù)據(jù)傳遞變得容易。對于創(chuàng)建內(nèi)容管理系統(tǒng)的公司來說,選擇MongoDB可以讓管理數(shù)據(jù)變得簡單。
性能問題
DynamoDB
DynamoDB在性能方面存在以下突出問題:
-DynamoDB的定價模型非常昂貴(譯注:吞吐量高,導致存儲成本高)。
-低延遲讀取還不夠低。
-跨區(qū)域的并行寫入將導致數(shù)據(jù)丟失,并且跨區(qū)域的讀取無法保持高度一致。
-難以設置持續(xù)集成/持續(xù)交付(CI/CD)管道。
-故障排除困難(諸如識別導致分區(qū)變熱的確切密鑰之類的簡單操作也很復雜)。
-持久性和一致性應用場景尚不廣泛。
-不兼容ACID事務和一致的二級索引。
Hadoop
Hadoop在性能方面存在以下突出問題::
-DataNode和NameNode(在HDFS中有兩種節(jié)點,分別是NameNode和DataNode)變慢。
-MapReduce數(shù)據(jù)本地化。
-TaskTracker的性能以及對時間間隔的影響。
MongoDB
MongoDB在性能方面存在以下突出問題:
-設計與訪問模式和架構(gòu)相結(jié)合的索引非常重要。
-大型處理對象和大型數(shù)組異常的問題。
-安全性和耐用性設置仍令人擔憂。
-沒有優(yōu)化查詢模塊(Query optimizer,專門負責優(yōu)化SELECT語句的優(yōu)化器模塊)。
除了這些差異,用戶總能看到有支持工具懸浮在系統(tǒng)上,以進一步支持數(shù)據(jù)系統(tǒng)管理。
我們來看一些工具:
Rockset
Rockset是云中可擴展、可靠的搜索和分析服務,僅使用SQL查詢語言,便可在TB級別的數(shù)據(jù)量級上構(gòu)建快速的操作應用程序。
這是Rockset的最大好處。使用Rockset工具,用戶的團隊無需熟悉另一種查詢語言。
NoSQLBooster
NoSQLBooster是用于連接管理MongoDB的圖形用戶接口(GUI)。此外,它還允許用戶同時使用SQL語法和MongoDB語法進行查詢。
因此,它不僅使管理數(shù)據(jù)庫更加容易(想想使用SQL Server Management Studio時的場景),而且還使分析人員更容易運行查詢程序來回答業(yè)務問題。
Sqoop
Apache Sqoop(TM)是一種用于在Hadoop和結(jié)構(gòu)化數(shù)據(jù)存儲(如關系數(shù)據(jù)庫)之間高效傳輸批量數(shù)據(jù)的工具。該類工具有助于簡化與Hadoop的交互,可被稱為ETL工具。
結(jié)論
DynamoDB,Hadoop和MongoDB這三個數(shù)據(jù)庫系統(tǒng)很不一樣,彼此之前并不總能互換使用。而且每個數(shù)據(jù)庫都有其優(yōu)缺點以及用例。
上文中突出強調(diào)的內(nèi)容旨在幫助用戶更好地選擇合適自身的數(shù)據(jù)庫系統(tǒng)。用戶根據(jù)其組織規(guī)模,采用這些數(shù)據(jù)庫系統(tǒng)中的任何一個都可以處理多樣化的數(shù)據(jù)類型、獲得有效的應用程序管理服務以及更多其他服務。