DB2 Vs MySQL系列 | 体系架构对比

前些日子,我们做了DB2 VS MySQL的数据类型的对比,今天我们将体系架构的对比分享给大家,让大家对这两类数据库有更深刻的认识。

DB2体系结构

DB2 for LUW进程模型在DB2v9.5之前都是多进程模型,DB2 v9.5之后体系架构变更为单进程多线程模型。

是一个C/S结构,客户端可以通过TCP/IP或IPC协议与服务器通信,每当客户端与服务器建立连接之后,会在服务器端产生一个代理线程(db2agent)负责处理来自客户端的所有请求,但是当某一时刻并发请求很多或者连接断开时,重复地产生与销毁代理线程会产生很大的系统开销,所以DB2服务器在启动时创建一个常连接池来避免重复地创建/销毁代理线程。

但是如果某一个处理的请求非常大时,如果单个线程去处理效率比较低下,为了提高单个请求的处理能力,与客户端通信的那个代理线程(db2agent)可以从线程池中额外召集几个线程(db2agentp)来共同处理某个请求。

DB2的线程分类

  • 常连接池内的线程db2agent和db2agentp

处理客户端请求,比如从bufferpool中取请求的数据,或者将请求拆解放到预取(prefetch)队列中供预取进程(prefetcher)从磁盘取数据使用、或者将一些DML操作记录到日志缓冲区(logbuffer)中等。

  • 通信管理线程db2tcpcm和db2ipccm

负责对来自客户端的连接请求进行安全验证和检查,并与客户端实现三次握手连接。

  • 数据页预取进程db2pfchr/页面清理进程db2pclnr

当请求的数据不在bufferpool中时,需要预取进程db2pfchr通过异步读数据的方式将将所需数据从磁盘读入bufferpool中。

DB2对数据的操纵主要在bufferpool中进行,当插入某些数据或对某些数据做了变更后形成脏页(dirtypage)后,需要使用线程db2pclnr根据一定的机制定期清理bufferpool中的脏页,一方面持久化数据,另一方面给bufferpool腾出更多可置换空间供使用。

  • 日志页读写进程db2loggr/db2loggw

DB2采用的是读日志优先(Readlog ahead)的策略来持久化数据,即在将insert/delete/update的数据写入磁盘前,必须先将对这些操作的日志从日志缓冲区持久化到磁盘当中,这个操作由db2loggw线程完成。

当需要使用持久化到磁盘的日志恢复或撤销某些操作时,需要从磁盘中将对应的日志读入到日志缓冲区中,此时有db2loggr线程完成。

  • 全局死锁检测线程db2dlock

该线程主要是检测系统死锁防止因为死锁造成的应用不可用。

以下为部分常见DB2管理工具和实例:

命令

功能/用途

示例

db2start

启动数据库实例

db2start

db2stop

停止数据库实例

db2stop

db2icrt

创建数据库实例

db2icrt -u db2fenc1 db2inst1

db2idrop

删除数据库实例

db2idrop -f db2inst1

db2ilist

列出当前机器上的所有实例

db2ilist

db2iupdt

给数据库打Fifxpack之后更新实例

db2iupdt -u db2fenc1 db2inst1

db2level

显示当前DB2版本信息

db2level

db2look

抽取DB2数据库DDL

db2look -d sample -a -e -db2look.sq

db2dart

数据库分析和报告工具

db2dart sample

db2pd

从数据库内存中抓取快照

db2pd -d sample -locks

DB2实例命令

MySQL体系结构

MySQL的体系架构如上图所示,可将其划分为以下三个逻辑层:

  • 应用层(Application Layer)
  • 逻辑层(Logical Layer)
  • 物理层(Physical Layer)

应用层

ApplicationLayer

MySQL管理工具和应用实例(Administrator&Utilities)

主要是连接到MySQL服务器检索、修改或增加数据,有以下常见MySQL管理工具或实用程序。

客户机程序大类

客户机程序名

功能/用途

Administrator

mysqladmin

管理服务器,比如配置服务器参数,创建/删除数据库等

mysqldump

创建数据库的逻辑备份

mysqlcheck

检查、修复、重组表以及收集表统计信息

mysqlimport

用命令行向数据库导入数据,功能同LOAD DATA INFILE语句

mysqlshow

查看数据库/表/行列及索引信息,功能同SHOW语句

mysqlslap

模仿客户端负载

Utilities

innochecksum

离线检查innodb文件校验码

myisam_ftdump

显示MyISAM表的全文本索引信息

myisamchk

MyISAM表维护工具,比如查看表信息、检查/修复/重组表信息等

myisamlog

显示MyISAM日志文件信息

myisampack

压缩MyISAM表,压缩率可以达到40%到70%

mysql_config_editor

加密MySQL配置文件

mysqlbinlog

将mysql二进制日志文件解析成文本格式

mysqldumpslow

解析MySQL慢查询日志文件并且汇总日志信息

本地查询接口(Query Interface)

MySQL查询接口主要指mysql脚本,使用mysql工具可以直接与MySQL服务器交互,是日常与MySQL服务器打交道最频繁的工具。

客户端应用接口(Client API)

客户端应用接口主要是使用MySQL服务器对外公布的一些API调用访问数据库,主要有CAPI、Python API以及JavaAPI。

逻辑层

LogicalLayer

MySQL逻辑层主要是包括以下几个功能:

  • SQL引擎编译SQL语句

将客户端发送的SQL语句请求通过SQL引擎将SQL语句编译成MySQL服务器内部存取数据的指令的过程,编译过程包括查询解析(QueryParser)、查询检查(Query check),查询优化(QueryOptimizer)以及查询执行(Query Excution)四个阶段。

  • 事务控制

事务(Transaction)是由一组SQL语句组成的逻辑处理单元,这个逻辑处理单元被原子性地处理,即要么其中的所有SQL语句全部执行成功,要么全部失败,没有第三种可能。那么MySQL是怎么保证事务被原子性地处理呢?这就是Transactionmanagement组件的功能了。当事务全部处理完毕时,通过该组件完成决定commit还是rollback操作。

  • 日志管理

数据库需要将所有对数据变更的操作记录下来,以便当数据库发生crash时做Redo或Undo操作,或者在分布式结构中将操作通过从一个计算节点共享到其他计算节点,这些功能都是通过事务日志来控制的。

MySQL的事务日志管理系统是Recoverymanagement组件,主要功能是持久化事务日志以及当数据库crash时将数据库恢复到crash之前的一致性状态。

  • 存储管理(Storage management)

数据库中操作数据的主要场所是bufferpools,怎么控制数据页和索引页在bufferpool中的状态就是通过storagemanagement完成的,该组件主要还是对Page层面的管理,包括将页读入内存、页的清理等。

值得一提的是,MySQL的逻辑层的上述几个组件功能并不是MySQL特有的,而是普遍适用于DB2/Oracle等常见关系型数据库。

物理层

PhysicalLayer

数据库的物理层主要关注的是数据怎么落地存储以及被有效访问的问题,MySQL的物理层设计比较特殊,MySQL提供了多种存储引擎供用户选择,而且这些存储引擎是可插拔的(Pluggable),这是区别于业内其他关系型数据库的一个很重要的特征。

MySQL数据库为用户提供了20多种可插拔的存储引擎,比较常见的有如下列表所示几种:

如上图的存储引擎中,从功能上比较接近商业数据库功能的是InnoDB存储引擎。从MySQL5.5开始,InnoDB成为MySQL服务器的默认存储引擎;而早在SunMicroSystem被Oracle收购之前的2005年,InnoDB存储引擎就被Oracle收购。

相比较于其他MySQL存储引擎,MySQLInnoDB存储引擎支持以下关键特性:

  • 多版本并发控制(MVCC)
  • 行级锁(Row-level Locking)
  • 外键支持(Foreign key support)
  • 群集索引(Cluster Indexing)
  • 可自由分配的bufferpools
  • 在线数据库备份

以下以InnoDB内部是怎么和磁盘文件交互的详细架构示意图

如下图是支持访问MySQL数据库服务器的API接口类型,可以通过编写程序调用四种API接口访问MySQL数据库:

  • JDBC with Connector/J

通过Java程序访问MySQL服务器

  • .NET with Connector/NET

使用.NET程序访问MySQL服务器

  • ODBC with Connector/ODBC
  • Other APIs with C Library

使用基于C语言库的编程语言,比如C/C++语言、Python/PHP/Perl/Ruby语言等访问MySQL数据库。

总之,MYSQL支持通过当前最流行的几种主流语言访问。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2018-01-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

关于视图和存储过程的权限问题探究 (r9笔记第87天)

今天在处理一个工单的时候发现了一个奇怪的现象,开发同学需要创建一个存储过程,目前的架构类似这样的形式 ? 数据库中存在一个属主用户,表,存储过程等对象...

35010
来自专栏Java架构师历程

MYSQL 谈谈各存储引擎的优缺点

1、存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。

1632
来自专栏数据库

浅谈MySQL的事务隔离级别

推荐阅读 微服务: springboot系列教程学习 源码:Javaweb练手项目源码下载 调优:十五篇好文回顾 面试笔试:面试笔试整理系列 希望这篇文章能够阐...

2058
来自专栏张善友的专栏

体验SQL Server 2008 Express

1、在安装上和SQL Server 2005比较上更加丰富的选项设置,下面贴两个界面: ? ? 2、SQL Server 2008的新特性FILESTREAM ...

1986
来自专栏小特工作室

Navi.Soft31.代码生成器(含下载地址)

1系统简介 1.1功能简述 在Net软件开发过程中,大部分时间都是在编写代码,并且都是重复和冗杂的代码.比如:要实现在数据库中10个表的增删改查功能,大部分代码...

1848
来自专栏跟着阿笨一起玩NET

MySQL第三方客户端工具

如前所述,MySQL是一个基于客户机--服务器的DBMS,因此,为了使用MySQl,你需要有一个客户机软件给MySQL提供要执行的命令。即你需要一个编写和测试M...

3911
来自专栏北京马哥教育

MySQL 数据库上线后根据 status 状态优化

马哥linux运维 | 最专业的linux培训机构 ---- 网上有很多的文章教怎么配置mysql服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文...

3006
来自专栏容器云生态

Docker监控方案(TIG)的研究与实践之Influxdb

前言: Influxdb也是有influxdata公司(www.influxdata.com )开发的用于数据存储的时间序列数据库.可用于数据的时间排列。在整个...

3008
来自专栏码神联盟

数据库 | MYSQL 中的视图view详解

序本文目录 什么是视图 视图的特性 视图的作用 视图使用场景 视图示例1-创建、查询 视图示例2-增、删、改 其它 1什么是视图 视图是一个虚拟表,其内容由查询...

42011
来自专栏IT技术精选文摘

MySQL高可用方案

第一种:主从复制+读写分离 客户端通过Master对数据库进行写操作,slave端进行读操作,并可进行备份。Master出现问题后,可以手动将应用切换到slav...

3558

扫码关注云+社区