学习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.rhkb.cn/news/201415.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

结合两个Python小游戏,带你复习while循环、if判断、函数等知识点

💐作者:insist-- 💐个人主页:insist-- 的个人主页 理想主义的花,最终会盛开在浪漫主义的土壤里,我们的热情永远不会熄灭,在现实平凡中,我们终将上岸,阳光万里 ❤️欢迎点…

ECharts 实例2

之前做过一个 ECharts 例子&#xff1b;再做一个看一下&#xff1b; <!DOCTYPE html> <html> <head><meta charset"gb2312"><title> 多bar 实例</title><!-- 引入 echarts.js --><script src"https://cdn.static…

VMware三种网络模式

桥接模式 NAT(网络地址转换模式) Host-Only(仅主机模式) 参考&#xff1a; vmware虚拟机三种网络模式 - 知乎 (zhihu.com)

【大数据Hive】hive 优化策略之job任务优化

目录 一、前言 二、hive执行计划 2.1 hive explain简介 2.1.1 语法格式 2.1.2 查询计划阶段说明 2.2 操作演示 2.2.1 不加条件的查询计划分析 2.2.2 带条件的查询计划分析 三、MapReduce属性优化 3.1 本地模式 3.1.1 本地模式参数设置 3.1.2 本地模式操作演示 3.2 …

Elasticsearch 和 LangChain 合作开发可用于生产的 RAG 模板

作者&#xff1a;Aditya Tripathi 在过去的几个月里&#xff0c;我们一直与 LangChain 团队密切合作&#xff0c;他们在推出 LangServe 和 LangChain 模板方面取得了进展&#xff01; LangChain Templates 是一组用于构建生产质量的生成式 AI 应用程序的参考架构。 你可以在此处…

Flutter笔记:Matrix4矩阵变换与案例

Flutter笔记 Matrix4矩阵变换及其案例 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134474764 【简介…

强化学习--多维动作状态空间的设计

目录 一、离散动作二、连续动作1、例子12、知乎给出的示例2、github里面的代码 免责声明&#xff1a;以下代码部分来自网络&#xff0c;部分来自ChatGPT&#xff0c;部分来自个人的理解。如有其他观点&#xff0c;欢迎讨论&#xff01; 一、离散动作 注意&#xff1a;本文均以…

【Docker】Docker安装Nginx配置静态资源

1.下载镜像 2.创建nginx配置文件 3.创建nginx容器运行 4.配置nginx静态资源 1.下载镜像 Dockerhub官网&#xff1a;Docker docker pull nginx docker pull nginx下载最新版本 默认latest 下载指定版本docker pull nginx:xxx 2.创建nginx配置文件 启动容器之前要创建nginx…

【云原生】初识 Service Mesh

目录 一、什么是Service Mesh 二、微服务发展历程 2.1 微服务架构演进历史 2.1.1 单体架构 2.1.2 SOA阶段 2.1.3 微服务阶段 2.2 微服务治理中的问题 2.2.1 技术栈庞杂 2.2.2 版本升级碎片化 2.2.3 侵入性强 2.2.4 中间件多&#xff0c;学习成本高 2.2.5 服务治理功…

智能座舱架构与芯片- (8) 视觉篇

一、概述 相比起用于ADAS感知系统的摄像头&#xff0c;用于智能座舱内部的摄像头&#xff0c;其功能特性和性能要求相对简单。例如&#xff0c;OMS乘客监控摄像头&#xff0c;一般达到5MP即可有良好的效果。同时&#xff0c;OMS也可应用于车内会议系统&#xff0c;还应用于车内…

selenium判断元素是否存在的方法

文章目录 快捷方法完整示例程序 快捷方法 selenium没有exist_xxx相关的方法&#xff0c;无法直接判断元素存在。但是锁定元素时使用的browser.find_elements(By.CSS_SELECTOR, "css元素")会返回一个列表list&#xff0c;如果不存在这个元素就会返回一个空列表。因此…

【办公常识】写好的代码如何上传?使用svn commit

首先找到对应的目录 找到文件之后点击SVN Commit

ModernCSS.dev - 来自微软前端工程师的 CSS 高级教程,讲解如何用新的 CSS 语法来解决旧的问题

今天给大家安利一套现代 CSS 的教程&#xff0c;以前写网页的问题&#xff0c;现在都可以用新的写法来解决了。 ModernCSS.dev 是一个现代 CSS 语法的教程&#xff0c;讲解新的 CSS 语法如何解决一些传统问题&#xff0c;一共有30多课。 这套教程的作者是 Stephanie Eckles&am…

git clone慢的解决办法

在网站 https://www.ipaddress.com/ 分别搜索&#xff1a; github.global.ssl.fastly.net github.com 得到ip&#xff1a; 打开hosts文件 sudo vim /etc/hosts 在hosts文件末尾添加 140.82.114.3 github.com 151.101.1.194 github.global-ssl.fastly.net 151.101.65.194 g…

汇编-间接寻址(处理数组)

直接寻址很少用于数组处理&#xff0c;因为用常数偏移量来寻址多个数组元素时&#xff0c;直接寻址并不实用。取而代之的是使用寄存器作为指针(称为间接寻址(indirect addressing) ) 并控制该寄存器的值。如果一个操作数使用的是间接寻址&#xff0c; 就称之为间接操作数(indie…

minio安装使用-linux

下载地址&#xff1a;MinIO | Code and downloads to create high performance object storage 选择 minio server 可以直接下载二进制文件。 将下载的文件传输到服务器的指定文件夹下&#xff0c;如 /opt/minio。 然后在&#xff0c;命令行启动minio&#xff1a; /opt/mini…

网工内推 | 合资公司网工,CCNP/HCIP认证优先,朝九晚六

01 中企网络通信技术有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、按照工作流程和指引监控网络运行情况和客户连接状况&#xff1b; 2、确保各监控系统能正常运作&#xff1b; 3、快速响应各个网络告警事件&#xff1b; 4、判断出网络故障&#xff0c;按…

利用OpenCV实现图片中导线的识别

下面是一个需求&#xff0c;识别图片中的导线&#xff0c;要在图像中检测导线&#xff0c;我们需要采用不同于直线检测的方法。由于OpenCV没有直接的曲线检测函数&#xff0c;如同它对直线提供的HoughLines或HoughLinesP&#xff0c;检测曲线通常需要更多的图像处理步骤和算法&…

集成多元算法,打造高效字面文本相似度计算与匹配搜索解决方案,助力文本匹配冷启动[BM25、词向量、SimHash、Tfidf、SequenceMatcher]

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…

单体进化微服务:拆分、注册、调用、网关、过滤、治理、分布式事务

这里写目录标题 基本介绍生产-消费-网关父依赖生产者服务消费者服务网关服务common服务 感想 基本介绍 Spring Cloud 是一个用于构建分布式系统和微服务架构的开发工具包。它提供了一系列的功能和组件&#xff0c;用于解决微服务架构中的常见问题&#xff0c;如服务注册与发现…