亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2023年06月03日 13:25:50   投稿:mdxy-dxy  
經(jīng)常看到有人討論,mongodb性能不如MySQL,MySQL能不能代替之類的說法?,其實作為技術(shù)人,很不喜歡哪個比哪個好這種說法,基本就是挑事,我們今天一起

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

一、簡單介紹

1、關(guān)系型數(shù)據(jù)庫-MySQL

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

2、非關(guān)系型數(shù)據(jù)庫-MongoDB

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

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

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

優(yōu)勢:

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

劣勢:

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

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

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

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

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

mongo vs mysql

二、 設(shè)計思想的不同

以訂單為例,我們看看兩種數(shù)據(jù)庫應(yīng)該怎么設(shè)計

MySQL是這樣子的

訂單表

mysql order表結(jié)構(gòu)

訂單詳情

order item表結(jié)構(gòu)

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

MongoDB是 這樣子的

mongo order結(jié)構(gòu)

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

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

一對多的場景則適合MySQL的表結(jié)構(gòu)來存儲。

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

三、性能

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

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

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

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

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

并發(fā)測試結(jié)果

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

我沒有測試過,有興趣的網(wǎng)友可以測試一下

四、數(shù)據(jù)安全性

我們經(jīng)常看到新聞,MongoDB數(shù)據(jù)庫被黑,被勒索的新聞,為什么呢?

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

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

a. 綁定本機IP ,限于局域網(wǎng)訪問;

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

c. 設(shè)置合理的用戶和分派權(quán)限。道理和MySQL一樣,遵循最小權(quán)限的原則。

五、事務(wù)

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

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

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

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

要了解MongoDB的事務(wù),要先了解 一下MongoDB的集群。

六、擴展性

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

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

副本集:

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

簡單主從

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

哨兵模式

關(guān)于主從的復(fù)制是一個比較復(fù)雜的過程,后面有時間再詳細介紹。

分片集群:

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

切片模式架構(gòu)

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

6.優(yōu)勢所在

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

缺點:

沒有join ,連表操作能力弱,所以在復(fù)雜查詢時,還是關(guān)系型數(shù)據(jù)庫更勝一籌。

7.隔離級別

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

綜上所述,總結(jié)一下

什么時候適合用MongoDB:

1. 數(shù)據(jù)結(jié)構(gòu)不確定,可能發(fā)生改動的場景;

2.事務(wù)安全性要求不高,數(shù)據(jù)擴展要求較高的時候;

什么時候用MySQL:

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

2. 邏輯復(fù)雜,有較多join的需求;

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

相關(guān)文章

最新評論