mysql数据库的体系结构包括什么组件_MySQL数据库的体系结构

MySQL体系结构遵循C/S模型,即客户机/服务器模型,MySQL客户机通过原生的多种接口,可以与MySQL服务器进行交互。MySQL数据库是单进程多线程的架构,同windows平台下的Oracle数据库与全平台下的达梦数据库一样,采取单进程多线程,可以减少资源的开销,因为线程上下文切换与进程间上下文切换相比,不需要保存共享内存、全局变量等资源,提升了系统性能。但多进程对于高并发的提升效果较好,linux平台下的Oracle数据库就是采取的多进程的架构。

不论是MySQL数据库,还是Oracle数据库,亦或是达梦数据库,它们的数据库与实例的对应都一致。数据库与实例间的关系是一比一,一个数据库对应一个实例(此处的数据库不是MySQL中采取create database ... 命令创建的数据库),这里的数据库实际对应着以数据库名命名的目录。对于实例,显而易见都是由一堆后台进程/线程和一块共享内存组成,用于访问与修改数据库数据。

MySQL相比Oracle、达梦的一大特色是它的可插拔存储,可根据不同的场景使用不同的存储,MySQL最初使用的myisam存储,后续为了支持事务一致性,很多都使用了innodb存储,这也是目前使用非常广泛的第三方存储,目前MySQL官方也在开发同innodb一样可以支持事务一致性的自己的存储,下图就是基于innodb存储的mysql的体系结构图,如下:

总体可分为实例与数据库,前面说过,数据库对应着磁盘上的一堆文件,而实例则是一堆后台线程与一块共享内存区构成,共享内存被后台线程所共享。对于实例的共享内存,主要有buffer pool、redo log buffer、double write、additional memory pool等组成,buffer pool又包含了index page、undo page、insert buffer page、adaptive hash index、data dictionary等内存区域。index page主要缓存从数据文件中读取的数据,undo page主要缓存DML操作中对数据块的前镜像,insert buffer page主要缓存二级索引的索引数据,data dictionary主要缓存SQL中涉及到的数据字典。而redo log buffer主要缓存数据块的修改操作,double write则是为了保证数据的一致性,防止页损坏等情况下的数据不一致。MySQL的共享内存区可类比Oracle与达梦的SGA,当然,它们还有自己的PGA(使用Oracle的说法),也就是每个进程/线程都有自己的私有内存区,关于SGA与SGA中包含的内存类型则不尽相同,但基本的排序内存区、堆等则都存在,因此在设置数据库会话或连接池或管理空闲会话时需要对此格外注意,防止出现内存不足或OOM等情况。对于常规的进程而言,可类比Oracle的进程/线程,如purge thread 清理回滚段、redo log thread 日志刷盘等。

对于物理结构,MySQL与Oracle与达梦数据库则存在较大差异。总的来说,Oracle与达梦的物理结构基本一致,但Oracle的文件体系比达梦较规范、较丰富。相比MySQL数据库则更加简单,MySQL数据库中不存在表空间的概念,它的逻辑概念database可类同Oracle的schema,其下的表则以表定义、表数据、表索引等分类存储在磁盘文件上,并且对应的文件后缀不同。innodb存储存在联机redo日志,而并没有归档功能,无法将联机redo日志的内容归档保存。

MySQL中还有许多特别的功能,说是特别,不是说其他数据库不存在此类功能,只是在使用方式和便利性不同,如MySQL的慢查询日志、常驻内存区的配置等,通过使用变量设置直接可以使用对应的功能。最后,不得不提的是MySQL安装包非常小,非常节省空间,安装便利程度仅次于达梦数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369148.shtml

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

相关文章

同步多线程集成测试

测试线程非常困难,这使得为要测试的多线程系统编写良好的集成测试非常困难。 这是因为在JUnit中,测试代码,被测对象和任何线程之间没有内置的同步。 这意味着,当您必须为创建并运行线程的方法编写测试时,通常会出现问题…

调整图像的灰度级数C++实现

图像灰度级数我们见得最多的就是256了,如果想调整它的灰度级数,我们可以使用图像库的imadjust函数来作出调整,比如讲256个灰度级变成2个灰度级(也就是二值图了)。再举一个例子,原来一幅256个灰度级的图像&a…

angular4获得焦点事件_Angular 4 文本框自动获取焦点二

Angular是不推荐直接通过DOM操作获取元素的,要操作元素就通过ViewChild装饰器。在HTML中对元素添加引用myInput:在ts中可以通过ViewChild获取指定元素的引用:import { ViewChild } from angular/core;ViewChild(myInput) input;获取到对应元素…

Bootstrap源码解读之栅格化篇

本文纯属自己研究所写笔记,如果有错误还请多多指教提出 版心(container) 版心:class名为.container的容器,其版心的宽度在各个屏幕设备下是不一样的值,版心两边就是留白。 各尺寸下版心宽度如下表: 屏幕设备版心宽度ma…

EasyCriteria 2.0 – JPA标准应该很容易

在今天的帖子中,我们将看到名为EasyCriteria的框架的新版本。 在这篇文章的结尾,我们将在博客中看到这里的内容。 不幸的是,JPA标准存在一个巨大的问题,即冗长。 为什么不变得更简单? 像这样认为EasyCriteria框架已经诞…

[BZOJ2095][Poi2010]Bridges 最大流(混合图欧拉回路)

2095: [Poi2010]Bridges Time Limit: 10 Sec Memory Limit: 259 MBDescription YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛…

excel和python建模_利用Excel学习Python:准备篇

写在前面这个系列我们要利用Excel的知识,学会用python进行数据分析,如果你精通Excel想要用python提高数据分析效率,那么这个系列你来对了,如果你已经是python大神,想要建模/算法等高级技巧的,这个系列可能不…

故障公告:IIS应用程序池停止工作造成博客站点无法访问

非常抱歉,今天凌晨博客站点负载均衡中所有3台服务器的IIS应用程序池突然停止工作,造成 1:20-7:45 左右博客站点无法正常访问,由此给您带来很大的麻烦,请您谅解。 服务器操作系统是 Windows Server 2016,对应的 IIS 错误…

前端HTML以及HTML5(基本标签)

前面一章介绍了一下前端的发展,这章简单介绍一下html的发展以及基本的标签。 一、HTML的发展史 1、概念 超文本标记语言(HyperText Markup Language,简称HTML)是为 [ 网页创建和其他可在浏览器中看到的信息 ] 设计的一种标记语言…

方法内联在JVM中有多积极?

IntelliJ IDEA中使用Ctrl Alt M 提取方法 。 Ctrl Alt M。 这就像选择一段代码并按此组合一样简单。 Eclipse也有它 。 我讨厌冗长的方法。 对于我来说,闻起来太久了: public void processOnEndOfDay(Contract c) {if (DateUtils.addDays(c.getCrea…

Python正则表达式基础

1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表…

hexdump mysql_linux下mysql数据库定时备份

备份操作命令:mysqldump -uroot --default-character-setutf8 --hex-blob -p123456 test_oa > /usr/software/data_backup/mysql_backup/test.sql以下是完整脚本,加--default-character-setutf8 --hex-blob 防乱码发生。#!/bin/bashdatabasestestus…

新建一个页面

今天我刚好要做一个单页面来展示某些东西。 就一起来看看吧&#xff0c;初学者写的不好请自闭双眼。 先上代码吧&#xff0c;大家看看有什么需要修改的地方。 1 <!DOCTYPE html>2 <html lang"en">3 4 <head>5 <meta charset"UTF-8&q…

Java并发:隐藏线程死锁

大多数Java程序员熟悉Java线程死锁概念。 它本质上涉及2个线程&#xff0c;它们彼此永远等待。 这种情况通常是平面&#xff08;同步&#xff09;或ReentrantLock&#xff08;读或写&#xff09;锁排序问题的结果。 Found one Java-level deadlock:"pool-1-thread-2"…

vue中使用axios发送请求

我们知道&#xff0c;vue2.0以后&#xff0c;vue就不再对vue-resource进行更新&#xff0c;而是推荐axios&#xff0c;而大型项目都会使用 Vuex 来管理数据&#xff0c;所以这篇博客将结合两者来发送请求 1.安装axios cnpm i axios -S 2.方案一&#xff1a;修改原型链 首先&…

django缓存

由于Django是动态网站&#xff0c;所有每次请求均会去数据进行相应的操作&#xff0c;当程序访问量大时&#xff0c;耗时必然会更加明显&#xff0c;最简单解决方式是使用&#xff1a;缓存&#xff0c;缓存将一个某个views的返回值保存至内存或者memcache中&#xff0c;5分钟内…

linux 输入法成繁体字_寻找Ubuntu中繁体字输入法

当客户来自港台地区时&#xff0c;英文和繁体字就成了交流的主要工具。windows下我们有搜狗输入法可以切换简体与繁体&#xff0c;那么Ubuntu下怎么办&#xff1f;這是我第一次考慮這個問題&#xff0c;在我的印象裏Linux下的中文輸入法還不是那麼完善&#xff0c;所以我進行了…

vue跨域解决方法

vue跨域解决方法 vue项目中&#xff0c;前端与后台进行数据请求或者提交的时候&#xff0c;如果后台没有设置跨域&#xff0c;前端本地调试代码的时候就会报“No Access-Control-Allow-Origin header is present on the requested resource.” 这种跨域错误。 要想本地正常的调…

Spring 3.2的REST异常处理

1.概述 本文将重点介绍如何使用REST API的Spring实现异常处理 。 我们将介绍在Spring 3.2之前可用的较旧的解决方案&#xff0c;然后是对Spring 3.2的新支持。 本文的主要目的是展示如何最好地将应用程序中的异常映射到HTTP状态代码。 哪种状态代码不适合本文中的哪种情况&…

kali中常用的ctf工具

exiftool:查看图片的exif信息。 pngcheck:修复被破坏的png图片 pngtools:深入研究png文件的数据 steganographic&#xff1a;用来提取图片中的隐藏信息 stegsolve.jar:kali中没有该工具&#xff0c;但是可以自己下 gimp:提供了转换各类图像文件可视化数据的功能&#xff0c;还可…