用戶如何選擇最能滿足當前業(yè)務需求的數(shù)據(jù)庫,通常取決于其開發(fā)團隊的技術和已運用的應用程序。了解哪種數(shù)據(jù)庫系統(tǒng)最適宜用戶公司的當前和未來需求十分重要。數(shù)據(jù)庫在一切行業(yè)和組織機構中都扮演著至關重要的角色。因此,能否能從需求和價錢兩個維度選擇最適合的數(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)開端,之后再中止比較。
公司如何選擇數(shù)據(jù)庫?DynamoDB、Hadoop和MongoDB 大比拼
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ù)分歧性、性能、查詢靈活性和可靠性之間中止權衡,即便是Amazon內部也只需少數(shù)團隊采用了Dynamo系統(tǒng)。
而且在這期間,Amazon的開發(fā)人員更傾向運用SimpleDB NoSQL數(shù)據(jù)庫,該數(shù)據(jù)庫可以減輕用戶數(shù)據(jù)庫的管理工作。但是,由于SimpleDB遭到一些限制,最終限制了它的運用場景。
2012年推出的DynamoDB是AWS的數(shù)據(jù)庫效勞,旨在打破Dynamo和SimpleDB的局限。
公司如何選擇數(shù)據(jù)庫?DynamoDB、Hadoop和MongoDB 大比拼
Apache Hadoop軟件庫是一個框架,它允許運用簡單的編程模型在計算機集群之間對大型數(shù)據(jù)集中止分布式處置。它旨在從單個效勞器擴展到數(shù)千臺機器, 每臺機器提供本地計算和存儲。
Hadoop本身的目的是檢測和處置應用層的缺點,而無須依托硬件來提供高的可用性。再深層次地看,Hadoop理論上是模塊化的。這就意味著用戶可以改換其中的任何部分,搭建成各種軟件工具。這一過程完成了非常靈活、有效、強勁的體系架構。
公司如何選擇數(shù)據(jù)庫?DynamoDB、Hadoop和MongoDB 大比拼
MongoDB是由MongoDB Inc創(chuàng)建的非表格和開放式數(shù)據(jù)庫。發(fā)起者最初專注于創(chuàng)建一個完好運用開放源代碼的平臺,但為了獲得現(xiàn)有數(shù)據(jù)庫運用客群以滿足其在云中構建效勞的需求,他們開端創(chuàng)建個人數(shù)據(jù)庫系統(tǒng)。
認識到創(chuàng)建數(shù)據(jù)庫軟件的可能性之后,該團隊就將重點轉移到了創(chuàng)建MongoDB上。2009年發(fā)布的MongoDB旨在創(chuàng)建一個技術基礎,使開發(fā)團隊能夠獲得分布式系統(tǒng)設計、文檔數(shù)據(jù)模型和統(tǒng)一的體驗。
2016年,MongoDB推出云托管數(shù)據(jù)庫效勞MongoDB Atlas。MongoDB Atlas提供了正版MongoDB效勞,運用戶可以擺脫細致的操作任務。
往常來說說差異。
運用、設置和管理的便利性
DynamoDB
DynamoDB的托管效勞將用戶從底層基礎結構中解放出來,并且僅經(jīng)過遠程端點與數(shù)據(jù)庫中止交互。用戶運用DynamoDB時無需擔憂操作問題或關注其他硬件規(guī)則,這使得DynamoDB非常容易上手。
Hadoop
Hadoop在設置方面有選擇多樣,無需籠統(tǒng)(abstraction,譯注:數(shù)據(jù)籠統(tǒng)是一種僅向用戶暴露接口而把細致的完成細節(jié)躲藏起來的機制。),僅憑命令行(command-line)即可完成管理Hadoop。當然,這意味著用戶需求熟習命令行,并了解如何設置硬件。由于其復雜性,已有多家公司(例如Cloudera)盤繞Hadoop開發(fā)產(chǎn)品,輔佐用戶減輕管理Hadoop的復雜工作。
假設做得好,運用上述第三方公司的產(chǎn)品可為用戶儉省成千上萬的人事費用(由于雇用Hadoop工程師通常要花費15萬美圓以上)。
MongoDB
MongoDB不是SaaS效勞,它是最容易直接納理的數(shù)據(jù)系統(tǒng)之一。用戶可以輕松下載并快速開端與MongoDB中止交互。
質量支持
DynamoDB
DynamoDB用戶可經(jīng)過社區(qū)支持論壇、企業(yè)支持、ServerFault和Stack Overflow獲得質量支持。
DynamoDB社區(qū)提供示例應用程序、驅動程序、擴展程序和支持工具。此外,由于DynamoDB是AWS的一部分,因此用戶可直接根據(jù)其的業(yè)務范圍向Amazon獲得進一步的支持。
Hadoop
多家公司提供了針對Hadoop的商業(yè)效勞,并提供專業(yè)的技術支持。而Hadoop曾經(jīng)存在了很長時間,曾經(jīng)具有多個社區(qū)支持論壇、支持工具和課程支持,可輔佐用戶進步運用系統(tǒng)中止管理和開發(fā)的才干。
就個人而言,假設用戶運用的是Hadoop原始軟件,我們以為Hadoop可能是很難獲得質量支持的系統(tǒng)之一。但是,鑒于這么多第三方介入,我們以為多數(shù)大公司可以將Hadoop視為數(shù)據(jù)存儲系統(tǒng)。
MongoDB
MongoDB提供社區(qū)支持論壇、ServerFault和Stack Overflow。其用戶還可以獲得每周七天,每天24小時的企業(yè)支持。除此之外,MongoDB社區(qū)還會組織活動、MongoDB大學、用戶組和網(wǎng)絡研討會的相關信息。
數(shù)據(jù)庫結構
DynamoDB
DynamoDB將屬性、項目和表作為中心部分,以便用戶經(jīng)常運用。
-表觸及眾多項目,而單個項目又是屬性的組合。
-此外,DynamoDB運用主碼(primary key)特地標識表中的單個項目。
-運用二級索引可完成更高的查詢靈活性。
MongoDB
MongoDB在存儲方式自由數(shù)據(jù)時采用了類似JSON格式的doc文件。
MongoDB中的文檔集合并不包含預定義的列和結構,這些預定義的列和結構可能因各種文檔而有所不同。關系數(shù)據(jù)庫中MongoDB的一些特性包括:
-查詢言語易于閱讀。
-分歧性強。
由于其方式自由,MongoDB允許不在先創(chuàng)建文檔結構的情況下創(chuàng)建文檔。
MongoDB與關系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)的主要對比包括:
表|列|值|記載
與MongoDB相比,它包括:
集合|鍵|值|文檔
這種方法意味著MongoDB的集合和RDBMS的表是相似的。此外,文檔與記載也類似。
Hadoop
Hadoop不限定數(shù)據(jù)結構。從本質上講,它只接受在系統(tǒng)上運用的數(shù)據(jù)類型。Hadoop采用讀時方式,進步了其對一切數(shù)據(jù)集的通用性。
Hadoop中的一切數(shù)據(jù)都存儲為文件系統(tǒng),Hive和Immpala等樹立在Hadoop文件系統(tǒng)上的數(shù)據(jù)倉儲架構則運用戶能夠以表格式查看基礎數(shù)據(jù)。
假設用戶要經(jīng)過Hadoop原始軟件來管理Hadoop,這將變得非常復雜。由于用戶選擇和編碼的文件類型在從速度到空間的一切方面都起龐大作用,撤銷操作也會變得非常困難。
用戶的商業(yè)權益
DynamoDB
在游戲和物聯(lián)網(wǎng)(IoT)范疇,DynamoDB仍然是一個受歡迎的選擇。假設用戶運用AWS堆棧并且需求一個NoSQL數(shù)據(jù)庫,那么運用DynamoDB是一個不錯的選擇。留意:一旦運用DynamoDB,用戶可能無法像在MongoDB上那樣訪問嵌入式數(shù)據(jù)結構。
Hadoop
Hadoop是大型企業(yè)中比較搶手的選擇,由于大型企業(yè)需求效勞器集群,而特地的數(shù)據(jù)管理、編程技藝和高本錢的實施方式關于這些效勞器集群來講并不是問題。
在構建未來的企業(yè)數(shù)據(jù)中心方面,Hadoop也可以積極發(fā)揮作用。它可能很難管理(這取決于用戶決議如何管理、有或沒有第三方),但它同時也帶來了很多優(yōu)勢。
MongoDB
在高速緩存和可伸縮性(scalability)特性上,MongoDB是個極好的選擇。
MongoDB在Web開發(fā)中也起著重要作用,它可以使后端到前端的文檔樣式數(shù)據(jù)傳送變得容易。關于創(chuàng)建內容管理系統(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在性能方面存在以下突出問題:
-設計與訪問方式和架構相別離的索引非常重要。
-大型處置對象和大型數(shù)組異常的問題。
-安全性和耐用性設置仍令人擔憂。
-沒有優(yōu)化查詢模塊(Query optimizer,特地擔任優(yōu)化SELECT語句的優(yōu)化器模塊)。
除了這些差異,用戶總能看到有支持工具懸浮在系統(tǒng)上,以進一步支持數(shù)據(jù)系統(tǒng)管理。
我們來看一些工具:
Rockset
Rockset是云中可擴展、可靠的搜索和分析效勞,僅運用SQL查詢言語,便可在TB級別的數(shù)據(jù)量級上構建快速的操作應用程序。
這是Rockset的最大好處。運用Rockset工具,用戶的團隊無需熟習另一種查詢言語。
NoSQLBooster
NoSQLBooster是用于銜接收理MongoDB的圖形用戶接口(GUI)。此外,它還允許用戶同時運用SQL語法和MongoDB語法中止查詢。
因此,它不只使管理數(shù)據(jù)庫愈加容易(想想運用SQL Server Management Studio時的場景),而且還使分析人員更容易運轉查詢程序來回答業(yè)務問題。
Sqoop
Apache Sqoop(TM)是一種用于在Hadoop和結構化數(shù)據(jù)存儲(如關系數(shù)據(jù)庫)之間高效傳輸批量數(shù)據(jù)的工具。該類工具有助于簡化與Hadoop的交互,可被稱為ETL工具。
結論
DynamoDB,Hadoop和MongoDB這三個數(shù)據(jù)庫系統(tǒng)很不一樣,彼此之前并不總能互換運用。而且每個數(shù)據(jù)庫都有其優(yōu)缺陷以及用例。
上文中突出強調的內容旨在輔佐用戶更好地選擇適合自身的數(shù)據(jù)庫系統(tǒng)。用戶根據(jù)其組織范圍,采用這些數(shù)據(jù)庫系統(tǒng)中的任何一個都可以處置多樣化的數(shù)據(jù)類型、獲得有效的應用程序管理效勞以及更多其他效勞。