成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MongoDB與MySQL,該如何從中選用數據庫?

譯文
數據庫 MongoDB
本文將和您從數據模式與能力、性能與速度、安全性、以及查詢語言等方面,討論MongoDB和MySQL的各自優缺點,以方便您在實踐應用中做出明智的選擇。

[[392941]]

【51CTO.com快譯】不可否認,MongoDB和MySQL都是性能極其卓越的數據庫。但是,它們在不同領域卻各有所長。本文將和您一起討論兩者的各自特征、區別、以及在不同環境下的各種優缺點,以方便您在實踐應用中做出明智的選擇。

什么是MySQL?

自1995年被投入市場以來,MySQL以其易用性和可靠性,在業界享有不菲的聲譽。開源的MySQL屬于關系型數據庫管理系統(RDBMS)。更具體地說,RDBMS是用于更新、管理和規劃關系型數據庫的實用程序。以數據表為基礎的關系型數據庫,允許在同一數據庫中存放彼此相關、卻又屬于不同種類的數據。由于數據庫架構是根據某些特定條件和規則預先定義的,因此數據通常是按照行和列組織起來,以反應表的不同字段之間的關系。除了MySQL,我們常見的PostgreSQL和SQL也屬于RDBMS,它們都擁有各自對于結構化查詢語言(SQL)的變體語言。

什么是MongoDB?

雖然MongoDB也是開源的,但是與MySQL不同,它是一種文檔數據存儲庫。也就是說,它會將文檔存儲在集合之中,而不是存儲有相互關系的數據表里。

在使用MongoDB時,數據模式(data schema)并不固定。用戶可以通過刪除或修改集合中的文檔屬性,以實現高度靈活性??v然是屬于同一個集合中的文檔,它們也會有著完全不同的結構。

總的說來,MySQL和MongoDB的共同點是:它們都開源且易于訪問。而且,兩者都提供具有附加功能的商業版本。兩者的不同之處在于:MySQL是關系型,而MongoDB是非關系型。

MongoDB與MySQL之間的差異

下面,我們將從數據模式與能力、性能與速度、安全性、以及查詢語言等方面,來討論關系型的MySQL與文檔數據存儲類的MongoDB到底有何差異。

數據模式和能力

與JSON文檔類似,MongoDB中的數據是以鍵值對(key-value pairs)的形式顯示的。因此,在模式設計上,數據庫受到的約束更少。而這對于具有快速增長或其他變化需求的數據來說,是非常有利的。如下圖所示,MongoDB提供了預定義的結構,用戶可以按需采用其結構。

資料來源:MongoDB

雖然MySQL可以其數據模式,但不如文檔數據庫那樣靈活且動態。在存儲任何數據之前,MySQL都會強制要求預先確定好數據表的列。而且在更改數據模式之前,用戶需要仔細考慮數據庫的數據定義語言(DDL)和數據建模語言(DML)。

雖然關系型數據庫和文檔數據庫都使用到了DDL和DML的概念,但是在關系型數據庫中,建立DDL和DML是至關重要的。相反,由于MongoDB具有可擴展的數據模式,因此它不像MySQL那樣關注數據的結構。當然,這種“不靈活性”反而是MySQL的最大優勢之一,畢竟它能夠保持數據在結構上的整潔與一致。 

資料來源:https://dev.mysql.com/

每個MongoDB數據庫都包含了以“順次存放”的方式填充的文檔集合。由于這些文檔本身包含了各種字段和信息類型,因此它能夠存儲的內容和數據大小是極其豐富的。然而在MySQL中,由于數據模式受到了極大的約束,因此數據表中的每一行都需要包含相同的特征列,而這會使得管理大量數據庫變得相當麻煩。可見,MySQL不能夠像MongoDB那樣可以輕松地處理大型且復雜的數據庫。換句話說,在處理大量且復雜的數據集時,文檔數據庫MongoDB會比關系型數據庫MySQL更具有優勢。

性能和速度

通常,MongoDB能夠比MySQL更快地接受更多數量的結構化、以及非結構化的數據。不過,如果某企業日常處理的數據體量和變化頻率都不大的話,那么速度就不一定是其需要關注的方面。也就是說,諸如業務或項目數據的一致性、可靠性需求,都會優先于速度被考慮到。

MySQL則是確保數據隱私和完整性的成熟方案。在其顯式架構中,MySQL通過數據表的形式對數據類型進行系統化,進而創建可靠的數據庫結構,且便于用戶對表里的數據進行便捷地查詢與搜索。不過,MySQL顯然不是非結構化數據的絕佳選擇。在使用MySQL時,用戶需要事先準備好數據結構。這會最小化后期產生的技術債務,因此這便是MySQL的最大的優勢。不過該架構也就限制了它對于復雜數據的靈活處置能力。

相反,由于MongoDB能夠為非結構化數據提供靈活、快速的性能,當用戶難以預先設計好數據模式時,文檔數據存儲將是一個很好的選擇。當然,如果數據種類過于豐富,用戶很難在數據屬性上創建出對應的索引,那么他們就需要頻繁地優化數據模式。而此舉則可能產生數據的不一致性。

安全性

MySQL采用的是基于特權的安全模型。該模型既能夠提供基本的身份驗證,又可以在特定的數據庫上實施用戶特權的管控。在數據庫與服務器之間傳輸數據的過程中,MySQL必須采用安全套接字層(SSL,一種安全協議)的方式,來加密連接。

而MongoDB的安全性主要包括:基于角色的訪問控制、身份驗證、授權和審核等。當然,如果需要加密,它也可以實施安全傳輸層(TLS)和SSL協議。

因此就安全性而言,常用業務應用更趨向于使用成熟的MySQL來實現。

ACID:原子性、一致性、隔離性和持續性

眾所周知,ACID是確保數據有效性的一組數據庫事務屬性。MySQL的事務一直都能符合ACID。而追求速度和高可用性的MongoDB,在ACID方面并不占優。直到2018年,MongoDB才在多文檔事務中滿足ACID。不過,該選項在默認情況下是關閉的。

查詢

當需要從數據庫表或表的組合中請求信息時,MySQL會使用最流行、最廣泛的查詢語言—SQL,通過DDL和DML與數據庫進行通信。

而MongoDB使用的是非結構化的查詢語言。為了能夠從JSON文檔數據庫處請求并獲取數據或信息,用戶需要事先指定與結果應匹配的文檔屬性。換句話說,在對MongoDB數據庫執行查詢操作之前,用戶需要用到db.collection.find()。MongoDB支持諸如:Python、Java、C#、Perl、PHP、Ruby和JavaScript等可用于構建查詢的語言。通過諸如:$and、$or、$type、以及$eq等查詢操作符,用戶可以在復合查詢中,為文檔集合中的各個字段建立特定的查詢條件,并啟用查詢過濾器來過濾文件。如下圖所示,在定義了條件之后,它會標識出符合選擇條件的信息或記錄,并對其進行更新、讀取或刪除。

資料來源:https://docs.mongodb.com/guides/

在使用MySQL時,用戶可以通過JOIN操作(如,內部、外部、左側、右側和交叉),從兩個或多個數據庫表中檢索數據。也就是說,僅單個SQL語句便可獲取多個表中的關聯數據。而MongoDB并不會執行JOIN及其等效操作。

該如何選擇MongoDB與MySQL

作為文檔數據庫,由于MongoDB并不限制用戶存儲數據的體量和類型,因此適合大數據的應用環境。這對基于云的服務將特別有利。而得益于MongoDB的水平可擴展能力,以及與云服務的敏捷性結合,它不但能夠減少開發者的工作量,簡化業務與項目的擴展流程,還能夠提供高可用性和數據的快速恢復。

不過,MongoDB在數據的可靠性、一致性、以及安全性等方面,不如MySQL。此外,當應用程序需要提供多行事務(如,會計和銀行系統)時,以MySQL為首的關系型數據庫提供了高事務處理率(high transaction rate)。實際上,與MySQL專注于提供事務的ACID和安全性不同的是,MongoDB更專注于提供高插入率(high insert rate)。

因此,我強烈建議您將MySQL用于具有固定數據模式、且不打算在數據的多樣性方面進行擴展的企業或項目。畢竟,在確保數據完整性和可靠性的同時,MySQL不但方便被維護,而且成本較低。

相反,MongoDB是那些正在成長、但數據架構并不固定的業務或項目的最合適選擇。由于它允許開發者在無需任何結構的情況下,自由地更新、檢索和存儲文檔,因此它通常適用于需要內容管理,物聯網(IoT)處理,以及實時分析等項目中。

小結

綜上所述,MySQL是一個開源的關系型數據庫。其數據的組織形式為數據表,開發者可以將目標數據與數據庫的其他部分相關聯。MongoDB則是開源的文檔數據庫。它既不關聯任何數據記錄,又無固定的數據模式。同時,它提供高插入能力、動態性、以及靈活的數據庫。

如前所述,由于MongoDB比MySQL更能夠處理大量的數據,因此更適合那些基于云端的服務、頻繁增長和變更的應用、以及大數據的環境。相反,MySQL以其固定且結構化的數據模式,以及符合ACID的事務特征,為數據提供了更高的一致性、可靠性和安全性。總之,MongoDB和MySQL都很優秀,具體如何選擇,完全取決于您的具體應用需求和系統特征。

原文標題:MongoDB Vs. MySQL: When to Use?,作者: Mariana Berga

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

責任編輯:華軒 來源: 51CTO
相關推薦

2023-11-03 09:05:53

2011-08-23 17:45:54

MySQL丟失root密碼

2013-03-20 11:25:47

數據庫數據庫設計

2013-03-20 11:33:31

2013-03-20 13:25:53

數據庫數據庫設計

2013-03-20 13:35:12

數據庫數據庫設計

2010-06-09 10:09:39

MySQL 數據庫導入

2021-10-03 15:00:44

數據庫mysql單機

2012-04-28 10:07:43

數據庫數據庫設計

2013-03-20 13:16:15

2017-11-23 15:06:14

前端數據庫開發

2011-07-26 13:55:01

MongoDB備份與恢復

2011-07-28 17:02:59

MYSQL數據庫跨表更新數據并合

2011-03-01 14:04:30

2011-08-23 15:16:54

OracleMySQL

2010-06-13 10:18:08

MySQL 數據庫函數

2010-06-01 12:51:23

MySQL數據庫

2019-10-15 14:53:23

MongoDBMySQL數據庫

2009-02-02 13:16:23

修復數據表MySQL

2011-05-18 13:16:21

MySQL數據庫鎖定
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久草网站| 日韩免费视频 | 精精国产xxxx视频在线播放7 | 在线观看中文字幕亚洲 | 国产乱码一二三区精品 | 日韩一区二区福利视频 | 中文字幕一区二区三区不卡 | 岛国av一区二区三区 | 国产激情一区二区三区 | 国产精品免费一区二区三区四区 | 精品网站999www| 亚洲精品小视频在线观看 | 欧美一区二区三区 | 亚洲一区二区免费视频 | 亚洲电影一区 | 成人小视频在线观看 | 黄免费在线 | 天堂一区在线 | 91精品一区 | 在线观看免费观看在线91 | 国产精品一区二区欧美黑人喷潮水 | 亚洲导航深夜福利涩涩屋 | 第四色狠狠 | 五月天天丁香婷婷在线中 | 久久天堂| 亚洲日韩中文字幕一区 | 日韩中文一区二区三区 | 精品久久久久久久久久久 | 成人影院在线 | 精品日韩在线 | 精品在线播放 | 亚洲视频在线看 | 国产精品永久久久久久久www | 中文字幕日韩欧美一区二区三区 | 一区二区视频在线观看 | 亚洲狠狠 | 久久久久久久久久一区 | 成人日韩 | 成人性生交大片免费看中文带字幕 | 国产视频久久久 | 亚洲精品日韩在线 |