架构 服务器 mysql Oracle SQL 日志 线程 高可用 数据库 互联网 查询优化 磁盘 传统企业存储
身处数据驱动快速变革的时代,数据库系统的选型和架构设计对于整个IT基础架构,甚至企业的发展都起到至关重要的作用。那么今天,如果您的企业需要搭建一套新的应用系统,你会选择什么数据库类型?如果当前的系统不能满足业务需求,面临系统迁移,你又会如何选择? 在2017年初,我们分享过一份国外的报告“开发人员是如何使用数据库的 ”,并且进行了一次调查『中国数据库爱好者的选择和背离』,其中的一些数据展示了用户对于数据库的选择,非常具有参考价值,链接可以直接参考分析报告。而在数据库领域加速这一过程的,便是以MySQL为代表的开源数据库的应用。MySQL在近几年发展迅速,以其体积小、速度快、成本低,尤其是开放源码等优势受到广大用户的喜爱。
近期,云和恩墨为某证券公司进行了从DB2到MySQL数据库系统的迁移论证、验证,对两类数据库展开全方位多角度的对比分析,并根据用户的业务现状进行了相关架构、性能、备份恢复及高可用验证。
在以下的系列文章中,我们将把来自于实践的分析、论证、验证数据分享给大家,从商用到开源,从DB2到MySQL,从传统业务到互联网架构,一切正在发生。
我们知道,IT架构通常由业务架构、数据架构、IT基础架构和应用架构构成,而数据架构则是整个IT架构的中心,企业最核心的资产就是数据。
MySQL数据库作为互联网行业IT架构的标配,在长期的实践中积累了大量的高可用、分布式架构和灾备经验。
因此,潮流的改变IT传统架构的演变。越来越多的DB2数据库客户转向开源数据库,而 MySQL 作为当前最火的开源数据库,也常常是受到老DB2用户关注最多的。
随着大数据和云时代的到来,企业的新业务和应用变更非常快,此时,以低成本的方式进行系统扩展和维护便是首要考虑的问题。
由于互联网行业的薪资和职业前景吸引了大量技术人才涌入互联网公司从事开发运维等工作,使得原厂技术支持团队人才流失严重,而且服务体制僵化,服务响应流程慢等弊端,导致了服务质量的下降,从而拉低了客户满意度。
因此,由于DB2数据库技术人才储备的严重不足以及业内人才梯队断层,导致很多企业招人难,特别是很多中小型企业,社区和产品是相互促进、相互推动,人才必然影响到产品的应用。
全球数据库热度排名中,MySQL稳居第二名直逼第一名。参考链接:https://db-engines.com/en/ranking
当然,在考虑将DB2迁移到MySQL之前,也应该充分认识到MySQL在功能上的一些缺陷。
基于上述的迁移驱动力,你是不是也决定要把你的DB2系统迁移至MySQL了呢?那么如何才能规避迁移中的系列问题呢?这需要我们完全把握两个数据库的特点,各自的优势和不足,在迁移中做合理规划设计。
为此,本系列接下来会包含(但不限于)以下内容,带领大家全面认识DB2迁移至MySQL的实践。
1、DB2与MySQL数据库对比分析。包含:数据库架构对比,数据类型对比,数据库对象对比,SQL对比等。
2、测试。包含DB2与MySQL兼容性测试,MySQL性能测试,MySQL基于OLPT的测试等等。
一场从DB2迁移至MySQL的数据库风暴即将袭来,你准备好了吗?
由连接池组件、管理服务和⼯工具组件、SQL接口组件、查询分析器组件、优化器组件、缓冲组件、插件式存储引擎、物理⽂文件组成。MySQL是独有的插件式体系结构,各个存储引擎有自己的特点。
2、ManagementServeices & Utilities: 系统管理和控制工具
3、Connection Pool:连接池:管理缓冲用户连接,线程处理等需要缓存的需求
4、SQL Interface:SQL接口:接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface
5、Parser: 解析器:SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。
a . 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的
b. 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的。
6、Optimizer: 查询优化器:SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的是“选取-投影-联接”策略进行查询。
举例: selectuid,name from user where gender = 1;
如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等
8、Engine :存储引擎。存储引擎是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色的一个地方。
- Mysql的存储引擎是插件式的。它根据MySql AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)
- 现在有很多种存储引擎,各个存储引擎的优势各不一样,最常用的MyISAM,InnoDB,BDB
- 默认下MySql是使用MyISAM引擎,它查询速度快,有较好的索引优化和数据压缩技术。但是它不支持事务。
- InnoDB支持事务,并且提供行级的锁定,应用也相当广泛。
- Mysql也支持自己定制存储引擎,甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。
MySQL不是通过多进程来完成其功能的,MySQL只有一个进程,进程里有多个线程。
主要是连接到MySQL服务器检索、修改或增加数据,有以下常见MySQL管理工具或实用程序。
MySQL查询接口主要指mysql脚本,使用mysql工具可以直接与MySQL服务器交互,是日常与MySQL服务器打交道最频繁的工具。
客户端应用接口主要是使用MySQL服务器对外公布的一些API调用访问数据库,主要有CAPI、PythonAPI以及JavaAPI。
SQL引擎编译SQL语句事务控制
日志管理
数据库需要将所有对数据变更的操作记录下来,以便当数据库发生crash时做Redo或Undo操作,或者在分布式结构中将操作通过从一个计算节点共享到其他计算节点,这些功能都是通过事务日志来控制的。
MySQL的事务日志管理系统是Recoverymanagement组件,主要功能是持久化事务日志以及当数据库crash时将数据库恢复到crash之前的一致性状态。
存储管理值得一提的是,MySQL的逻辑层的上述几个组件功能并不是MySQL特有的,而是普遍适用于DB2/Oracle等常见关系型数据库。
相比较于其他MySQL存储引擎,MySQLInnoDB存储引擎支持以下关键特性:
- 多版本并发控制(MVCC)
- 行级锁(Row-level Locking)
- 外键支持(Foreign key support)
- 群集索引(Cluster Indexing)
- 可自由分配的bufferpools
- 在线数据库备份
以下以InnoDB内部是怎么和磁盘文件交互的详细架构示意图。
如下图是支持访问MySQL数据库服务器的API接口类型,可以通过编写程序调用四种API接口访问MySQL数据库:
使用基于C语言库的编程语言,比如C/C++语言、Python/PHP/Perl/Ruby语言等访问MySQL数据库。总之,MYSQL支持通过当前最流行的几种主流语言访问。
DB2 for LUW进程模型在DB2v9.5之前都是多进程模型,DB2v9.5之后体系架构变更为单进程多线程模型。
- 常连接池内的线程db2agent和db2agentp:处理客户端请求,比如从bufferpool中取请求的数据,或者将请求拆解放到预取(prefetch)队列中供预取进程(prefetcher)从磁盘取数据使用、或者将一些DML操作记录到日志缓冲区(logbuffer)中等。
- 通信管理线程db2tcpcm和db2ipccm:负责对来自客户端的连接请求进行安全验证和检查,并与客户端实现三次握手连接。
- 数据页预取进程db2pfchr/页面清理进程db2pclnr:当请求的数据不在bufferpool中时,需要预取进程db2pfchr通过异步读数据的方式将将所需数据从磁盘读入bufferpool中。
当需要使用持久化到磁盘的日志恢复或撤销某些操作时,需要从磁盘中将对应的日志读入到日志缓冲区中,此时有db2loggr线程完成。
全局死锁检测线程db2dlock:该线程主要是检测系统死锁防止因为死锁造成的应用不可用。数据和云