mongodb與關係型資料庫相比的優缺點

2021-09-07 05:02:40 字數 3190 閱讀 6490

與關係型資料庫相比,mongodb的優點:

①弱一致性(最終一致),更能保證使用者的訪問速度:

舉例來說,在傳統的關係型資料庫中,乙個count型別的操作會鎖定資料集,這樣可以保證得到「當前」情況下的較精確值。這在某些情況下,例 如通過atm檢視賬戶資訊的時候很重要,但對於wordnik來說,資料是不斷更新和增長的,這種「較精確」的保證幾乎沒有任何意義,反而會產生很大的延 遲。他們需要的是乙個「大約」的數字以及更快的處理速度。

但某些情況下mongodb會鎖住資料庫。如果此時正有數百個請求,則它們會堆積起來,造成許多問題。我們使用了下面的優化方式來避免鎖定:

每次更新前,我們會先查詢記錄。查詢操作會將物件放入記憶體,於是更新則會盡可能的迅速。在主/從部署方案中,從節點可以使用「-pretouch」引數執行,這也可以得到相同的效果。

使用多個mongod程序。我們根據訪問模式將資料庫拆分成多個程序。

②文件結構的儲存方式,能夠更便捷的獲取資料。

對於乙個層級式的資料結構來說,如果要將這樣的資料使用扁平式的,錶狀的結構來儲存資料,這無論是在查詢還是獲取資料時都十分困難。

③內建gridfs,支援大容量的儲存。

gridfs是乙個出色的分布式檔案系統,可以支援海量的資料儲存。

內建了gridfs了mongodb,能夠滿足對大資料集的快速範圍查詢。

④內建sharding。

提供基於range的auto sharding機制:乙個collection可按照記錄的範圍,分成若干個段,切分到不同的shard上。

shards可以和複製結合,配合replica sets能夠實現sharding+fail-over,不同的shard之間可以負載均衡。查詢是對 客戶端是透明的。客戶端執行查詢,統計,mapreduce等操作,這些會被mongodb自動路由到後端的資料節點。這讓我們關注於自己的業務,適當的 時候可以**的公升級。mongodb的sharding設計能力較大可支援約20 petabytes,足以支撐一般應用。

這可以保證mongodb執行在便宜的pc伺服器集群上。pc集群擴充起來非常方便並且成本很低,避免了「sharding」操作的複雜性和成本。

⑤第三方支援豐富。(這是與其他的nosql相比,mongodb也具有的優勢)

現在網路上的很多nosql開源資料庫完全屬於社群型的,沒有官方支援,給使用者帶來了很大的風險。

而開源文件資料庫mongodb背後有商業公司10gen為其提供供商業培訓和支援。

而且mongodb社群非常活躍,很多開發框架都迅速提供了對mongdb的支援。不少知名大公司和**也在生產環境中使用mongodb,越來越多的創新型企業轉而使用mongodb作為和django,ror來搭配的技術方案。

⑥效能優越:

在使用場合下,千萬級別的文件物件,近10g的資料,對有索引的id的查詢不會比mysql慢,而對非索引欄位的查詢,則是全面勝出。 mysql實際無法勝任大資料量下任意欄位的查詢,而mongodb的查詢效能實在讓我驚訝。寫入效能同樣很令人滿意,同樣寫入百萬級別的數 據,mongodb比我以前試用過的couchdb要快得多,基本10分鐘以下可以解決。補上一句,觀察過程中mongodb都遠算不上是cpu殺手。

與關係型資料庫相比,mongodb的缺點:

①mongodb不支援事務操作。

所以事務要求嚴格的系統(如果銀行系統)肯定不能用它。(這點和優點①是對應的)

②mongodb占用空間過大。

關於其原因,在官方的faq中,提到有如下幾個方面:

1、空間的預分配:為避免形成過多的硬碟碎片,mongodb每次空間不足時都會申請生成一大塊的硬碟空間,而且申請的量從64m、128m、256m那 樣的指數遞增,直到2g為單個檔案的較大體積。隨著資料量的增加,你可以在其資料目錄裡看到這些整塊生成容量不斷遞增的檔案。

2、欄位名所占用的空間:為了保持每個記錄內的結構資訊用於查詢,mongodb需要把每個欄位的key-value都以bson的形式儲存,如果 value域相對於key域並不大,比如存放數值型的資料,則資料的overhead是較大的。一種減少空間占用的方法是把欄位名盡量取短一些,這樣占用 空間就小了,但這就要求在易讀性與空間占用上作為權衡了。我曾建議作者把欄位名作個index,每個欄位名用乙個位元組表示,這樣就不用擔心欄位名取多長 了。但作者的擔憂也不無道理,這種索引方式需要每次查詢得到結果後把索引值跟原值作乙個替換,再傳送到客戶端,這個替換也是挺耗費時間的。現在的實現算是 拿空間來換取時間吧。

3、刪除記錄不釋放空間:這很容易理解,為避免記錄刪除後的資料的大規模挪動,原記錄空間不刪除,只標記「已刪除」即可,以後還可以重複利用。

4、可以定期執行db.repairdatabase()來整理記錄,但這個過程會比較緩慢

③mongodb沒有如mysql那樣成熟的維護工具,這對於開發和it運營都是個值得注意的地方。

mongodb適合儲存一些關係簡單、資料量又很大的資料,比如我們的平台上虛擬機器的監控資訊,包括記憶體、io、cpu、網路等資料,每隔幾秒就採集一次資料,每週、每月,量很大,而且舊的監控資料也不會保留太長時間,就使用的mongodb來儲存這些資料;

另外mongodb的集群部署相對比較簡單,易於擴充套件;比如主從複製,在mongo.conf配置幾個引數就ok了;分片集群的配置也比較簡單。還支援使用命令列來進行動態地新增和刪除節點;

mongodb的優點與不足

(1)mongodb的不足之處

1、在集群分片中的資料分布不均勻

2、單機可靠性比較差

3、大資料量持續插入,寫入效能有較大波動

4、磁碟空間占用比較大

(2)mongodb的過人之處

1、無模式

2、查詢與索引方式靈活,是最像sql的nosql

3、支援複製集、主備、互為主備、自動分片等特性

mongodb與redis相比較:

mongodb 原始碼語言是c++,redis也是c或c++,

mongodb 檔案儲存是bson格式類似json,或自定義的二進位制格式。

mongodb與redis效能都很依賴記憶體的大小,mongodb 有豐富的資料表達、索引;最類似於關聯式資料庫,支援豐富的查詢語言,redis資料豐富,較少的io ,這方面mongodb優勢明顯。

mongodb不支援事物,靠客戶端自身保證,redis支援事物,比較弱,僅能保證事物中的操作按順序執行,這方面 redis優於mongodb。

mongodb對海量資料的訪問效率提公升,redis 較小資料量的效能及運算,這方面 mongodb效能優於redis .monbgodb 有mapredurce功能,提供資料分析,redis 沒有 ,這方面 mongodb優於redis 。

關係型資料庫與非關係型資料庫

關係型資料庫與非關係型資料庫的區別 非關係型資料庫的優勢 1.效能 nosql是基於鍵值對的,可以想象成表中的主鍵和值的對應關係,而且不需要經過sql層的解析,所以效能非常高。2.可擴充套件性 同樣也是因為基於鍵值對,資料之間沒有耦合性,所以非常容易水平擴充套件。關係型資料庫的優勢 1.複雜查詢 可...

關係型資料庫與非關係型資料庫

關係型資料庫最典型的資料結構是表,由二維表及其之間的聯絡所組成的乙個資料組織 優點 1 易於維護 都是使用表結構,格式一致 2 使用方便 sql語言通用,可用於複雜查詢 3 複雜操作 支援sql,可用於乙個表以及多個表之間非常複雜的查詢。缺點 1 讀寫效能比較差,尤其是海量資料的高效率讀寫 2 固定...

關係型資料庫與非關係型資料庫

指採用了關係模型來組織資料的資料庫。關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個資料組織。關係 一張二維表,每個關係都具有乙個關係名,也就是表名 元組 二維表中的一行,在資料庫中被稱為記錄 屬性 二維表中的一列,在資料庫中被稱為字段 域 屬性的取值範圍,也就是...