当前位置: 首页 > news >正文

学习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凭借的开源免费和平衡的性能,得到了广泛的应用和认可。今天作为第一课,只是为了帮助大家有一点全局观念,更深的使用技术,及原理,我们将马上对其进行深入剖析

相关文章:

学习MySQL先有全局观,细说其发展历程及特点

学习MySQL先有全局观,细说其发展历程及特点 一、枝繁叶茂的MySQL家族1. 发展历程2. 分支版本 二、特点分析1. 常用数据库2. 选型角度及场景 三、三大组成部分四、总结 相信很多同学在接触编程之初,就接触过数据库,而对于其中关系型数据库中的…...

Linux安装与配置Maven

案例中Linux版本为CentOS7.9,安装目录为 /root/software/ 1、使用 wget 命令从官网下载安装包(https://maven.apache.org/download.cgi) wget https://dlcdn.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz2、解压…...

Java面向对象第一天

什么是类?什么是对象? 现实生活是由很多很多对象组成的,基于对象抽出了类 对象:软件中真实存在的单个的个体/东西 类:类型/类别,代表一类个体 类是对象的模板/模子,对象是类的具体的实例 类中…...

什么是mvc原理是什么

MVC是一种设计模式,它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。 模型(Model)表示应用程序的数据结构,包括与数据相…...

json_to_mask

修改后的json_to_dataset文件,直接复制替换你自己原始的json_to_dataset,建议保存一下原版import argparse import base64 import json import os import os.path as ospimport imgviz import PIL.Imagefrom labelme.logger import logger from labelme …...

Camtasia2024免费版mac电脑录屏软件

作为一个互联网人,没少在录屏软件这个坑里摸爬滚打。培训、学习、游戏、影视解说……都得用它。这时候没个拿得出手的私藏软件,还怎么混?说实话,录屏软件这两年也用了不少,基本功能是有但总觉得缺点什么,直…...

拦截器的使用

拦截器(Interceptor)是一种在应用程序中用于干预、修改或拦截请求和响应的组件,是AOP 编程的一种实践,和过滤器一样都是一种具体的AOP实现。它可以在请求被发送到目标处理程序之前或之后,对请求进行预处理或对响应进行…...

R语言——taxize(第四部分)

taxize(第四部分) 3.39. get_wiki(获取维基分类群的页面名称)3.40. get_wormsid(获取分类群名称的Worms ID)3.41. gni_details(使用Global Names Index搜索分类学名称详情)3.42. gni…...

C++学习 --list

目录 1, 什么是list 2, 创建 2-1, 标准数据类型 2-2, 自定义数据类型 2-3, 其他创建方式 3, 操作list 3-1, 赋值 3-2, 添加元素 3-2-1, 添加元素(assign) 3-2-…...

Springboot集成swagger之knife4j

knife4j的最终效果&#xff1a; 支持直观的入参介绍、在线调试及离线各种API文档下载。 1 引入pom <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</ver…...

多线程 02

1.线程的常见构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用 Runnable 对象创建线程对象Thread(String name)创建线程对象&#xff0c;并命名Thread(Runnable target, String name)使用 Runnable 对象创建线程对象&#xff0c;并命名【了解】Thread(Threa…...

车辆管控大数据可视化平台案例源码分析【可视化项目案例-10】

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本专栏包括但不限于大屏可视化、图表可视化等等。订阅专栏用户在文章底部可下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不论你是初学者还是资深开发者,这里都有适合你的内容。…...

链表的回文结构

题目描述 题目链接&#xff1a;链表的回文结构_牛客题霸_牛客网 (nowcoder.com) 题目分析 我们的思路是&#xff1a; 找到中间结点逆置后半段比对 我们可以简单画个图来表示一下&#xff1a; ‘ 奇数和偶数都是可以的 找中间结点 我们可以用快慢指针来找中&#xff1a;l…...

CSS特效017:球体涨水的效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…...

Windows下安装Anaconda3并使用JupyterNoteBook

下载安装包 Anaconda官网 进官网&#xff0c;点击下载 自动根据当前系统下载对应的包了&#xff0c;安装包大约1G&#xff0c;喝杯Java耐心等待。 安装 很多人安装C盘&#xff0c;我这里放D盘。 注意&#xff1a;你的文件夹目录一定要不能有空格 然后其他的直接默认install即…...

什么年代了,还不会 CI/CD 么?

目录 什么是 CI/CD&#xff1f; CI/CD 对业务有哪些好处&#xff1f; 一&#xff1a;确保卓越的代码质量 二&#xff1a;更快的发布速度 → 更快的交付 三&#xff1a;自动化降低成本 四&#xff1a;故障隔离 五&#xff1a;简化回滚 六&#xff1a;持续反馈 七&#…...

centos 7.7 安装Python-3.7.4

一、安装PYTHON 编译依赖包 1.1 首先安装gcc编译器&#xff0c;gcc有些系统版本已经默认安装&#xff0c;通过 gcc --version 查看&#xff0c;没安装的先安装gcc&#xff0c; yum -y install gcc glibc make1.2 安装其它依赖包&#xff0c;&#xff08;注&#xff1a;不要缺…...

git的用法

目录 一、为什么需要git 二、git基本操作 2.1、初始化git仓库 2.2、配置本地仓库的name和email 2.3、认识工作区、暂存区、版本库 三、git的实际操作 3.1 提交文件 3.2 查看git状态以及具体的修改 3.3 git版本回退 git reset 3.1 撤销修改 四、git分支管理 4.…...

管道在Vue和Angular中的作用及React的替代方案

管道在Vue和Angular中的作用及React的替代方案 前言管道起源管道特点 前端中管道概念和作用概念作用 React关于管道的替代方案Vue和Angular管道的区别 前言 本文主要讲解管道在Vue和Angular中有哪些作用以及React对于管道概念的替代方案是什么。 管道起源 计算机中的Pipline…...

计算机基础知识57

前后端数据传输的编码格式(contentType) # 我们只研究post请求方式的编码格式&#xff1a; get请求方式没有编码格式-- index?useranme&password get请求方式没有请求体&#xff0c;参数直接在url地址的后面拼接着 # 有哪些方式可以提交post请求&#xff1a;f…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...