mysql(自写)

Mysql介于应用和数据之间,通过一些设计 ,将大量数据变成一张张像excel的数据表

数据页:

mysql将数据拆成一个一个的数据页

索引:

为每个页加入页号,再为每行数据加入序号,这个序号就是所谓的主键。  将每个页的页号和所在页最小的主键提出来,放入到一个新生成的数据页中,并且给数据也加入层级的概念,这样就可以根据上层的数据页,快速缩小查找范围,加速查找数据页的过程。现在页和页之间看起来就像是一颗树,这个可以加速查找数据页的树,就是常说的b+树索引

除了主键索引,也可以为其他数据表的列(字段)去建立索引,这就是辅助索引

Buffer Pool

应用和磁盘间,加一层缓存,缓存里装的就是索引页和部分数据(先读buffer pool,有对应数据就返回,没数据就去磁盘找)

进程自己维护的Buffer Pool可以定制更多缓存策略,还能实现加锁等各种数据表高级特性,所以有了Buffer Poll,就没必要使用操作系统的文件缓存了。Buffer Pool通过直接IO模式,绕过操作系统的缓存机制,直接从磁盘读取数据

直接IO方式是指绕过操作系统的缓存机制,直接从磁盘中读取到用户态空间缓冲区,避免了数据从磁盘拷贝到内核态缓冲区,再从内核态缓存区拷贝到用户态缓冲区的两次复制,所以大大提升了性能

自适应哈希索引

就算有了Buffer,Poll,要查到某个数据也,也依然要查找B+树,查询复杂度O(lgn).可以使用查询你速度为O(1)的哈希表进行优化,记录每个数据页的查询频率,对于热点数据页,以查询的值为key,数据页地址为value构建哈希表

ChangeBuffer

大部分数据表除了主键索引外,还会加一些辅助索引。那对于这类数据表的写操作,更新完主键索引的数据页之后还需要更新辅助索引页,这样,读取辅助索引页的磁盘IO必然少不了

可以先将要写入的数据收集到一块内存里(这就是ChangeBuffer),等哪天磁盘里的索引页正好被读入Buffer Pool的时候,再将写入数据应用到索引页中,通过这个方式,减少了大量的磁盘IO提升性能

Undo Log

在数据库中有一个叫事物的概(就是可以让多行数据要么同时更新成功,要么同时失败,就是所谓的原子性)。为了实现这一点,我们就知道写数据时每行数据原来长啥样,方便对更新后的数据进行回滚,因此就有了undo log ,更新Buffer Pool数据叶的时候,会用旧数据生成Undo log记录,会用旧数据生成undo log ,存储在bufferpool中的特殊undo log 内存页中,并随着Buffer Pool的刷盘机制,不定时写入到磁盘的Undo log 文件中

Redo Log

将事务中更新数据行的操作都写入到Redo Log Buffer内存中,在事务提交的时候进行redo log刷磁盘,将数据固化到redo log文件中,数据库进程崩溃重启后,就能通过Redo Log File找到历史操作记录重做数据,保证了事务里的多行数据变更,要么都成功,要么都失败

Redo Log File是由顺序写入的,Buffer Pool的内存数据随机分散在磁盘内,顺序写磁盘性能是随机写的几十倍

InnoDB

sql语句如何转成存储引擎的函数接口呢

Server层

本质是sql语句和InnoDB存储引擎的中间层,在server层内提供一个连接管理模块,用于管理来自引用的网络连接,并提供一个分析器用于判断sql语句有没有语法错误,再提供一个优化器,用于根据一定的规则,选择改用什么索引生成执行计划,之后提供一个执行器根据执行计划去调用InnoDB存储引擎的接口函数

binlog是什么

redolog 是环形写的,写入数据多的时候会把最开始写入的删除掉,所以没法完全恢复,只能用来恢复部分最近数据(当然,这部分也是比较大的了)

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

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

相关文章

Nginx 502 Bad Gateway:从 upstream 日志到 FastCGI 超时复盘

Nginx 502 Bad Gateway:从 upstream 日志到 FastCGI 超时复盘 🌟 Hello,我是摘星! 🌈 在彩虹般绚烂的技术栈中,我是那个永不停歇的色彩收集者。 🦋 每一个优化都是我培育的花朵,每一…

Dreamore AI-解读并描绘你的梦境

本文转载自:Dreamore AI-解读并描绘你的梦境 - Hello123工具导航 ** 一、🌙 初识 Dreamore AI:你的智能梦境伴侣 Dreamore AI 是一款超有趣的AI 梦境解析与可视化工具,它巧妙地把梦境解读和图像生成这两大功能融为一体。你只需要…

集合-单列集合(Collection)

List系列集合:添加的元素是有序、可重复、有索引的。Set系列集合:添加的元素是无序、不重复、无索引的。代码:public class A01_CollectionDemo1 {public static void main(String[] args) {/** 注意点:Collection是一个接口&…

写一个 RTX 5080 上的 cuda gemm fp16

1. cpu 计算 fp16 四则运算由于会用到cpu 的gemm 与 gpu gemm 的对比验证,所以,这里稍微解释一下 cpu 计算fp16 gemm 的过程。这里为了简化理解,cpu 中不使用 avx 相关的 fp16 运算器,而是直接使用 cpu 原先的 ALU 功能。这里使用…

web渗透PHP反序列化漏洞

web渗透PHP反序列化漏洞1)PHP反序列化漏洞反序列我们可以控制对象中的值进行攻击O:1:"C":1:{s:3:"cmd";s:8:"ipconfig";}http://127.0.0.1/1.php?xO:1:%22C%22:1:{s:3:%22cmd%22;s:3:%22ver%22;}常见的反序列化魔术方法:…

FPGA学习笔记——SPI读写FLASH

目录 一、任务 二、需求分析 三、Visio图 四、具体分析 五、IP核配置 六、代码 七、实验现象 一、任务 实验任务: 1.按下按键key1,开启读ID操作,将读出来的ID,通过串口发送至PC端显示,显示格式为“读ID:XX-XX-XX…

一句话PHP木马——Web渗透测试中的隐形杀手

文章目录前言什么是"一句话木马"?常见变种与隐藏技巧1. 函数变种2. 加密混淆3. 变量拆分4. 特殊字符编码上传技巧与绕过防御常见上传绕过技巧检测与防御措施1. 服务器配置2. 上传验证3. 代码审计4. Web应用防火墙(WAF)实战案例分析深度思考:安…

房屋租赁系统|基于SpringBoot和Vue的房屋租赁系统(源码+数据库+文档)

项目介绍 : SpringbootMavenMybatis PlusVue Element UIMysql 开发的前后端分离的房屋租赁系统,项目分为管理端和用户端以及房主端 项目演示: 基于SpringBoot和Vue的房屋租赁系统 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上…

C++动态规划——经典题目(下)

上一篇文章没有写全&#xff0c;这篇再补两道题酒鬼#include<bits/stdc.h> using namespace std; int dp[110][10]{0}; int a[1010]{0}; int n,m; int main() {cin>>n;dp[0][0]0;dp[1][0]0;dp[1][1]a[1];for(int i1;i<n;i){cin>>a[i];}for(int i2;i<n;…

介绍Ansible和实施Ansible PlayBook

第一章 介绍Ansible1. ansible的特点是什么&#xff1f;a. ansible使用yaml语法&#xff0c;语言格式简洁明了。b. ansible不需要代理&#xff0c;仅仅通过SSH远程连接就可以控制受管主机&#xff0c;是一种非常便捷、安全的方法。c. Ansible的功能强大&#xff0c;可以利用ans…

ComfyUI驱动的流程化大体量程序开发:构建上下文隔离的稳定系统

ComfyUI驱动的流程化大体量程序开发&#xff1a;构建上下文隔离的稳定系统 在现代软件工程中&#xff0c;随着程序体量的不断增长&#xff0c;上下文污染&#xff08;Context Pollution&#xff09;和状态依赖混乱已成为导致系统不稳定、调试困难、维护成本高昂的核心问题。尤…

基于SpringBoot的协同过滤余弦函数的美食推荐系统(爬虫Python)的设计与实现

基于SpringBootvue的协同过滤余弦函数的个性化美食(商城)推荐系统(爬虫Python)的设计与实现 1、项目的设计初衷&#xff1a; 随着互联网技术的快速发展和人们生活水平的不断提高&#xff0c;传统的美食消费模式已经无法满足现代消费者日益个性化和多样化的需求。在信息爆炸的时…

机器视觉学习-day19-图像亮度变换

1 亮度和对比度亮度&#xff1a;图像像素的整体强度&#xff0c;亮度提高就是所有的像素加一个固定值。对比度&#xff1a;当对比度提高时&#xff0c;图像的暗部与亮部的差值会变大。OpenCV调整图像亮度和对比度的公式使用一个&#xff1a;代码实践步骤&#xff1a;图片输入→…

redis详解 (最开始写博客是写redis 纪念日在写一篇redis)

Redis技术 1. Redis简介 定义与核心特性&#xff08;内存数据库、键值存储&#xff09; Redis&#xff08;Remote Dictionary Server&#xff0c;远程字典服务&#xff09;是一个开源的、基于内存的高性能键值存储数据库&#xff0c;由 Salvatore Sanfilippo 编写&#xff0c;用…

【MD文本编辑器Typora】实用工具推荐之——轻量级 Markdown 编辑器Typora下载安装使用教程 办公学习神器

本文将向大家介绍一款轻量级 Markdown 编辑器——Typora&#xff0c;并详细说明其下载、安装与基本使用方法。 引言&#xff1a; MD 格式文档指的是使用 Markdown 语言编写的文本文件&#xff0c;其文件扩展名为 .md。 Markdown 是一种由约翰格鲁伯&#xff08;John Gruber&am…

Vue2+Element 初学

大致实现以上效果 一、左侧自动加载菜单NavMenu.vue 菜单组件&#xff0c;简单调整了一下菜单直接的距离&#xff0c;代码如下&#xff1a;<template><div><template v-for"item in menus"><!-- 3、有子菜单&#xff0c;设置不同的 key 和 inde…

Shell编程知识整理

文章目录一、Shell介绍1.1 简介1.2 Shell解释器二、快速入门2.1 编写Shell脚本2.2 执行Shell脚本2.3 小结三、Shell程序&#xff1a;变量3.1 语法格式3.2 变量使用3.3 变量类型四、字符串4.1 单引号4.2 双引号4.3 获取字符串长度4.4 提取子字符串4.5 查找子字符串五、Shell程序…

AI与低代码的激情碰撞:微软Power Platform融合GPT-4实战之旅

引言 在当今数字化飞速发展的时代,AI 与低代码技术正成为推动企业变革的核心力量。AI 凭借其强大的数据分析、预测和决策能力,为企业提供了智能化的解决方案;而低代码开发平台则以其可视化、快速迭代的特性,大大降低了应用开发的门槛和成本。这两者的结合,开启了一场全新的…

豆包1.6+PromptPilot实战:构建智能品牌评价情感分类系统的技术探索

豆包1.6PromptPilot实战&#xff1a;构建智能品牌评价情感分类系统的技术探索 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般绚烂的技术栈中&#xff0c;我是那个永不停歇的色彩收集者。 &#x1f98b; 每一个优化都是我培育的花朵&#xff0c;…

如何在VsCode中使用git(免敲命令版本!保姆级!建议收藏!)

目录 文章目录 前言 一、电脑安装git 二、在vscode安装git插件 三、克隆仓库 四、提交代码 五、创建分支、切换分支、合并分支 1、创建分支 2、切换分支 3、合并分支 六、创建标签和推送标签 七、解决冲突 八、拉取、抓取仓库 九、Reivew代码 总结 前言 随着Vscode的推出和普及…