學習MySQL先有全局觀,細說其發展歷程及特點

在這里插入圖片描述

相信很多同學在接觸編程之初,就接觸過數據庫,而對于其中關系型數據庫中的翹楚——mysql,自然也是天天打交道的。恰逢今天是博主的創作紀念日,那么不如我們就開啟一個系列篇章,來從各個維度講解mysql,力求又有廣度又有深度,今天就讓我們開啟第一課,說說mysql的發展歷程及特點

📕作者簡介:戰斧,從事金融IT行業,有著多年一線開發、架構經驗;愛好廣泛,樂于分享,致力于創作更多高質量內容
📗本文收錄于 mysql 專欄,有需要者,可直接訂閱專欄實時獲取更新
📘高質量專欄 云原生、RabbitMQ、Spring全家桶 等仍在更新,歡迎指導
📙Zookeeper Redis dubbo docker netty等諸多框架,以及架構與分布式專題即將上線,敬請期待


一、枝繁葉茂的MySQL家族

1. 發展歷程

MySQL數據庫的起源可以追溯到1995年,由Michael WideniusDavid Axmark共同開發,原屬于瑞典的MySQL AB公司,該公司于2008年被升陽微系統(Sun )收購。2009年,甲骨文公司(Oracle)收購升陽微系統公司,至此,MySQL成為Oracle旗下產品。Oracle 公司區分了企業版社區版

企業版是MySQL的商業版本,由Oracle公司提供支持和服務,包括高級功能、技術支持和安全性保證等。
社區版是MySQL的開源版本,由MySQL社區開發和維護,是免費的,但不包括商業版所擁有的高級功能和技術支持
企業版社區版的區別主要在于其支持和服務的層面,大多數功能在兩個版本中都是相同的。

而經過多年發展,MySQL的版本也在不停迭代,目前最新版本為Version 8.0。我們可以記錄一下其中一些比較重要的版本,以及該版本的特性:

  • MySQL 4.0
    MySQL 4.0發布于2003年,是MySQL的一次重大更新。該版本增加了許多新特性,包括:
    1 存儲過程和觸發器,可以在MySQL中執行復雜的邏輯處理;
    2 支持Unicode,可以存儲和處理多種語言的文本數據;
    3 引入InnoDB存儲引擎,支持事務和行級鎖。

  • MySQL 5.0
    MySQL 5.0發布于2005年,是MySQL的一個里程碑版本。該版本增加了許多新特性,包括:
    引入視圖,可以對多個表進行簡化查詢;
    字符集支持,現在可以支持更多的字符集;
    支持存儲過程、函數和觸發器的DDL語句(CREATE、ALTER、DROP等)-

  • MySQL 5.5
    MySQL 5.5發布于2010年,是MySQL的一個重要版本。該版本增加了許多新特性,包括:
    支持半同步復制,提高了復制的可靠性和性能;
    支持全文搜索,可以進行更高級的文本搜索;
    支持多線程,可以提高并發性能。

  • MySQL 5.6
    MySQL 5.6發布于2013年,是MySQL的一個重要版本。該版本增加了許多新特性,包括:
    支持NoSQL功能,可以使用Memcached API操作MySQL數據庫;
    支持多主復制,提高了可擴展性和可用性;
    支持更多的索引和鎖機制,提高了查詢效率。

  • MySQL 8.0
    MySQL 8.0是目前最新的MySQL版本,于2018年發布。該版本增加了許多新特性,包括:
    改進了JSON支持,可以更輕松地存儲和查詢JSON數據;
    支持Window函數,可以進行更復雜的查詢;
    改進了性能和安全性,包括更快的查詢和更嚴格的密碼規則。

2. 分支版本

我們上面所介紹的都是官方版本,現在是由Oracle公司維護。但其實MySQL 還有一些其他版本,最常見的有MariaDBPercona

MariaDB
在這里插入圖片描述

MariaDB是MySQL創始人之一Michael Widenius創建的MySQL分支,因為他擔心MySQL被Oracle收購后,將會對MySQL的開源性質和社區發展產生不利影響,于是在2010年創建了MariaDB分支,MariaDB的目的是提供一個自由、開源、高性能、可擴展性好、與MySQL兼容的數據庫系統,同時包括新的、改進的特性和性能優化

Percona
在這里插入圖片描述

Percona是由Percona公司創立的一個MySQL分支,旨在為企業客戶提供高性能、高可用性、高可擴展性的MySQL數據庫解決方案。Percona的主要特點是提供了一些MySQL不支持的高級功能,例如高性能查詢日志、InnoDB存儲引擎的改進等等。我們來看下這些版本之間的不同:

特點/功能MySQLPerconaMariaDB
兼容性兼容各大流行操作系統和開發環境兼容性良好,可與MySQL插件兼容兼容性良好,可與MySQL插件兼容,同時支持更多的存儲引擎
性能相對較快性能優化,可比MySQL快性能不如Percona,但可靠性更高
安全性安全性高,可通過訪問控制和SSL保護數據傳輸安全性較高,可通過訪問控制和SSL保護數據傳輸安全性高,支持多種訪問控制和SSL保護數據傳輸
可擴展性支持垂直和水平擴展支持垂直和水平擴展,提供多種擴展方案支持垂直和水平擴展,提供多種擴展方案
存儲引擎支持多種存儲引擎支持多種存儲引擎,包括InnoDB和XtraDB支持更多的存儲引擎,包括MariaDB、XtraDB、TokuDB
復制支持單向復制和雙向復制支持異步和半同步復制支持同步和異步復制
高可用性支持主從復制,可通過故障轉移實現高可用性支持異步和半同步復制,可通過故障轉移實現高可用性支持同步和異步復制,可通過Galera集群實現高可用性
開發者支持社區活躍,有大量開發者貢獻代碼社區活躍,有多個主要貢獻者社區活躍,有多個主要貢獻者
支持和維護由Oracle提供支持和維護由Percona提供支持和維護;可在Percona官網上下載免費社區版由MariaDB基金會提供支持和維護;可在MariaDB官網上下載免費社區版

在這里插入圖片描述

當然,面對這些版本,我們該如何選擇呢?如果對性能要求較高,可以選擇Percona版本;如果更看重穩定性和兼容性,可以選擇MySQL官方版本或MariaDB。如果是使用官方版本,建議使用5.7及以上的版本。

當然需要注意的是,雖然我們說上述分支版本都可以算Mysql的一個分支,但并不意味著完全兼容,尤其是越往后發展,各自差異難免越多,當我們想要做版本遷移的時候,一定要審慎

二、特點分析

1. 常用數據庫

MySQL數據庫除了我們所知道的開源免費外,其實從日常使用中,它還有如下特點:
(1)高性能:MySQL在處理大量數據上擁有較高的性能。MySQL支持查詢緩存、分區表、多線程、索引等優化技術,有助于提高性能。
(2)可移植性好:MySQL可以在各種操作系統上運行,如Windows、Linux、Unix等。
(3)可擴展:MySQL支持集群和分布式部署,可以通過水平和垂直擴展來提高性能和可靠性。

但是,我們也知道,除了MySQL,目前還有很多其他的關系型數據庫,比如OracleSQL ServerPostgreSQL,我這里借用一張今年的使用分布排名(排名僅供參考):

在這里插入圖片描述
可以看到,榜單前四名正是我們提到的這幾位,可以說這幾個數據庫已經占據了大半的市場。

2. 選型角度及場景

對于一般的使用者,尤其是在項目初期,無法確定后續需求的情況下,去做數據庫選型其實是非常困難的。但我們需要遵循幾個大的方向。也就是預估負載量與性能評估擴展難易度可靠性與可用性數據庫安全性等,我們可以對數據庫進行一個簡單的點評。

數據庫優勢劣勢
MySQL- 開源免費,易于安裝和學習
- 經過市場驗證,性能穩定
- 支持多種編程語言
- 缺乏一些高級功能(如分布式事務和崩潰恢復)
- 功能和一些企業級產品相比較少
Oracle- 企業級數據庫產品,完整的功能集合
- 可靠性高,數據安全性好
- 通過引入云技術,能夠可伸縮性和容錯性
- 學習曲線陡峭
- 價格昂貴
SQL Server- 微軟開發的數據庫產品,與Windows系統無縫集成
- 用戶友好型高,易于使用
- 良好的可伸縮性和可擴展性
- 各種功能豐富
- 價格昂貴
PostgreSQL- 開源免費,易于安裝和學習
- 支持多種操作系統
- 對多種數據類型的支持比較完善
- 具有高度的可擴展性
- 較為復雜,不夠直觀
- 性能和速度相對較慢

因為本期的主題是 MySQL, 那在什么場景下,選擇Mysql會比較合適呢?其實基于Mysql的設計與定位,其適合讀寫比較平衡,數據量不太大,需要快速部署和開發、對成本敏感的場景,也正是因為如此,Mysql在中小型的Web應用中被廣泛應用

三、三大組成部分

MySQL數據庫總體分為三個部分:Server層存儲引擎插件

Server層:負責處理客戶端連接、查詢解析和優化、數據訪問控制、事務處理、日志、replication和其他管理操作。
存儲引擎:負責數據的存儲和檢索等操作。MySQL支持多個存儲引擎,如InnoDB、MyISAM、MEMORY等。
物理磁盤層:真正存儲數據的位置,保存著數據庫數據以及各類日志。

如果我們有一個java程序,我們從mysql數據庫查詢數據時,其步驟主要可概括為以下幾步

  1. Java 程序通過數據庫連接層與 MySQL 數據庫建立連接;
  2. MySQL 數據庫服務層接收到連接請求后,驗證連接權限并解析,并將請求轉發給相應的存儲引擎層;
  3. 存儲引擎層接收到查詢請求后,進行 SQL 語句的執行;
  4. 如果查詢涉及到表的查詢,存儲引擎層將會向物理磁盤層發送讀取磁盤數據的請求;
  5. 物理磁盤層通過磁盤控制器等硬件設備讀取數據,并將數據傳遞給存儲引擎層;
  6. 存儲引擎層將結果集返回給 MySQL 服務層;
  7. MySQL 服務層將結果集返回給 Java 程序。

當然,其具體的動作會更加復雜,我們借用一張圖來供大家參考:

在這里插入圖片描述

四、總結

經過前面一些基礎的介紹,我們不難看出MySQL是一款功能全面、性能卓越、穩定可靠、易于管理的數據庫系統。應該說每個數據庫都有自己的優勢與劣勢,而MySQL憑借的開源免費和平衡的性能,得到了廣泛的應用和認可。今天作為第一課,只是為了幫助大家有一點全局觀念,更深的使用技術,及原理,我們將馬上對其進行深入剖析

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160084.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160084.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160084.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

這樣寫postman實現參數化,阿里p8都直呼牛逼

什么時候會用到參數化 比如:一個模塊要用多組不同數據進行測試 驗證業務的正確性 Login模塊:正確的用戶名,密碼 成功;錯誤的用戶名,正確的密碼 失敗 postman實現參數化 在實際的接口測試中,部分參數…

你的關聯申請已發起,請等待企業微信的管理員確認你的申請

微信支付對接時,需要申請AppID,具體在下面的位置: 關聯AppID,發起申請時,會提示這么一句話: 此時需要登錄企業微信網頁版,使用注冊人的企業微信掃碼登錄進去,然后按照下面的步驟操作即可。 點擊…

iEnglish全國ETP大賽:教育游戲助力英語習得

“seesaw,abacus,sword,feather,frog,lion,mouse……”11月18日,經過3局的激烈較量,“以過客之名隊”的胡玲、黃長翔、林家慷率先晉級“玩轉英語,用iEnglish”第三屆全國ETP大賽的16強,在過去的周末中,還有TIK徘徊者隊、不負昭華隊、溫柔殺戮者隊先后晉級。據悉,根據活動規則,在…

電腦內存升級

ddr代兼容 自從DDR內存時代開啟之后,只要滿足內存的插槽規格相同(DDR3或DDR4或DDR5即為內存規格)這一條件,不同品牌、不同頻率以及不同容量的茶品都可以一起使用,除了品牌和容量的影響之外,不同頻率的搭配可能會造成性能方面的影…

面試官:什么是三色標記

程序員的公眾號:源1024,獲取更多資料,無加密無套路! 最近整理了一波電子書籍資料,包含《Effective Java中文版 第2版》《深入JAVA虛擬機》,《重構改善既有代碼設計》,《MySQL高性能-第3版》&…

git提交時會將target也提交

有時候大家在提交git時發現會將編譯文件target也提交上去,這種情況有以下幾種情況 情況1:項目沒有設置.gitignore 情況2:設置了.gitignore但是依然會提交。 第一種:添加.gitignore,并在文件中添加需要忽略的東西。 …

redis分布式鎖的學習記錄

核心性質 獨占性:對于同一把鎖,同一時刻只能被一個加鎖方獨占 健壯性:不能產生死鎖。如果有一個因為宕機無法主動解鎖,鎖也應該被正常加載 對稱性:加成和解鎖的使用方必須為同一個身份,不允許被非方釋放 高…

HCIA-實驗命令基礎學習:

視頻學習: 第一部分:基礎學習。 19——子網掩碼。 27——防火墻配置: 32——企業級路由器配置: 基礎實驗完成:(完成以下目錄對應的實驗,第一部分基礎實驗就完成。) 方法&#xff…

C //習題 8.13 寫一個用矩形法求定積分的通用函數,分別求

C程序設計 (第四版) 譚浩強 習題8.13 習題 8.13 寫一個用矩形法求定積分的通用函數,分別求 ∫ 0 1 s i n x d x , ∫ 0 1 c o s x d x , ∫ 0 1 e x d x \int_{0}^{1}sinx\ dx,\ \ \int_{0}^{1}cosx\ …

ILI9225 TFT顯示屏16位并口方式驅動

所用屏及資料如后圖: ILI9225,176*220,8位或16位并口屏,IM0接GND,電源及背光接3.3v 主控:CH32V307驅動(庫文件和STM32基本一樣) 一、源碼 ILI9225.c #include "ILI9225.h&quo…

設計模式(二)-創建者模式(4)-原型模式

一、為何需要原型模式(Prototype Pattern)? 在軟件設計中,我們會遇到到這樣的情況:對原對象進行拷貝一個新的副本。想要實現這樣的邏輯,有一種笨方法就是對原對象里的所有變量進行逐一賦值。但是這樣的做法會導致代碼…

【SpringCloud】認識微服務、服務拆分以及遠程調用

SpringCloud 1.認識微服務 1.1單體架構 單體架構:將業務的所有功能集中在一個項目中開發,打成一個包部署 單體架構的優缺點: **優點:**架構簡單,部署成本低 **缺點:**耦合度高(維護困難&…

【C++】郭老二博文之:C++目錄

1、POCO 【POCO】POCO學習總結(一)–下載與編譯 【POCO】POCO學習總結(二)——配置選擇 【POCO】POCO學習總結(三)——交叉編譯 2、C11 2.1 STL算法 【C】C11 STL算法(一):非修改序列操作&a…

筆記59:序列到序列學習Seq2seq

本地筆記地址:D:\work_file\(4)DeepLearning_Learning\03_個人筆記\3.循環神經網絡\第9章:動手學深度學習~現代循環神經網絡 a a a a a a a a a a a a a a a

C++ Day04 this指針,友元函數,重載

this指針 概念 誰調用 this 所在的函數 ,this 就存儲誰的地址 特點 1, 在當前類的非靜態成員函數中調用本類非靜態成員時 , 默認有 this 關鍵字 2, 靜態成員函數 , 沒有 this 指針。 示例 #include <iostream> #include <cstring> using namespace std; class S…

前后端分離項目跨域請求的問題與解決辦法

目錄 一、為什么會存在跨域請求&#xff1f; 二、跨域請求的流程&#xff1f; 三、什么情況下會觸發CROS機制&#xff1f; 四、如何解決跨域請求導致的問題&#xff1f; 一、為什么會存在跨域請求&#xff1f; 跨域請求是因為瀏覽器的同源策略引起的。同源策略是瀏覽器的一種…

算法刷題-動態規劃2

算法刷題-動態規劃2 珠寶的最高價值下降路徑最小和 珠寶的最高價值 題目 大佬思路 多開一行使得代碼更加的簡潔 移動到右側和下側 dp[ i ][ j ]有兩種情況&#xff1a; 第一種是從上面來的禮物最大價值&#xff1a;dp[ i ][ j ] dp[ i - 1 ][ j ] g[ i ][ j ] 第二種是從左…

10.10-11 科研記錄 一些多模態工作的相關思考

論文出發點很簡單&#xff0c;第一&#xff0c;就是想要去除文本的冗余數據&#xff0c;有多篇文章也提到了&#xff0c;冗余文本影響對下游任務的性能&#xff0c;大量無關的文本輸入到大模型也會影響大模型的性能&#xff0c;本質也很好理解&#xff0c;就是盡可能去除與任務…

握住音樂的法寶 - 簡譜

簡譜是音樂學習中至關重要的記譜法。除了簡譜&#xff0c;還有吉他和鋼琴的五線譜&#xff0c;以及我最喜歡的古琴減字譜等其他記譜方式。如果你對音樂感興趣&#xff0c;一起學習吧&#xff0c;我不允許你是一個文盲。 一、調拍號 “1C 4/4”即為調拍號&#xff0c;調拍號分…