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

《MySQL DBA修炼之道》——1.2MySQL 的基础架构和版本

本节书摘来自华章出版社《MySQL DBA修炼之道》一书中的第1章,第1.2节,作者:陈晓勇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第1章 理解MySQL

1.2MySQL 的基础架构和版本

1.2.1 软件架构中数据库的定位
数据库一般位于整个软件架构的后端,而不直接服务于用户,数据的展示、应用逻辑的处理都是由其他层次的程序来实现的。比较流行的一种软件架构的分类是“双层”、“三层”、“多层”架构。客户端直接和数据库服务器通信,比如通过ODBC、JDBC连接数据库,一般称为“双层架构”或“client-server”架构。若客户端和数据库之间有一个中间服务器(如Web服务器,中间件),则由中间服务器负责转发请求给数据库服务器,这种模式称为“三层架构”。在很多较大规模的Web应用中,在Web服务器和数据库服务器之间还可能存在一个应用服务器,这种结构称为“四层架构”。
本书探讨的MySQL是基于目前互联网最常见的架构,如,网站应用、移动互联网应用。它们一般是三层架构,这三层架构分别如下。
1)用户接口层,即各种终端,比如,运行在最终用户计算机上的浏览器。
2)业务逻辑和数据处理层,即应用程序服务器,比如,PHP、Java EE、ASP.NET、Ruby on Rails等应用服务。网站处理网络访问请求的过程可能是这样的:由Nginx接受用户请求,处理静态页面,并且将动态请求转发给后端的PHP服务,PHP服务处理完动态请求后,将结果返还给Nginx,Nginx再返还给用户。有时也称该层为中间件(middle ware)。
3)DBMS,即后端数据存储,如MySQL、PostgreSQL、Redis、Memcached等产品。
相应地,在软件系统架构设计中也存在一种分层设计的方法学。我们熟知的三层架构(3-tier application)是一种应用广泛的分层设计,它把应用分解为表现层、业务逻辑层、数据访问层3个层次。三层(多层)架构主要的好处是提供了一个灵活的、可重用的模型,开发者可以通过简单地修改某一层的功能或增加某一层的功能来实现某种需求,而不需要修改整个应用程序。
表现层(UI),即直接和用户交互的界面。
业务逻辑层(BLL),即对业务逻辑进行处理,处理用户的请求,它将许多最终用户的业务逻辑集中到了应用服务器上。
数据访问层(DAL),直接操作数据库,即针对数据的增加、删除、修改、查找等
操作。
传统行业的商业数据库往往还承载了许多业务逻辑的功能,这其中就会经常用到存储过程、触发器。互联网世界的开源数据库虽然也有存储过程、触发器之类的特性,但绝大部分场合下并不会用到这些非核心的基本特性,开发者把数据库更多地看作一个存储数据的容器,并已将核心业务逻辑从数据库功能中分离了出来。
本书主要是讲述MySQL的使用,由于MySQL的优化与软件整体架构的其他组件的关系密切,所以对于Web服务器、缓存产品、队列等产品,也会做一些简单介绍。作为一个合格的DBA,有必要了解各种应用服务的运行机制,以及是否需要对它们进行优化。
1.2.2 MySQL的基础架构
MySQL是一种关系数据库产品。关系数据库,顾名思义,是建立在关系模型基础上的数据库。现实世界中,实体与实体之间的各种联系一般都可以用关系模型来表示。经过数十年的发展,关系数据库在理论和工业实践中都已经很成熟了。
数据库产品的架构一般可以分为应用层、逻辑层、物理层,对于MySQL,同样可以理解为如下的3个层次。
应用层。负责和客户端、用户进行交互,需要和不同的客户端和中间服务器进行交互,建立连接,记住连接的状态,响应它们的请求,返回数据和控制信息(错误信息、状态码等)。
逻辑层。负责具体的查询处理、事务管理、存储管理、恢复管理,以及其他的附加功能。查询处理器负责查询的解析、执行。当接收到客户端的查询时,数据库就会分配一个线程来处理它。先由查询处理器(优化器)生成执行计划,然后交由计划执行器来执行,执行器有时需要访问更底层的事务管理器、存储管理器来操作数据,事务管理器、存储管理器主要负责事务管理、并发控制、存储管理。这其中,将由事务管理器来确保“ACID”特性,通过锁管理器来控制并发,由日志管理器来确保数据持久化,存储管理器一般还包括一个缓冲管理器,由它来确定磁盘和内存缓冲之间的数据传输。
物理层。实际物理磁盘(存储)上的数据库文件,比如,数据文件、日志文件等。
图1-1是MySQL官方文档的一个基础架构图,其中Connectors可以理解为各种客户端、应用服务;Connection Pool 可以理解为应用层,负责连接、验证等功能;Management Services & Utilities、SQL Interface、Parser、Optimizer、Caches & Buffers、Pluggable Storage Engines可以理解为数据库的大脑——逻辑层;最下方的Files& Logs可以理解为物理层。


d8700b31b8a7829397f4814cccd94b134c1db872

图1-1 MySQL的基础架构
1.2.3 MySQL的版本及特性
  1. MySQL支持的平台
    MySQL支持目前市面上的大部分平台,包括32位和64位平台,一般情况下程序运行在64位平台上比32位更快。MySQL支持的平台如下所示。

Solaris
Linux
Windows
AIX
Mac OS
HPUX

  1. MySQL许可协议?
    Oracle以双重授权(Dual Licensed)的方式发布MySQL,它们是GPL和商业许可协议(Commercial License)。如果你在一个遵循GPL的自由(开源)项目中使用MySQL,那么你可以遵循GPL协议使用MySQL,无论是否将其用作商用。

如果某些商业软件中结合了MySQL或修改了MySQL源码,但又不愿意按GPL协议公开软件源码,那么就必须和Oracle公司达成商业许可协议。简而言之,如果你违反了GPL,则需要购买商业许可。
GPL授予用户以下权利。
以任何目的运行此程序的自由。
再发行复制件的自由。
改进程序,并公开发布改进内容的自由。
需要注意的是,GPL只限制了对外分发的软件,也就是说,如果该软件只在内部使用,无论开不开源都没有关系。如何使用开源软件并不受GPL的约束,只有在你基于开源软件,修改开源软件的源码时才受 GPL约束,如果你的应用程序只是用到了MySQL,无论是否商用,都不需要考虑开源。

  1. MySQL版本
    MySQL目前可分为4个版本:MySQL社区版、MySQL标准版、MySQL企业版、MySQL集群版。

(1)MySQL社区版
可免费下载使用的开源版本,遵循GPL协议,包括如下的这些特性。
可插拔的存储引擎架构
多存储引擎支持InnoDB、MyISAM、NDB(MySQL Cluster即采用NDB存储引擎)、Memory、Merge、Archive、CSV等
复制
分区
存储过程、触发器、视图
信息数据库(Information-Schema)
MySQL连接器
MySQL工作台(MySQL Workbench)
目前已经发布了MySQL 5.0、MySQL 5.1、MySQL 5.5、MySQL 5.6、MySQL 5.7一共5个GA版本。一般来说,后面的版本比前面的版本功能更强、扩展性更好。
以下3个版本是给商业用户使用的,商业客户可灵活选择多个版本,以满足特殊的商业和技术需求。
(2)MySQL标准版
和社区版差别不大,提供社区版所支持的各种特性。
(3)MySQL企业版
MySQL企业版提供7×24小时的技术支持服务,用户可直接联系MySQL专业支持工程师,获取关于MySQL应用程序开发、部署和管理的全方位支持。
MySQL企业版提供了更全面的高级功能、管理工具和技术支持,例如:MySQL企业级备份可为数据库提供在线“热”备份,从而降低数据丢失的风险。它支持完全、增量和部分备份,以及时间点恢复和备份压缩。
MySQL线程池提供了一个高效的线程处理模型,旨在降低客户端连接和语句执行线程的管理开销。
MySQL企业级安全性提供了一些立即可用的外部身份验证模块,可将MySQL轻松集成到现有的安全基础架构中。
其他特性还有MySQL企业级审计、MySQL企业级监视器(MySQL Enterprise Monitor)和MySQL查询分析器(MySQL Query Analyzer)等。
MySQL的一些新特性出现在了企业版中,但并没有出现在社区版,这导致很多人对于MySQL产生了疑虑,但MySQL的生态已经建立成熟,官方版本和其他分支也都在稳定地发展改进中,一般的中小公司选择社区版本即可。一些行业、领域要求更好的服务,更高的稳定性,或者有其他复杂的业务需求,对于它们企业版是一个很好的选择。
(4)MySQL集群(MySQL Cluster)版
Oracle收购MySQL之后,对MySQL Cluster做了大量改进,这也是Oracle力推的产品。集群版是一种分布式、无共享(share-nothing)的架构,也就是说把数据分布在各个节点的内存里。据官方宣称,集群版可比单机数据库提供更高的可用性,高达99.999%。它还有一些好处,比如自动分片、动态添加节点、支持跨IDC复制、减少维护成本等。但这个产品比较复杂,国内也缺少精通MySQL Cluster的专家,如果一定要使用,建议做好充分的测试验证工作。
据说现在的MySQL Cluster版本已经允许存储部分数据到硬盘上,但由于主要数据需要存放在内存中,因此其部署成本会比较高。另外,随着MySQL Cluster节点的增多,节点之间通信、同步的代价也越来越大,所以其扩展性也是有限的。对于海量数据,MySQL Cluster可能不是很好的方案,从理论上来讲,仅仅把热点数据加载到内存是更经济的做法。
1.2.4 MySQL的开发周期
Oracle公司是一家成熟的商业公司,拥有一流的工程能力和执行力,自收购MySQL以来,就增加了相应的开发人员,并且提供了更成熟的开发模式,目前MySQL的开发进度比收购之前高了很多,许多第三方的优化补丁也都在官方版本中得到了实现。而之前MySQL的400多名开发人员分布在25个国家,70%的开发人员在家工作,导致了交流沟通不畅,产品开发进展缓慢。
目前MySQL的发展路线更清晰,开发周期大致分为4个阶段。
1)新特性开发。
2)发布实验室版本。
实验室版本可以提前预览到一些正在开发的特性,供用户试用,但是不保证这些特性会被整合到里程碑版本和GA版本。
3)发布里程碑版本(Development Milestone Releases)。
这个时候的版本称为RC(Release Candidate候选)版本,有充分的文档支持,在所有支持的平台上发布,可以让用户试用,以收集反馈。一般平均3~6个月发布一个DMR(里程碑版本)。
4)发布GA版本(Generally Availability Releases)。
GA版本是建议用于生产系统的版本。一般18~24个月为一个周期。

相关文章:

  • 定制并发类(七)实现ThreadFactory接口生成自定义的线程给Fork/Join框架
  • 《Python游戏编程快速上手》——2.2 计算表达式
  • 《Adobe Flash CS4中文版经典教程》——1.9 预览影片
  • 运营前线2:一线运营专家的运营方法、技巧与实践02 内容运营,取标题的这6招你得会...
  • 《Swift入门经典(第2版)》——第2章 学习Swift的基本数据类型 2.1Swift中的常量...
  • 互联网世界的“人工智能”——探秘“深度学习”的前世今生
  • GOOGLE招聘之行为准则
  • 中国信通院重磅发布大数据关键技术专利态势报告(全文38页下载)
  • Linux学习134 Unit 7
  • python3的文件读取问题
  • 团队视频内容和链接
  • 新生入学V3.0颗粒归仓
  • LVM故障导致RHCS启动故障
  • Java中套接字的理解
  • Redis开发运维实践专题功能之发布订阅
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Android Volley源码解析
  • javascript数组去重/查找/插入/删除
  • Less 日常用法
  • PHP 7 修改了什么呢 -- 2
  • Redis学习笔记 - pipline(流水线、管道)
  • 创建一种深思熟虑的文化
  • UI设计初学者应该如何入门?
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • (3)(3.5) 遥测无线电区域条例
  • (C语言)逆序输出字符串
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (转)创业的注意事项
  • (转)关于pipe()的详细解析
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .Net接口调试与案例
  • /etc/sudoer文件配置简析
  • @javax.ws.rs Webservice注解
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [Android Studio] 开发Java 程序
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [C++]类和对象(中)
  • [EFI]MSI GF63 Thin 9SCXR电脑 Hackintosh 黑苹果efi引导文件
  • [Go WebSocket] 多房间的聊天室(五)用多个小锁代替大锁,提高效率
  • [HOW TO]怎么在iPhone程序中实现可多选可搜索按字母排序的联系人选择器
  • [IE编程] 如何编程清除IE缓存
  • [MFC] VS2013版本MFC工程移植到VC6.0上
  • [Mvc]在ASP.NET MVC中使用Repeater
  • [na]wireshark抓包排错-tcp.flags.reset
  • [NISACTF 2022]sign-ezc++
  • [OS] linux常见问题汇总
  • [Rust学习:二]变量和传参