10.22 公司如何選擇數據庫?DynamoDB、Hadoop和MongoDB 大比拼

原文來自Medium,作者SeattleDataGuy

原文鏈接:https://medium.com/better-programming/dynamodb-vs-hadoop-vs-mongodb-4f05714312b2

用戶如何選擇最能滿足當前業務需求的數據庫,通常取決於其開發團隊的技術和已使用的應用程序。瞭解哪種數據庫系統最適合用戶公司的當前和未來需求十分重要。數據庫在所有行業和組織機構中都扮演著至關重要的角色。因此,是否能從需求價格兩個維度選擇最合適的數據庫系統可能成為項目與戰略成敗間的分水嶺。

隨著公司數據存儲方式的不斷擴展,本文旨在比較公司使用的一些更現代的數據庫系統——瞭解DynamoDB,Hadoop和MongoDB可以提供哪些功能將幫助用戶針對業務模型做出更好的決策。所有這些系統彼此間不一定都可以互換,而且在某些情況下,它們更像是比較蘋果和橙子。但是,由於它們通常都屬於NoSQL(譯註:NoSQL泛指非關係型的數據庫,NoSQL數據庫促進了可擴展性,且能夠幫助Web應用減少開發時間)的範疇,這幾個系統通常會被放在一起比較。

因此,我們先從介紹每個系統開始,之後再進行比較。

什麼是DynamoDB ?


公司如何選擇數據庫?DynamoDB、Hadoop和MongoDB 大比拼

DynamoDB是Amazon精心打造的一項NoSQL數據庫服務,可以作為Amazon Web Services(AWS)產品組合的一部分。

DynamoDB起源於Dynamo系統——一個高度可用的鍵值(key-value)存儲系統。Amazon建立該系統的目的是避免像2004年假日電商促銷活動出現的系統中斷情況。

最初,由於Dynamo操作複雜性很高,並且需要在數據一致性、性能、查詢靈活性和可靠性之間進行權衡,即便是Amazon內部也只有少數團隊採用了Dynamo系統。

而且在這期間,Amazon的開發人員更傾向使用SimpleDB NoSQL數據庫,該數據庫可以減輕用戶數據庫的管理工作。但是,由於SimpleDB受到一些限制,最終限制了它的使用場景。

2012年推出的DynamoDB是AWS的數據庫服務,旨在打破Dynamo和SimpleDB的侷限。

什麼是Hadoop?


公司如何選擇數據庫?DynamoDB、Hadoop和MongoDB 大比拼

Apache Hadoop軟件庫是一個框架,它允許使用簡單的編程模型在計算機集群之間對大型數據集進行分佈式處理。它旨在從單個服務器擴展到數千臺機器, 每臺機器提供本地計算和存儲。

Hadoop本身的目的是檢測和處理應用層的故障,而無須依靠硬件來提供高的可用性。再深層次地看,Hadoop實際上是模塊化的。這就意味著用戶可以更換其中的任何部分,搭建成各種軟件工具。這一過程實現了非常靈活、有效、強勁的體系架構。

什麼是MongoDB?


公司如何選擇數據庫?DynamoDB、Hadoop和MongoDB 大比拼

MongoDB是由MongoDB Inc創建的非表格和開放式數據庫。發起者最初專注於創建一個完全使用開放源代碼的平臺,但為了獲得現有數據庫使用客群以滿足其在雲中構建服務的需求,他們開始創建個人數據庫系統。

意識到創建數據庫軟件的可能性之後,該團隊就將重點轉移到了創建MongoDB上。2009年發佈的MongoDB旨在創建一個技術基礎,使開發團隊能夠獲得分佈式系統設計、文檔數據模型和統一的體驗。

2016年,MongoDB推出雲託管數據庫服務MongoDB Atlas。MongoDB Atlas提供了正版MongoDB服務,使用戶可以擺脫具體的操作任務。

現在來說說差異。

使用、設置和管理的便捷性

DynamoDB

DynamoDB的託管服務將用戶從底層基礎結構中解放出來,並且僅通過遠程端點與數據庫進行交互。用戶使用DynamoDB時無需擔心操作問題或關注其他硬件規定,這使得DynamoDB非常容易上手。

Hadoop

Hadoop在設置方面有選擇多樣,無需抽象(abstraction,譯註:數據抽象是一種僅向用戶暴露接口而把具體的實現細節隱藏起來的機制。),僅憑命令行(command-line)即可實現管理Hadoop。當然,這意味著用戶需要熟悉命令行,並瞭解如何設置硬件。由於其複雜性,已有多家公司(例如Cloudera)圍繞Hadoop開發產品,幫助用戶減輕管理Hadoop的複雜工作。

如果做得好,使用上述第三方公司的產品可為用戶節省成千上萬的人事費用(因為僱用Hadoop工程師通常要花費15萬美元以上)。

MongoDB

MongoDB不是SaaS服務,它是最容易直接管理的數據系統之一。用戶可以輕鬆下載並快速開始與MongoDB進行交互。

質量支持

DynamoDB

DynamoDB用戶可通過社區支持論壇、企業支持、ServerFault和Stack Overflow獲得質量支持。

DynamoDB社區提供示例應用程序、驅動程序、擴展程序和支持工具。此外,由於DynamoDB是AWS的一部分,因此用戶可直接根據其的業務規模向Amazon獲得進一步的支持。

Hadoop

多家公司提供了針對Hadoop的商業服務,並提供專業的技術支持。而Hadoop已經存在了很長時間,已經擁有多個社區支持論壇、支持工具和課程支持,可幫助用戶提高使用系統進行管理和開發的能力。

就個人而言,如果用戶使用的是Hadoop原始軟件,我們認為Hadoop可能是很難獲得質量支持的系統之一。但是,鑑於這麼多第三方介入,我們認為多數大公司可以將Hadoop視為數據存儲系統。

MongoDB

MongoDB提供社區支持論壇、ServerFault和Stack Overflow。其用戶還可以獲得每週七天,每天24小時的企業支持。除此之外,MongoDB社區還會組織活動、MongoDB大學、用戶組和網絡研討會的相關信息。

數據庫結構

DynamoDB

DynamoDB將屬性、項目和表作為核心部分,以便用戶經常使用。

-表涉及眾多項目,而單個項目又是屬性的組合。

-此外,DynamoDB使用主碼(primary key)專門標識表中的單個項目。

-使用二級索引可實現更高的查詢靈活性。

MongoDB

MongoDB在存儲模式自由數據時採用了類似JSON格式的doc文件。

MongoDB中的文檔集合並不包含預定義的列和結構,這些預定義的列和結構可能因各種文檔而有所不同。關係數據庫中MongoDB的一些特點包括:

-查詢語言易於閱讀。

-一致性強。

由於其模式自由,MongoDB允許不在先創建文檔結構的情況下創建文檔。

MongoDB與關係數據庫管理系統(RDBMS)的主要對比包括:

表|列|值|記錄

與MongoDB相比,它包括:

集合|鍵|值|文檔

這種方法意味著MongoDB的集合和RDBMS的表是相似的。此外,文檔與記錄也類似。

Hadoop

Hadoop不限定數據結構。從本質上講,它只接受在系統上使用的數據類型。Hadoop採用讀時模式,提高了其對所有數據集的通用性。

Hadoop中的所有數據都存儲為文件系統,Hive和Immpala等建立在Hadoop文件系統上的數據倉儲架構則使用戶能夠以表格式查看基礎數據。

如果用戶要通過Hadoop原始軟件來管理Hadoop,這將變得非常複雜。因為用戶選擇和編碼的文件類型在從速度到空間的所有方面都起巨大作用,撤銷操作也會變得非常困難。

用戶的商業權利

DynamoDB

在遊戲和物聯網(IoT)領域,DynamoDB仍然是一個受歡迎的選擇。如果用戶使用AWS堆棧並且需要一個NoSQL數據庫,那麼使用DynamoDB是一個不錯的選擇。注意:一旦使用DynamoDB,用戶可能無法像在MongoDB上那樣訪問嵌入式數據結構。

Hadoop

Hadoop是大型企業中比較熱門的選擇,因為大型企業需要服務器集群,而專門的數據管理、編程技能和高成本的實施方式對於這些服務器集群來講並不是問題。

在構建未來的企業數據中心方面,Hadoop也可以積極發揮作用。它可能很難管理(這取決於用戶決定如何管理、有或沒有第三方),但它同時也帶來了很多優勢。

MongoDB

在高速緩存和可伸縮性(scalability)特點上,MongoDB是個極好的選擇。

MongoDB在Web開發中也起著重要作用,它可以使後端到前端的文檔樣式數據傳遞變得容易。對於創建內容管理系統的公司來說,選擇MongoDB可以讓管理數據變得簡單。

性能問題

DynamoDB

DynamoDB在性能方面存在以下突出問題:

-DynamoDB的定價模型非常昂貴(譯註:吞吐量高,導致存儲成本高)。

-低延遲讀取還不夠低。

-跨區域的並行寫入將導致數據丟失,並且跨區域的讀取無法保持高度一致。

-難以設置持續集成/持續交付(CI/CD)管道。

-故障排除困難(諸如識別導致分區變熱的確切密鑰之類的簡單操作也很複雜)。

-持久性和一致性應用場景尚不廣泛。

-不兼容ACID事務和一致的二級索引。

Hadoop

Hadoop在性能方面存在以下突出問題::

-DataNode和NameNode(在HDFS中有兩種節點,分別是NameNode和DataNode)變慢。

-MapReduce數據本地化。

-TaskTracker的性能以及對時間間隔的影響。

MongoDB

MongoDB在性能方面存在以下突出問題:

-設計與訪問模式和架構相結合的索引非常重要。

-大型處理對象和大型數組異常的問題。

-安全性和耐用性設置仍令人擔憂。

-沒有優化查詢模塊(Query optimizer,專門負責優化SELECT語句的優化器模塊)。

除了這些差異,用戶總能看到有支持工具懸浮在系統上,以進一步支持數據系統管理。

我們來看一些工具:

Rockset

Rockset是雲中可擴展、可靠的搜索和分析服務,僅使用SQL查詢語言,便可在TB級別的數據量級上構建快速的操作應用程序。

這是Rockset的最大好處。使用Rockset工具,用戶的團隊無需熟悉另一種查詢語言。

NoSQLBooster

NoSQLBooster是用於連接管理MongoDB的圖形用戶接口(GUI)。此外,它還允許用戶同時使用SQL語法和MongoDB語法進行查詢。

因此,它不僅使管理數據庫更加容易(想想使用SQL Server Management Studio時的場景),而且還使分析人員更容易運行查詢程序來回答業務問題。

Sqoop

Apache Sqoop(TM)是一種用於在Hadoop和結構化數據存儲(如關係數據庫)之間高效傳輸批量數據的工具。該類工具有助於簡化與Hadoop的交互,可被稱為ETL工具。

結論

DynamoDB,Hadoop和MongoDB這三個數據庫系統很不一樣,彼此之前並不總能互換使用。而且每個數據庫都有其優缺點以及用例。

上文中突出強調的內容旨在幫助用戶更好地選擇合適自身的數據庫系統。用戶根據其組織規模,採用這些數據庫系統中的任何一個都可以處理多樣化的數據類型、獲得有效的應用程序管理服務以及更多其他服務。


公司如何選擇數據庫?DynamoDB、Hadoop和MongoDB 大比拼



分享到:


相關文章: