學習MySQL先有全局觀,細說其發展歷程及特點
- 一、枝繁葉茂的MySQL家族
- 1. 發展歷程
- 2. 分支版本
- 二、特點分析
- 1. 常用數據庫
- 2. 選型角度及場景
- 三、三大組成部分
- 四、總結
相信很多同學在接觸編程之初,就接觸過數據庫,而對于其中關系型數據庫中的翹楚——mysql,自然也是天天打交道的。恰逢今天是博主的創作紀念日,那么不如我們就開啟一個系列篇章,來從各個維度講解mysql,力求又有廣度又有深度,今天就讓我們開啟第一課,說說mysql的發展歷程及特點
📕作者簡介:戰斧,從事金融IT行業,有著多年一線開發、架構經驗;愛好廣泛,樂于分享,致力于創作更多高質量內容
📗本文收錄于 mysql 專欄,有需要者,可直接訂閱專欄實時獲取更新
📘高質量專欄 云原生、RabbitMQ、Spring全家桶 等仍在更新,歡迎指導
📙Zookeeper Redis dubbo docker netty等諸多框架,以及架構與分布式專題即將上線,敬請期待
一、枝繁葉茂的MySQL家族
1. 發展歷程
MySQL
數據庫的起源可以追溯到1995年,由Michael Widenius和David 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 還有一些其他版本,最常見的有MariaDB
和Percona
MariaDB
:
MariaDB是MySQL創始人之一Michael Widenius創建的MySQL分支,因為他擔心MySQL被Oracle收購后,將會對MySQL的開源性質和社區發展產生不利影響,于是在2010年創建了MariaDB分支,MariaDB的目的是提供一個自由、開源、高性能、可擴展性好、與MySQL兼容的數據庫系統,同時包括新的、改進的特性和性能優化。
Percona
Percona是由Percona公司創立的一個MySQL分支,旨在為企業客戶提供高性能、高可用性、高可擴展性的MySQL數據庫解決方案。Percona的主要特點是提供了一些MySQL不支持的高級功能,例如高性能查詢日志、InnoDB存儲引擎的改進等等。我們來看下這些版本之間的不同:
特點/功能 | MySQL | Percona | MariaDB |
---|---|---|---|
兼容性 | 兼容各大流行操作系統和開發環境 | 兼容性良好,可與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,目前還有很多其他的關系型數據庫,比如Oracle
,SQL Server
、PostgreSQL
,我這里借用一張今年的使用分布排名(排名僅供參考):
可以看到,榜單前四名正是我們提到的這幾位,可以說這幾個數據庫已經占據了大半的市場。
2. 選型角度及場景
對于一般的使用者,尤其是在項目初期,無法確定后續需求的情況下,去做數據庫選型其實是非常困難的。但我們需要遵循幾個大的方向。也就是預估負載量與性能
、評估擴展難易度
、可靠性與可用性
、數據庫安全性
等,我們可以對數據庫進行一個簡單的點評。
數據庫 | 優勢 | 劣勢 |
---|---|---|
MySQL | - 開源免費,易于安裝和學習 - 經過市場驗證,性能穩定 - 支持多種編程語言 - 缺乏一些高級功能(如分布式事務和崩潰恢復) | - 功能和一些企業級產品相比較少 |
Oracle | - 企業級數據庫產品,完整的功能集合 - 可靠性高,數據安全性好 - 通過引入云技術,能夠可伸縮性和容錯性 | - 學習曲線陡峭 - 價格昂貴 |
SQL Server | - 微軟開發的數據庫產品,與Windows系統無縫集成 - 用戶友好型高,易于使用 - 良好的可伸縮性和可擴展性 - 各種功能豐富 | - 價格昂貴 |
PostgreSQL | - 開源免費,易于安裝和學習 - 支持多種操作系統 - 對多種數據類型的支持比較完善 - 具有高度的可擴展性 | - 較為復雜,不夠直觀 - 性能和速度相對較慢 |
因為本期的主題是 MySQL, 那在什么場景下,選擇Mysql會比較合適呢?其實基于Mysql的設計與定位,其適合讀寫比較平衡,數據量不太大,需要快速部署和開發、對成本敏感的場景,也正是因為如此,Mysql在中小型的Web應用中被廣泛應用
三、三大組成部分
MySQL數據庫總體分為三個部分:Server層、存儲引擎和插件。
Server層
:負責處理客戶端連接、查詢解析和優化、數據訪問控制、事務處理、日志、replication和其他管理操作。
存儲引擎
:負責數據的存儲和檢索等操作。MySQL支持多個存儲引擎,如InnoDB、MyISAM、MEMORY等。
物理磁盤層
:真正存儲數據的位置,保存著數據庫數據以及各類日志。
如果我們有一個java程序,我們從mysql數據庫查詢數據時,其步驟主要可概括為以下幾步
- Java 程序通過數據庫連接層與 MySQL 數據庫建立連接;
- MySQL 數據庫服務層接收到連接請求后,驗證連接權限并解析,并將請求轉發給相應的存儲引擎層;
- 存儲引擎層接收到查詢請求后,進行 SQL 語句的執行;
- 如果查詢涉及到表的查詢,存儲引擎層將會向物理磁盤層發送讀取磁盤數據的請求;
- 物理磁盤層通過磁盤控制器等硬件設備讀取數據,并將數據傳遞給存儲引擎層;
- 存儲引擎層將結果集返回給 MySQL 服務層;
- MySQL 服務層將結果集返回給 Java 程序。
當然,其具體的動作會更加復雜,我們借用一張圖來供大家參考:
四、總結
經過前面一些基礎的介紹,我們不難看出MySQL是一款功能全面、性能卓越、穩定可靠、易于管理的數據庫系統。應該說每個數據庫都有自己的優勢與劣勢,而MySQL憑借的開源免費和平衡的性能,得到了廣泛的應用和認可。今天作為第一課,只是為了幫助大家有一點全局觀念,更深的使用技術,及原理,我們將馬上對其進行深入剖析