最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql與MongoDB性能對比,哪個更適合自己

 更新時間:2023年06月03日 13:25:50   投稿:mdxy-dxy  
經??吹接腥擞懻?,mongodb性能不如MySQL,MySQL能不能代替之類的說法?,其實作為技術人,很不喜歡哪個比哪個好這種說法,基本就是挑事,我們今天一起

MySQL與MongoDB都是開源的常用數據庫,但是MySQL是傳統(tǒng)的關系型數據庫,MongoDB則是非關系型數據庫,也叫文檔型數據庫,是一種NoSQL的數據庫。它們各有各的優(yōu)點,關鍵是看用在什么地方。所以我們所熟知的那些SQL語句就不適用于MongoDB了,因為SQL語句是關系型數據庫的標準語言。

一、簡單介紹

1、關系型數據庫-MySQL

1、在不同的引擎上有不同的存儲方式。
2、查詢語句是使用傳統(tǒng)的sql語句,擁有較為成熟的體系,成熟度很高。
3、開源數據庫的份額在不斷增加,mysql的份額頁在持續(xù)增長。
4、缺點就是在海量數據處理的時候效率會顯著變慢。

2、非關系型數據庫-MongoDB

非關系型數據庫(nosql ),屬于文檔型數據庫。先解釋一下文檔的數據庫,即可以存放xml、json、bson類型系那個的數據。這些數據具備自述性,呈現(xiàn)分層的樹狀數據結構。數據結構由鍵值(key=>value)對組成。

1、存儲方式:虛擬內存+持久化。
2、查詢語句:是獨特的MongoDB的查詢方式。
3、適合場景:事件的記錄,內容管理或者博客平臺等等。
4、架構特點:可以通過副本集,以及分片來實現(xiàn)高可用。
5、數據處理:數據是存儲在硬盤上的,只不過需要經常讀取的數據會被加載到內存中,將數據存儲在物理內存中,從而達到高速讀寫。
6、成熟度與廣泛度:新興數據庫,成熟度較低,Nosql數據庫中最為接近關系型數據庫,比較完善的DB之一,適用人群不斷在增長。

4、MongoDB優(yōu)勢與劣勢

優(yōu)勢:

1、在適量級的內存的MongoDB的性能是非常迅速的,它將熱數據存儲在物理內存中,使得熱數據的讀寫變得十分快。
2、MongoDB的高可用和集群架構擁有十分高的擴展性。
3、在副本集中,當主庫遇到問題,無法繼續(xù)提供服務的時候,副本集將選舉一個新的主庫繼續(xù)提供服務。
4、MongoDB的Bson和JSon格式的數據十分適合文檔格式的存儲與查詢。

劣勢:

1、 不支持事務操作。MongoDB本身沒有自帶事務機制,若需要在MongoDB中實現(xiàn)事務機制,需通過一個額外的表,從邏輯上自行實現(xiàn)事務。
2、 應用經驗少,由于NoSQL興起時間短,應用經驗相比關系型數據庫較少。
3、MongoDB占用空間過大。

4、MongoDB和MySQL的對比(區(qū)別介紹)

數據庫MongoDBMySQL
數據庫模型非關系型關系型
存儲方式以類JSON的文檔的格式存儲不同引擎有不同的存儲方式
查詢語句MongoDB查詢方式(類似JavaScript的函數)SQL語句
數據處理方式基于內存,將熱數據存放在物理內存中,從而達到高速讀寫不同引擎有自己的特點
成熟度新興數據庫,成熟度較低成熟度高
廣泛度NoSQL數據庫中,比較完善且開源,使用人數在不斷增長開源數據庫,市場份額不斷增長
事務性僅支持單文檔事務操作,弱一致性支持事務操作
占用空間占用空間大占用空間小
join操作MongoDB沒有joinMySQL支持join

性能方便的優(yōu)化介紹

分別從設計思想、性能、安全性、擴展性、事務等幾個方面,來做一下比較:

mongo vs mysql

二、 設計思想的不同

以訂單為例,我們看看兩種數據庫應該怎么設計

MySQL是這樣子的

訂單表

mysql order表結構

訂單詳情

order item表結構

以訂單號關聯(lián)字段。

MongoDB是 這樣子的

mongo order結構

order_item作為訂單的子元素,是一個整體;

在一對一,一對多的場景,特別適合用MongoDB的內嵌文檔和數組來存儲,讀寫效率都比較高。

一對多的場景則適合MySQL的表結構來存儲。

你覺得那種存儲的更合理呢?

三、性能

一般情況同等條件下,MongoDB會比MySQL快 ,主要原因如下:

a.Mongo使用的內存映射技術, 寫入數據時候只要在內存里完成就可以返回給應用程序,這樣并發(fā)量自然就很高。而保存到硬體的操作則在后臺異步完成。

b.MongoDB的設計要求你常用的數據(working set)可以放到內存里。這樣大部分操作只需要讀內存,內存操作當然比較快,這也是MongoDB,經常會和redis比較的原因。前提就是要保證服務器有 足夠用的內存,否則性能會嚴重下降。

c.數據集中存放,減少讀寫時磁盤尋道的時間,這也是MongoDB的基本思想之一。

并發(fā)能力,具體看過有網友測試過,MongoDB和MySQL的并發(fā)能力,借鑒一下:

并發(fā)測試結果

可見,性能上并沒有我們想象的差距那么大,

我沒有測試過,有興趣的網友可以測試一下

四、數據安全性

我們經??吹叫侣?,MongoDB數據庫被黑,被勒索的新聞,為什么呢?

原來MongoDB 3.6版本之前,綁定的0.0.0.0的IP,即直接外網開放,而且我們知道MongoDB默認是沒有密碼的,所以很多新手弄的服務器就是在裸奔,所以被黑就在所難免的,也不能全怪MongoDB。

通過一些配置,MongoDB還是很安全的

a. 綁定本機IP ,限于局域網訪問;

b. 配置防火墻,禁止外部訪問和端口探測;

c. 設置合理的用戶和分派權限。道理和MySQL一樣,遵循最小權限的原則。

五、事務

早期的版本是沒有事務的,因為在MongoDB中,對于單條記錄的一個操作是原子性的,一般來說,MongoDB將有關聯(lián)的數據存儲在一起,所以很多操作不像MySQL,需要做多表的操作。

從4.0版本開始,MongoDB支持副本集的事務,4.2支持切片的事務;

對于多表事物的需求場景,MongoDB也是支持的,可以在多個分片、庫、表、文檔之間實現(xiàn)分布式的事務。

分布式事務會嚴重影響性能,所以要謹慎使用,當需要事務時,優(yōu)先考慮是否可通過合理使用MongoDB的內嵌文檔和數組,降低使用事務的幾率。

要了解MongoDB的事務,要先了解 一下MongoDB的集群。

六、擴展性

隨著互聯(lián)網的發(fā)展,數據的量級也是撐指數的增長,從GB到TB到PB。對數據的各種操作也是愈加的困難,所以在做數據庫選型時,擴展性是必須要考慮的指標:

MongoDB提供了sharded clusters(分片集群) 和 replica sets(副本集)兩種集群模式

副本集:

架構圖如下,目的是數據冗余和系統(tǒng)高可用,類似于MySQL的主從架構,每個節(jié)點的數據是一致的,主負責讀寫操作,從負責數據的備份,在需要的時候 可轉成主節(jié)點。

簡單主從

如果需要做到故障自動轉移,還需要增加一個選舉節(jié)點,選舉節(jié)點只負責在主節(jié)點出現(xiàn)問題時,把從節(jié)點選舉為主節(jié)點。不負責數據存儲。這個和redis的哨兵模式類似。

哨兵模式

關于主從的復制是一個比較復雜的過程,后面有時間再詳細介紹。

分片集群:

分片是MongoDB提供的更高級的集群模式,通過分片,把數據分配到不同的機器上,每臺機器只存儲了部分的數據,通過mongos實現(xiàn)路由去訪問。

切片模式架構

這是MySQL沒有的功能,類似于MySQL分庫分表的功能,通過mycat+mysql實現(xiàn)

6.優(yōu)勢所在

MongoDB數據類型豐富,查詢功能強大,還有文本搜索功能和地理空間計算,強大的數據分析和統(tǒng)計能力。

缺點:

沒有join ,連表操作能力弱,所以在復雜查詢時,還是關系型數據庫更勝一籌。

7.隔離級別

這是MySQL里的概念,在MongoDB事務提交前,事務外看不到本次修改的內容,隔離級別類似MySQL默認的隔離級別,“可重復讀”的級別。

綜上所述,總結一下

什么時候適合用MongoDB:

1. 數據結構不確定,可能發(fā)生改動的場景;

2.事務安全性要求不高,數據擴展要求較高的時候;

什么時候用MySQL:

1. 有事務要求,強一致性要求較高,涉及到金錢的時候;

2. 邏輯復雜,有較多join的需求;

沒有最好的,只有最合適的,適合自己業(yè)務的就是最好的!

相關文章

  • RBAC簡介_動力節(jié)點Java學院整理

    RBAC簡介_動力節(jié)點Java學院整理

    這篇文章主要介紹了RBAC簡介,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 關于sql注入的簡要演示(入坑拋磚)

    關于sql注入的簡要演示(入坑拋磚)

    這篇文章主要介紹了關于sql注入的簡要演示(入坑拋磚),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • mysql與MongoDB性能對比,哪個更適合自己

    mysql與MongoDB性能對比,哪個更適合自己

    經??吹接腥擞懻摚琺ongodb性能不如MySQL,MySQL能不能代替之類的說法?,其實作為技術人,很不喜歡哪個比哪個好這種說法,基本就是挑事,我們今天一起
    2023-06-06
  • Linux下Navicat15激活的詳細步驟

    Linux下Navicat15激活的詳細步驟

    這篇文章主要介紹了Linux下激活Navicat15的詳細步驟,經過測試Navicat?15.0.8版本可激活,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • SQL注入的四種防御方法總結

    SQL注入的四種防御方法總結

    SQL Injection是一種常見的Web安全漏洞,主要形成的原因是在數據交互中,下面這篇文章主要給大家介紹了關于SQL注入的四種防御方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Access和SQL Server里面的SQL語句的不同之處

    Access和SQL Server里面的SQL語句的不同之處

    做了一個Winform的營養(yǎng)測量軟件,來回的搗騰著Access數據庫,還是那幾句增刪改查,不過用多了,發(fā)現(xiàn)Access數據庫下的SQL語句和SQL Server下正宗的SQL還有有很大的不同。
    2009-12-12
  • Spring集成MyBatis完整實例(分享)

    Spring集成MyBatis完整實例(分享)

    下面小編就為大家?guī)硪黄猄pring集成MyBatis完整實例(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 解決MongoVUE的Collections數據不顯示的問題

    解決MongoVUE的Collections數據不顯示的問題

    這篇文章主要介紹了MongoVUE的Collections數據不顯示的解決方法 ,需要的朋友可以參考下
    2017-05-05
  • MySQL與Redis如何保證數據一致性詳解

    MySQL與Redis如何保證數據一致性詳解

    在高并發(fā)的業(yè)務場景下數據庫大多數情況都是用戶并發(fā)訪問最薄弱的環(huán)節(jié),所以就需要使用redis做一個緩沖操作,讓請求先訪問到redis,而不直接訪問Mysql等數據庫,這篇文章主要給大家介紹了關于MySQL與Redis如何保證數據一致性的相關資料,需要的朋友可以參考下
    2021-08-08
  • SQL 注入式攻擊的本質

    SQL 注入式攻擊的本質

    SQL 注入式攻擊,又是注入式攻擊,沒想到2008年這個老掉牙的東西又出來攪風攪雨
    2008-12-12

最新評論

富平县| 治多县| 台东县| 溧阳市| 略阳县| 泗水县| 巩义市| SHOW| 大安市| 昔阳县| 股票| 兴城市| 东乌| 东阳市| 宜川县| 大邑县| 保定市| 襄汾县| 荆州市| 古丈县| 阜城县| 涞源县| 博乐市| 大田县| 宾川县| 治多县| 察哈| 防城港市| 高雄县| 藁城市| 两当县| 临澧县| 司法| 蛟河市| 当涂县| 威远县| 台湾省| 喜德县| 长葛市| 巴林右旗| 广灵县|