何時使用MongoDB而不是MySql

来源:https://www.cnblogs.com/waynaqua/archive/2023/08/09/17617598.html
-Advertisement-
Play Games

## 什麼是 MySQL 和 MongoDB MySQL 和 MongoDB 是兩個可用於存儲和管理數據的資料庫管理系統。MySQL 是一個關係資料庫系統,以結構化表格格式存儲數據。相比之下,MongoDB 以更靈活的格式將數據存儲為 JSON 文檔。兩者都提供性能和可擴展性,但它們為不同的應用場景 ...


什麼是 MySQL 和 MongoDB

MySQL 和 MongoDB 是兩個可用於存儲和管理數據的資料庫管理系統。MySQL 是一個關係資料庫系統,以結構化表格格式存儲數據。相比之下,MongoDB 以更靈活的格式將數據存儲為 JSON 文檔。兩者都提供性能和可擴展性,但它們為不同的應用場景提供了更好的性能。

MySQL 是一種關係型資料庫管理系統,它使用結構化查詢語言(SQL)來操作數據。SQL 是一種通用的、標準化的、聲明式的語言,它可以定義數據的結構、約束、操作、查詢等。MySQL 使用表(table)來存儲數據,表由行(row)和列(column)組成,每一行代表一條記錄,每一列代表一個屬性。表之間可以通過主鍵(primary key)和外鍵(foreign key)來建立關聯,實現數據的完整性和一致性。

MongoDB 是一種非關係型資料庫管理系統,它使用文檔(document)來存儲數據。文檔是一種類似於 JSON 的格式,它由鍵值對(key-value pair)組成,每一個鍵值對代表一個屬性。文檔之間沒有固定的結構,可以根據需要靈活地添加或刪除屬性。文檔存儲在集合(collection)中,集合類似於表,但沒有預定義的模式(schema)。集合之間可以通過引用(reference)或嵌入(embedding)來建立關聯,實現數據的靈活性和效率。

推薦博主開源的 H5 商城項目waynboot-mall,這是一套全部開源的微商城項目,包含三個項目:運營後臺、H5 商城前臺和服務端介面。實現了商城所需的首頁展示、商品分類、商品詳情、商品 sku、分詞搜索、購物車、結算下單、支付寶/微信支付、收單評論以及完善的後臺管理等一系列功能。 技術上基於最新得 Springboot3.0、jdk17,整合了 MySql、Redis、RabbitMQ、ElasticSearch 等常用中間件。分模塊設計、簡潔易維護,歡迎大家點個 star、關註博主。

github 地址:https://github.com/wayn111/waynboot-mall

相似之處

MySQL 和 MongoDB 都是資料庫管理系統。它們存儲數據並具有內置的用戶界面和查詢語言,因此我們都可以進行添加、編輯、修改和分析數據等操作。

開源許可證

MySQL 和早期版本的 MongoDB 都有開源許可證,可以免費下載開源版本。我們可以根據需要對代碼執行的操作來對其進行修改。

MySQL 使用 GPL 協議,使得任何人均可以免費使用 MySQL 並且可以對其進行代碼修改。而 MonogoDB 在 2018 年 10 月 16 日更改 License 為 SSPL 協議,這對於開源社區沒啥影響,但是對於雲廠商而言 MongoDB 公司會明確要求托管 MongoDB 實例的雲廠商要麼從 MongoDB 公司獲取商業許可證,要麼向社區開源其服務代碼。

索引支持

MySQL 和 MongoDB 使用索引來提高查詢速度和性能。索引是加快數據查詢的一種資料庫結構,有助於非常快速地查找和檢索數據。

MySQL 和 MongoDB 資料庫平臺都使用哈希索引、B- 樹(MySql實際使用的是B+ 樹)索引和其他幾種索引。

用戶界面

MongoDB 和 MySQL 都易於使用。它們提供基於自然語言的查詢語言來更新和讀取數據,還提供圖形用戶界面(GUI),以便更直觀地管理和分析數據。

編程語言

MySQL 和 MongoDB 與各種相同的編程語言相容。MongoDB 和 MySQL 都可以與 Java、Python、Node.js、PHP、Ruby 以及 C# 結合使用。

安全性

MySQL 和 MongoDB 都使用身份驗證、訪問控制和加密手段來確保其資料庫的安全。它們使用 TLS/SSL 加密來保護傳輸中數據和靜態數據,還允許定義不同的用戶訪問級別。

文檔和社區支持

MySQL 和 MongoDB 在各自的網站上都有詳細的官方文檔。兩者的教程、手冊和指南包含安裝、配置和運行操作任務的完整說明。

MongoDB 和 MySQL 都有一個活躍的開發人員社區,可以回答問題並幫助進行故障排除。它們還提供企業版,針對特定要求提供專屬支持。

主要區別

MySQL 是一個關係資料庫管理系統,MongoDB 則是一個 NoSQL 資料庫系統。MySQL 使用 SQL,大多數開發人員都有這方面的經驗。相反 MongoDB 使用 MongoDB 查詢語言(MQL)。儘管 MQL 和 SQL 有相似之處,但 MQL 通常需要額外花費精力進行學習。 接下來,博主將介紹一些主要差異。

數據模型

MySQL 是一個關係資料庫系統,它將數據存儲在列、行和表中。我們將數據存儲在行中,每列代表不同類型的數據。然後我們就可以使用外鍵和主鍵定義數據之間的關係。每個表都有一個用於標識它的主鍵,外鍵用於創建關係。

MongoDB 是一個面向文檔的資料庫,將其所有數據存儲為二進位 JSON(BSON)文檔。BSON 允許序列化多種形式的數據。使用 BSON 文檔可以存儲非結構化、半結構化和結構化數據。MongoDB 沒有使用資料庫架構,而是採用了一種靈活的方法,將文檔存儲在集合中。

可擴展性

在 MySQL 資料庫系統中,可用的擴展選項是有限的。有以下方案可供選擇:

  • 通過向當前資料庫伺服器添加更多資源來實現縱向可擴展性
  • 通過在其他伺服器上創建資料庫的只讀副本來讀取複製

創建制度副本有限制,最多只能有五個副本。副本還可能滯後於主副本,會造成一致性問題。縱向可擴展性也受限於單機性能瓶頸。

相比之下,MongoDB 在可擴展性方面具有顯著的優勢。它具有兩個用於擴展的關鍵功能:

  • 副本集 — 包含相同數據的 MongoDB 伺服器備份
  • 分片 — 將數據分佈在不同的伺服器上

MongoDB 允許創建分片集群,因此我們的部分數據將在多個伺服器上複製。例如如果我們有大量的客戶記錄,則可以對其進行分發,以便將 A-J 的姓名和 K-Z 的姓名保存在各自的副本集中。因此 MongoDB 可以橫向擴展,以大規模優化讀寫性能。

性能

MySQL 設計為可在建立適當索引的多個表之間實現高性能連接。但是它需要逐行插入數據,因此寫入性能較慢。

MongoDB 文檔遵循分層數據模型,將大部分數據保存在單個文檔中,從而減少了跨多個文檔進行聯接的需要。通過 $lookup 操作支持聯接,但並未針對性能對其進行優化。但是 MongoDB 提供了 insertMany() API,用於快速插入數據,可優先考慮寫入性能。

靈活性

作為關係資料庫管理系統,MySQL 的結構比 MongoDB 更嚴格。MySQL 使用固定架構,將數據整理成行和表。必須將數據結構化並放入表格系統中才能使用 MySQL。

通過將數據存儲為 JSON 文檔,MongoDB 允許構建具有許多不同數據類型的複雜應用程式。例如可以通過更新嵌套數組欄位來創建新欄位。還可以使用聚合管道(這是一個 MongoDB 功能),允許通過將多個操作合併為一個工作流程來轉換數據。

訪問控制

在 MongoDB 中,可以控制操作、集合或資料庫級別的訪問許可權。它使用 Kerberos、X.509 和 LDAP 證書對用戶進行身份驗證。相比之下,MySQL 允許在用戶、資料庫和表級別上限制用戶訪問許可權。MySQL 使用自己的身份驗證系統。它會在 SQL 註入攻擊中帶來另一個安全漏洞,MongoDB 的無架構方法則可以避免這個漏洞。

差異表格

MongoDB MySql
數據模型 MongoDB 將數據存儲在 JSON 文檔中,然後將其整理成集合。 MySQL 將數據存儲在列和行中。數據存儲是表格式和關係式的。
可擴展性 MongoDB 使用複製和分片進行水平擴展。 MySQL 使用縱向擴展和只讀副本來大規模提高性能。
查詢語言 MongoDB 使用 MongoDB 查詢語言。 MySQL 使用 SQL。
性能 MongoDB 擅長插入或更新大量記錄。 查詢大量記錄時,MySQL 的速度更快。
靈活性 MongoDB 沒有架構,因此具有更大的靈活性,並且能夠處理非結構化、半結構化和結構化數據。 MySQL 有嚴格的架構,可以很好地處理結構化數據。
安全性 MongoDB 使用 Kerberos、X.509 和 LDAP 證書對用戶進行身份驗證。 MySQL 使用內置的身份驗證方法。

優缺點

MySQL 和 MongoDB 各有優缺點,如下展示:

  • MySQL 的優點:

    • 成熟穩定:MySQL 是一個歷史悠久、廣泛使用、經過測試的資料庫系統,有著豐富的文檔和社區支持。
    • 易用強大:MySQL 提供了一個簡單易用、功能強大的 SQL 語言,可以實現複雜的查詢和操作。
    • 數據安全:MySQL 支持 ACID 事務,可以保證數據的完整性和一致性,避免數據丟失或錯誤。
  • MySQL 的缺點:

    • 靈活性低:MySQL 需要預先定義好數據的結構和類型,不適合存儲動態變化或非結構化的數據。
    • 擴展性差:MySQL 只支持垂直擴展,不適合處理海量或分散式的數據。
    • 性能瓶頸:MySQL 在處理大量的連接、併發、索引、關聯等操作時,可能會出現性能瓶頸或故障。
  • MongoDB 的優點:

    • 靈活性高:MongoDB 使用文檔模型,可以動態地調整數據的結構和類型,適合存儲動態變化或非結構化的數據。
    • 擴展性好:MongoDB 支持水平擴展,可以處理海量或分散式的數據,提高系統的可用性和容錯性。
    • 性能高效:MongoDB 在處理大量的讀寫、索引、嵌入等操作時,可以實現高效的性能和吞吐量。
  • MongoDB 的缺點:

    • 難用複雜:MongoDB 提供了一個難用複雜、功能有限的 MQL 語言,不能實現複雜的查詢和操作。
    • 數據不安全:MongoDB 不支持 ACID 事務,不能保證數據的完整性和一致性,可能導致數據丟失或錯誤。

應用場景

MySQL 和 MongoDB 適合不同的應用場景,以下是一些主要的例子:

MySQL 適合以下場景:

  • MySQL 中的數據存儲格式使其適用於數據倉庫和線上分析處理。它符合 ACID 標準,這使得 MySQL 適用於處理複雜事務,例如在電子商務、交易應用場景中。
  • 需要確保數據安全、一致性、可靠性等特性的場景,例如政府、金融等領域。

MongoDB 適合以下場景:

  • MongoDB 在社交網路、媒體或物聯網(IoT)等應用場景中處理非結構化數據時,該資料庫更為合適。
  • 需要進行大量的讀寫、索引、嵌入等操作的場景,並且需要數據可擴展可變化,例如內容管理、個性化推薦等領域。

關註公眾號【waynblog】每周分享技術乾貨、開源項目、實戰經驗、高效開發工具等,您的關註將是我的更新動力!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ## 前言: 阿裡雲簡訊服務是一項基於雲計算和大數據技術的企業級簡訊平臺服務。它能夠為企業和開發者提供高可用、高性能、高穩定性的簡訊發送服務,可以快速地將各類業務通知、驗證碼、營銷推廣等信息發送給用戶。在我們經常登錄一些系統或者APP時候,經常會遇到其他登錄登錄方式——簡訊驗證碼登錄。這也是我前一段 ...
  • 博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
  • 近日,恩智浦官方隆重上線了應用程式代碼中心(Application Code Hub,簡稱 ACH),這是恩智浦 MCUXpresso 軟體生態的一個重要組成部分。痞子衡之所以要如此激動地告訴大家這個好消息,是因為 ACH 並不是又一個恩智浦官方 github project site 那麼簡單而已 ...
  • ifconfig /all 獲取功能變數名稱、IP地址、DHCP伺服器、網關、MAC地址、主機名net time /domain 查看功能變數名稱、時間net view /domain 查看域內所有共用net view ip 查看對方區域網內開啟了哪些共用net config workstation 查看功能變數名稱、機器 ...
  • 一、前言 本篇介紹STM32晶元的存儲結構,ARM公司負責提供設計內核,而其他外設則為晶元商設計並使用,ARM收取其專利費用而不參與其他經濟活動,半導體晶元廠商拿到內核授權後,根據產品需求,添加各類組件,生產晶元售賣。圖1為STM32的組成示意圖,其中Cortex-M3內核、調試系統都是ARM公司設 ...
  • 提要:系列文章主要參考`MIT 6.828課程`以及兩本書籍`《深入理解Linux內核》` `《深入Linux內核架構》`對Linux內核內容進行總結。 記憶體管理的實現覆蓋了多個領域: 1. 記憶體中的物理記憶體頁的管理 2. 分配戴愛記憶體的伙伴系統 3. 分配較小記憶體的slab、slub、slob分配 ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202308/3076680-20230809001245329-1742920933.png) # 1. SQL 並不專門用於處理複雜的字元串 ## 1.1. 需要有逐字遍歷字元串的能力。但是,使用SQL 進 ...
  • 想要瞭解最新的金融科技進展嗎? 渴望與其他技術愛好者交流,並擴展您在金融科技行業中的人脈關係嗎? 那麼請參加我們即將舉行的 Meetup,本次活動由 Apache DolphinScheduler 社區和 OceanBase 技術社區共同舉辦,聚焦金融科技進展,線上&線下同步,歡迎關註並預約直播。在 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...