當前位置:
首頁 > 知識 > 我為什麼放棄MySQL?最終選擇了MongoDB

我為什麼放棄MySQL?最終選擇了MongoDB

最近有個項目的功能模塊,為了處理方便,需要操作集合類型的數據以及其他原因。考慮再三最終決定放棄使用MySQL,而選擇MongoDB。

兩個資料庫,大家應該都不陌生。他們最大的區別就是MySQL為關係型資料庫,而MongoDB為非關係型資料庫。常見的關係型資料庫有:MySQL、Oracle、DB2、SQL Server、Postgre SQL等,非關係型資料庫有MongoDB、Redis、Memcached、HBse等等。

1、關係型資料庫? 非關係型資料庫?

關係型資料庫可以理解為依賴一個模型來創建的資料庫,比如我們使用的MySQL中的表是由橫列和縱列組成的一個二維表格。關係型資料庫可以通過關係模型使多個表的數據關聯起來,比如我們平時說的 一對一、一對多、多對一。由於是建立在數據模型的基礎上,所以我們可以通過SQL語句很方便的在多個表之間做複雜的查詢操作。關係型資料庫相對安全,因為直接存儲在硬碟中所以突然的宕機、停電等意外不會導致數據丟失。MySQL的存儲方式是由自身的引擎決定的,常用的引擎有Innodb和MyISAM。他們主要的區別就是MyISAM 不支持事務,強調的是性能,執行速度比Innodb要快,Innodb提供支持事務等高級資料庫功能。

非關係型資料庫即我們常說的NoSQL資料庫,部署起來都比較簡單,沒有關係型資料庫那麼複雜。Mongo的存儲方式為虛擬內存+持久化存儲,Mongo將數據寫入內存中,再由虛擬內存管理器將其持久化到硬碟中,因此寫操作會比關係型資料庫快很多。NOSQL的存儲格式是key-value形式,可以像關係型資料庫那樣存儲基礎數據類型的數據,也可以存儲集合、對象等等。NoSQL雖然性能比較高,但是並不支持事物,也不能進行聯表查詢,一般用於較大規模數據的存儲。

2、他們的優點、缺點有哪些

關係型資料庫發展了很長一段時間,擁有非常成熟的體系。所佔份額也在逐漸增加。而且支持事物的操作,保證數據的一致性,可以通過SQL語句完成複雜的操作。但是使用過程中當數據量到達一定程度時,關係型資料庫的效率會有明顯的下降。一個複雜的查詢操作,一系列的組合索引都會消耗非常多的內存空間,此時我們需要對資料庫進行讀寫分離操作,或者將資料庫結構進行拆分(水平拆分、垂直拆分)將請求壓力分擔在不同的庫中。

垂直拆分是指將一張表拆分成多個表,表之間通過主鍵進行關聯。

水平拆分是按照某種規則拆分成多個表,比如通過用戶角色進行拆分

讀寫分離:所謂讀寫分離就是講讀操作(查詢數據)和寫操作(插入&更新)指向不同的資料庫節點,他們中間通過某種機制實現數據的同步,如binlog。實際的應用中大部分壓力還是來自讀操作,所以主要是一主多從的架構。

非關係型資料庫發展的這幾年,深受人們的喜愛。免費開源、成本低、部署簡單、非結構化存儲等等明顯的優勢。而且它對海量數據處理能力非常強,內存級資料庫,查詢速度也非常快。存儲的數據格式比較豐富,易於擴展,雖然不能使用sql進行複雜的查詢,但是MongoDB支持JavaScript,所以可以通過js腳本進行複雜的資料庫管理操作。關於NoSQL的缺點個人感覺目前就是不支持事物了吧,其他方面那都不是事兒。

3、什麼時候用mongo

Mongo是用c++編寫的,支持多種語言如:Java、Python、Ruby、PHP、C++、C# 等,有時候針對不同的業務需求,選擇Mongo能夠避免浪費很多不必要的資源

日誌系統

系統運行過程中產生的日誌信息,一般種類較多、範圍較大、內容也比較雜亂。通過MongoDB可以將這些雜亂的日誌進行收集管理。不僅方便了管理,查找或者導出也會變得非常容易

地理位置存儲

MongoDB支持地理位置、二維空間索引,可以存儲經緯度,因此可以很快的計算出兩點之間的距離,等位置信息。如查詢附近的人、或者訂餐系統、配送系統等

數據規模增長很快

前面提到過關係型資料庫數據量過大時,需要進行分庫分表,這樣真正操作起來可能會比較麻煩。如果選擇mongo進行分庫分表操作時,就會變得很簡單。

保證高可用的環境

Mongo本身就擁有高可用及分區的解決方案,設置主從伺服器非常方便,除此之外Mongo還可以快速並且安全的實現故障節點的轉移。

文件存儲需求

GridFS是MongoDB規範,用於存儲和檢索圖片、音頻、視頻等大文件。GridFS雖然是文件存儲的一種方式,可以存儲超過16M的文件。但是它本身又是存儲在MongoDB集合中的

其他場景

如遊戲開發中我們可以通過MongoDB存儲用戶信息、裝備、積分等,除此之外物流系統、社交系統、甚至物聯網系統,Mongo都能提供完美的數據存儲服務。

4.MySQL、MongoDB簡單的性能測試

關於兩個數據的性能,最有力的的說話還是通過實踐來進行測試,網上看到一組測試數據,分享給大家。

測試環境:Windows 10、內存8G、CPU i5 3.30GHZ。均無索引

測試語言:Python

鏈接工具:pymysql、pymongo

MySQL && Mongo 測試數據統計

提交次數單次提交個數MySQL運行時間(s)Mongo運行時間(s)數據量110001000039121622.0202100100301.611000萬31001005.771.600410252.351.560510257.421.601000萬6100001298.075.2907100001496.185.291000萬

作者:初一丶

原文:https://www.cnblogs.com/wyl-0120/p/10146895.html

我為什麼放棄MySQL?最終選擇了MongoDB

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

HashMap和Hashtable的6個區別
天氣轉涼,程序員們趁機穿上了工作服,同事都看傻了

TAG:程序員小新人學習 |