它們之間的比較將是不公平的,它們都有各自的用途张漂。
MySQL是一種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),它將數(shù)據(jù)存儲(chǔ)在表中谨娜,并使用結(jié)構(gòu)化查詢語(yǔ)言(SQL)進(jìn)行數(shù)據(jù)庫(kù)訪問(wèn)航攒。 在MySQL中,您可以根據(jù)需求預(yù)先定義數(shù)據(jù)庫(kù)模式趴梢,并設(shè)置規(guī)則來(lái)管理表中字段之間的關(guān)系漠畜。
如果您的數(shù)據(jù)結(jié)構(gòu)很好地適合表和行,MySQL將為您提供與數(shù)據(jù)的健壯輕松的交互坞靶。 如果您關(guān)心的是性能憔狞,則很有可能您真的不需要MongoDB。 最有可能的是彰阴,您只需要正確索引數(shù)據(jù)即可瘾敢。 如果您需要SQL或事務(wù),則必須堅(jiān)持使用MySQL尿这。
MongoDB將數(shù)據(jù)存儲(chǔ)在類似JSON的文檔中簇抵,這些文檔的結(jié)構(gòu)可能有所不同。 相關(guān)信息存儲(chǔ)在一起射众,以便通過(guò)MongoDB查詢語(yǔ)言進(jìn)行快速查詢?cè)L問(wèn)碟摆。 MongoDB使用動(dòng)態(tài)模式,這意味著您無(wú)需先定義結(jié)構(gòu)(例如字段或它們的值的類型)就可以創(chuàng)建記錄责球。 您可以簡(jiǎn)單地通過(guò)添加新字段或刪除現(xiàn)有字段來(lái)更改記錄(我們稱為文檔)的結(jié)構(gòu)焦履。我給大家推薦一個(gè)學(xué)習(xí)氛圍超好的地方,python交流裙:點(diǎn)擊進(jìn)入雏逾,免費(fèi)領(lǐng)取高品質(zhì)python學(xué)習(xí)資料大全 適合在校大學(xué)生嘉裤,小白,想轉(zhuǎn)行栖博,想提升自己的都可以加入屑宠。裙里有大量學(xué)習(xí)資料,有大神解答交流問(wèn)題仇让,每晚都有免費(fèi)的高品質(zhì)騰訊直播課堂
如果您的數(shù)據(jù)似乎很難在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中建模典奉,或者發(fā)現(xiàn)自己對(duì)數(shù)據(jù)庫(kù)模式進(jìn)行了非規(guī)范化,則應(yīng)考慮使用MongoDB丧叽。 如果您發(fā)現(xiàn)自己嘗試存儲(chǔ)序列化的數(shù)組或JSON對(duì)象卫玖,則表明您最好不要使用MongoDB。 如果您無(wú)法預(yù)先定義架構(gòu)踊淳,或者想將記錄存儲(chǔ)在具有不同字段的同一集合中假瞬,那是另一個(gè)很好的理由。
這完全取決于用例。
MySQL是一個(gè)關(guān)系數(shù)據(jù)庫(kù)脱茉。 這種數(shù)據(jù)庫(kù)適合于結(jié)構(gòu)化數(shù)據(jù)剪芥。 它還具有一個(gè)模式,或者換句話說(shuō)琴许,具有固定的格式來(lái)存儲(chǔ)數(shù)據(jù)税肪,并且在以后的任何格式更改都會(huì)很麻煩。 由于數(shù)據(jù)易于組織和管理到表中榜田,因此該數(shù)據(jù)庫(kù)中的查詢和搜索速度很快益兄。
MongoDB是一個(gè)noSQL數(shù)據(jù)庫(kù)。 它屬于傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)無(wú)法執(zhí)行的新型數(shù)據(jù)庫(kù)串慰。 我個(gè)人經(jīng)歷過(guò)的最大優(yōu)點(diǎn)是它沒(méi)有架構(gòu)偏塞。 您可以按照自己喜歡的任何格式存儲(chǔ)數(shù)據(jù)。 您也可以隨時(shí)輕松編輯格式邦鲫,而不會(huì)影響數(shù)據(jù)灸叼。 MongoDB具有另一個(gè)優(yōu)勢(shì),它具有高度可擴(kuò)展性庆捺。 如果數(shù)據(jù)量巨大古今,那么這不是問(wèn)題,您只需向集群添加更多節(jié)點(diǎn)滔以,一切就可以順利進(jìn)行捉腥。 唯一的缺點(diǎn)是查詢比MySQL慢。
如果您是數(shù)據(jù)庫(kù)的初學(xué)者你画,那么我建議您繼續(xù)使用MongoDB抵碟。 您可以像在大腦中想象的那樣存儲(chǔ)數(shù)據(jù)。 固定行和列沒(méi)有限制坏匪,因?yàn)楦緵](méi)有架構(gòu)拟逮。 即使以后格式有所更改,您也可以以最小的痛苦反映這些更改适滓。
根據(jù)您的處理方式敦迄,這是一個(gè)非常簡(jiǎn)單或非常困難的問(wèn)題。 簡(jiǎn)單的答案都不是凭迹。 兩種數(shù)據(jù)庫(kù)在各自類別中被認(rèn)為是最好的罚屋,MySQL是開(kāi)放源代碼關(guān)系數(shù)據(jù)庫(kù),而MongoDB是文檔NoSQL數(shù)據(jù)庫(kù)嗅绸。
一個(gè)更周到的答案是脾猛,這取決于您打算將數(shù)據(jù)庫(kù)用于什么目的。 盡管所有數(shù)據(jù)庫(kù)的目的都是以高效的方式存儲(chǔ)和檢索數(shù)據(jù)鱼鸠,但MySQL和MongoDB都以非常不同的方式進(jìn)行存儲(chǔ)尖滚。 在這種情況下喉刘,每個(gè)數(shù)據(jù)庫(kù)都更適合于特定類型的使用瞧柔。 在很多方面漆弄,關(guān)系數(shù)據(jù)庫(kù)和NoSQL數(shù)據(jù)庫(kù)之間的差異通常可以應(yīng)用于特定產(chǎn)品造锅,例如MongoDB和MySQL撼唾。
讓我們從NoSQL數(shù)據(jù)庫(kù)與關(guān)系數(shù)據(jù)庫(kù)的區(qū)別開(kāi)始。
NoSQL數(shù)據(jù)庫(kù)(例如MongoDB)介入了企業(yè)對(duì)敏捷性哥蔚,性能和規(guī)模需求的答案倒谷。因此,NoSQL數(shù)據(jù)庫(kù)可以支持各種用例糙箍,包括實(shí)時(shí)的探索性和預(yù)測(cè)性分析渤愁。
NoSQL系統(tǒng)是分布式的非關(guān)系型數(shù)據(jù)庫(kù),旨在用于大規(guī)模數(shù)據(jù)存儲(chǔ)以及用于跨大量服務(wù)器的并行高性能數(shù)據(jù)處理深夯。 它們產(chǎn)生于對(duì)敏捷性抖格,性能和規(guī)模的需求。 因此咕晋,NoSQL數(shù)據(jù)庫(kù)可以支持各種用例,包括實(shí)時(shí)的探索性和預(yù)測(cè)性分析掌呜。 NoSQL數(shù)據(jù)庫(kù)旨在橫向擴(kuò)展,旨在擴(kuò)展到數(shù)億甚至數(shù)十億執(zhí)行更新和讀取的用戶质蕉。
以下是MongoDB在關(guān)系關(guān)系方面(以及代理MySQL)所具有的優(yōu)勢(shì):
1.存儲(chǔ)沒(méi)有結(jié)構(gòu)的大量數(shù)據(jù)。
MongoDB沒(méi)有限制可存儲(chǔ)的數(shù)據(jù)類型模暗。另外,您可以根據(jù)業(yè)務(wù)需求的變化添加新類型汰蓉。
2.使用云計(jì)算和存儲(chǔ)。
基于云的存儲(chǔ)是一個(gè)很好的解決方案顾孽,但是它需要將數(shù)據(jù)輕松分布在多臺(tái)服務(wù)器上以進(jìn)行擴(kuò)展。 MongoDB的目的是在現(xiàn)場(chǎng)使用價(jià)格合理的硬件進(jìn)行測(cè)試若厚,然后在云中進(jìn)行生產(chǎn)。
3.快速開(kāi)發(fā)测秸。
僅憑個(gè)人經(jīng)驗(yàn)灾常,我要補(bǔ)充的一點(diǎn)是,有很多出色的基于云的數(shù)據(jù)庫(kù)服務(wù)可以滿足實(shí)時(shí)應(yīng)用程序的需求铃拇。 云服務(wù)本身具有很多好處。 例如慷荔,將我的公司吸引到亞馬遜的一項(xiàng)功能是按分鐘計(jì)費(fèi)。 它允許我們僅按使用亞馬遜服務(wù)的時(shí)間付費(fèi)显晶,而不是按月或按年付費(fèi)。
此外磷雇,云服務(wù)提供了許多其他服務(wù),您可以將它們集成到NoSQL中唯笙,包括分析螟蒸,AI,計(jì)劃的作業(yè)以及許多其他有用的服務(wù)睁本。
MongoDB既是最受歡迎的文檔尿庐,也是當(dāng)今正在使用的NoSQL數(shù)據(jù)庫(kù)。使用它的公司包括Google呢堰,Cisco抄瑟,SAP,F(xiàn)acebook枉疼,Expedia皮假,Adobe,eBay等骂维。 MongoDB是一種NoSQL數(shù)據(jù)庫(kù)惹资,稱為文檔數(shù)據(jù)庫(kù)。
NoSQL數(shù)據(jù)庫(kù)的一件事是航闺,與可用的數(shù)據(jù)庫(kù)(如MySQL)相比褪测,可用于它們的客戶端應(yīng)用程序更少,但是潦刃,可以這么說(shuō)侮措,用于MongoDB的Navicat是我使用過(guò)的一個(gè)客戶端,確實(shí)非常有用乖杠。
這是主屏幕的屏幕截圖:
我喜歡Navicat可以用三種方式之一來(lái)顯示文檔分扎,具體取決于您要如何處理它們。他們是:
網(wǎng)格視圖
樹(shù)視圖
JSON視圖
網(wǎng)格視圖:
網(wǎng)格視圖(如上圖所示)是DBA最熟悉的傳統(tǒng)表格顯示胧洒。它可以處理任何文檔大小畏吓,并支持高級(jí)功能墨状,例如根據(jù)數(shù)據(jù)類型突出顯示單元格,列隱藏等菲饼。
樹(shù)視圖以分層視圖顯示您的文檔:
您還可以將數(shù)據(jù)顯示為JSON文檔肾砂,同時(shí)可以使用內(nèi)置的驗(yàn)證機(jī)制添加文檔,以確保您的編輯正確巴粪。
同時(shí)通今,像MySQL這樣的關(guān)系數(shù)據(jù)庫(kù)具有許多自身的杰出功能:
1.模式
盡管“無(wú)模式”數(shù)據(jù)庫(kù)通常看起來(lái)更容易上手肛根,但它們卻導(dǎo)致大量的技術(shù)債務(wù)。 如果您不確定如何預(yù)先存儲(chǔ)數(shù)據(jù)漏策,則新的查詢模式如果需要執(zhí)行不同的設(shè)置才能獲得很好的支持。另一方面芭届,使用SQL預(yù)先構(gòu)建架構(gòu)會(huì)使復(fù)雜的查詢受益感耙。 但是,正確建模數(shù)據(jù)對(duì)于提高性能很重要逃片。 為給定的工作負(fù)載創(chuàng)建適當(dāng)?shù)乃饕捅砑軜?gòu)可以顯著提高性能只酥。 相反,設(shè)計(jì)錯(cuò)誤的架構(gòu)可能會(huì)導(dǎo)致性能顯著下降损离。
2.最小化數(shù)據(jù)冗余
關(guān)系數(shù)據(jù)庫(kù)支持JOIN僻澎,并且不需要在多個(gè)表中存儲(chǔ)相同的字段十饥。 這樣,組織還可以節(jié)省額外存儲(chǔ)空間的開(kāi)銷拳恋。 此外谬运,它們可以避免與維護(hù)獨(dú)立數(shù)據(jù)庫(kù)相關(guān)的完整性問(wèn)題。
3.數(shù)據(jù)完整性
關(guān)系數(shù)據(jù)庫(kù)可以確保通過(guò)ACID(原子性梆暖,一致性,隔離性厚掷,持久性)來(lái)確保事務(wù)處理的可靠性级解。 如果您不熟悉,ACID是在修改數(shù)據(jù)庫(kù)時(shí)使用的一組屬性抡爹。 它們保證即使在您遇到錯(cuò)誤冬竟,電源故障民逼,崩潰等情況下,事務(wù)也有效笑诅。
4.函數(shù)
關(guān)系數(shù)據(jù)庫(kù)具有許多非常有用的功能苟鸯,例如:
連接:根據(jù)兩個(gè)或多個(gè)表之間的相關(guān)列組合行
聚合:將多行的值分組在一起以形成一個(gè)聚合值(即MIN棚点,MAX,AVG)
窗口函數(shù):對(duì)一組行進(jìn)行操作瘫析,并從基礎(chǔ)查詢中為每行返回一個(gè)值(即PARTITION BY贬循,ORDER BY)
通用表表達(dá)式(CTE):簡(jiǎn)化復(fù)雜的聯(lián)接和子查詢(即WITH)
ROLLUPS:GROUP BY子句的擴(kuò)展,允許您使用單個(gè)查詢來(lái)生成多個(gè)分組集
5.管理和開(kāi)發(fā)工具
與NoSQL數(shù)據(jù)庫(kù)相比烂瘫,這種方法已經(jīng)存在了很長(zhǎng)的時(shí)間坟比,因此有很多出色的關(guān)系數(shù)據(jù)庫(kù)管理和開(kāi)發(fā)工具。 其中許多針對(duì)特定產(chǎn)品柠衅,而其他諸如Navicat Premium則與許多產(chǎn)品兼容籍琳,包括MySQL趋急,MariaDB,SQL Server愈犹,Oracle闻丑,PostgreSQL和SQLite嗦嗡。 說(shuō)實(shí)話饭玲,Navicat甚至支持最受歡迎的NoSQL DB,MongoDB矮冬,使其成為關(guān)系型和NoSQL數(shù)據(jù)庫(kù)管理與開(kāi)發(fā)工具胎署。
在確定MongoDB是否比MySQL更好之前窑滞,讓我們首先了解這兩個(gè)數(shù)據(jù)庫(kù)的基本概念哀卫。
1.MongoDB
MongoDB是一個(gè)開(kāi)源NoSQL(非唯一SQL)數(shù)據(jù)庫(kù)。 它屬于非關(guān)系數(shù)據(jù)庫(kù)家族趾撵。 在非關(guān)系模型中共啃,不涉及數(shù)據(jù)的表或順序結(jié)構(gòu)。 NoSQL數(shù)據(jù)庫(kù)模型中有4個(gè)主要模型妈候。 鍵值存儲(chǔ),基于列啸胧,基于文檔和圖纺念。
MongoDB屬于“文檔存儲(chǔ)”類別想括,它以JSON文檔(JavaScript對(duì)象表示法)的形式存儲(chǔ)數(shù)據(jù)瑟蜈。與傳統(tǒng)的RDBMS相比,JSON文檔提供了一種簡(jiǎn)單而靈活的結(jié)構(gòu)宪躯,因?yàn)樗菬o(wú)模式的位迂。
MongoDB可用于處理大量數(shù)據(jù),即大數(shù)據(jù)和從IOT對(duì)象收集的數(shù)據(jù)臣缀,等等精置。 因此刑顺,它可以輕松地在很大一部分?jǐn)?shù)據(jù)庫(kù)上管理和執(zhí)行數(shù)據(jù)庫(kù)操作,而不會(huì)導(dǎo)致系統(tǒng)停機(jī)狼讨。 但是政供,它占用了大量?jī)?nèi)存空間。
2.MySQL
現(xiàn)在讓我們繼續(xù)了解什么是MySQL离陶。 MySQL是傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)招刨。它本質(zhì)上是開(kāi)源的哀军,并且遵循數(shù)據(jù)庫(kù)的表和架構(gòu)結(jié)構(gòu)。
MySQL可以與各種托管集成杉适,并且可以在Linux猿推,Windows,Mac藕咏,Ubuntu等大多數(shù)平臺(tái)上運(yùn)行侈离。MySQL可以用于大型和小型應(yīng)用程序筝蚕。 此外起宽,它可與Java坯沪,C ++,Perl等各種語(yǔ)言配合使用腐晾,
但是丐一,如果您的數(shù)據(jù)集很大库车,則檢索和上傳數(shù)據(jù)所花費(fèi)的時(shí)間可能會(huì)很大。
看完兩個(gè)數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí),兩者都有各自的優(yōu)缺點(diǎn)晶乔。選擇正確的數(shù)據(jù)庫(kù)主要取決于您所經(jīng)營(yíng)的業(yè)務(wù)類型正罢。
這是這兩個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)之間的比較驻民,它將使您對(duì)它們的應(yīng)用程序有更好的了解。
什么是MySQL呛占?
作為一種開(kāi)放源代碼的RDBMS(關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng))晾虑,MySQL多年來(lái)獲得了廣泛的普及帜篇。 它最初由MySQL AB開(kāi)發(fā),現(xiàn)在由Oracle Corporation擁有笙隙。 根據(jù)需求竟痰,用戶可以預(yù)定義數(shù)據(jù)庫(kù)模式并建立規(guī)則掏呼,從而能夠管理表中相關(guān)字段之間的關(guān)系。
什么是MongoDB莽鸿?
MongoDB由MongoDB祥得,Inc開(kāi)發(fā)级及,它是一個(gè)流行的非關(guān)系數(shù)據(jù)庫(kù)窄锅。數(shù)據(jù)以BSON(一種二進(jìn)制表示形式)的形式作為文檔存儲(chǔ)在這種DBMS中缰雇。
對(duì)于查詢?cè)L問(wèn)械哟,MongoDB查詢語(yǔ)言用于存儲(chǔ)相關(guān)數(shù)據(jù)暇咆。每個(gè)文檔的字段可能不同丙曙,并且您無(wú)需向系統(tǒng)聲明文檔結(jié)構(gòu)。這些文件本質(zhì)上是不言自明的扯旷。
模式的靈活性
MongoDB具有優(yōu)于MySQL的優(yōu)勢(shì)钧忽,因?yàn)橛脩粼诩軜?gòu)設(shè)計(jì)方面沒(méi)有任何限制耸黑。 開(kāi)發(fā)人員可以將某些文檔放入集合中篮幢。 文件之間不必有任何關(guān)系三椿。
查詢語(yǔ)言
MongoDB和MySQL中的查詢語(yǔ)言都很強(qiáng)大。 MongoDB中使用非結(jié)構(gòu)化查詢語(yǔ)言男翰。如果要在JSON文檔中開(kāi)發(fā)查詢并匹配結(jié)果纽乱,則必須具有相應(yīng)屬性的文檔規(guī)范鸦列。
關(guān)系
MongoDB不支持JOIN操作鹏倘。相反,它支持多維類型的數(shù)據(jù)骆姐,例如數(shù)組。 “嵌入”一詞用于定義一個(gè)文檔在另一個(gè)文檔中的位置肉渴。
速度與性能
與MySQL相比带射,MongoDB可以控制大量不受限制的數(shù)據(jù)窟社。因?yàn)樗褂脩裟軌蛞詫?duì)工作量敏感的方式進(jìn)行查詢,所以它具有更快的速度关炼。
安全模式
MongoDB可以建立對(duì)可變權(quán)限集的控制儒拂。 在MongoDB中侣灶,關(guān)鍵的安全功能包括授權(quán),審核和身份驗(yàn)證缕碎。 您還將發(fā)現(xiàn)使用安全套接字層(SSL)和傳輸層安全性(TLS)加密端點(diǎn)是可行的。 這樣可以確保只有目標(biāo)客戶才能閱讀文檔凡怎。
何時(shí)將MongoDB用于業(yè)務(wù)應(yīng)用程序赊抖?
使用基于云的服務(wù)
在不穩(wěn)定的情況下氛雪,希望減少架構(gòu)遷移的成本
沒(méi)有任何數(shù)據(jù)庫(kù)管理員
需要內(nèi)置的分片解決方案
何時(shí)將MySQL用于業(yè)務(wù)應(yīng)用程序?
預(yù)算有限
具有固定的架構(gòu)
優(yōu)先考慮數(shù)據(jù)安全
需要高事務(wù)率