60 mysql 存储引擎之静态格式 MyISAM

news2024/11/24 16:57:59

前言

我们这里来看一下 MyISAM 存储引擎, 我们常见的那些 user, db, table_priv, proc 等等是基于 MyISAM

这是我们经常会提及的 两种持久化的存储引擎之一, 一是 MyISAM存储引擎, 另外一个是 InnoDB存储引擎 

我们这里来看一下 MyISAM 中固定长度的数据表的相关处理 

 

mysql. tables_priv 的表结构创建如下 

CREATE TABLE `tables_priv` (
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Grantor` char(93) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `Table_priv` set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') CHARACTER SET utf8 NOT NULL DEFAULT '',
  `Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 NOT NULL DEFAULT '',
  PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`),
  KEY `Grantor` (`Grantor`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Table privileges'

 

 

基于 固定长度MyISAM 的数据表的数据输出 

执行 “select * from tables_priv where Table_name = 'tz_test';”

外层读取的时候 mi_read_rnd_static_record 传入的偏移为 info->nextpos

然后接下来的 mi_read_rnd_static_record 中进行迭代的时候 更新了 info->nextpos

3786335e7e31dc7e72010c6418629592.png

 

对于固定长度的 MyISAM 的数据表, 迭代 info->nextpos 的方式如下 

是直接增量量更新, 因为记录的长度是固定的, 因此增加这个固定的长度即可 

然后 这里是 使用缓存的读取, 没有缓存的读取, 就是直接读取 MyISAM 表的数据文件 

622f4647b217be4587efa711746f49b3.png

 

读取的迭代处理如下, 这里使用的 READ_CACHE_USED, 这里的使用更倾向于作用为 BUFFER 

第一次读取填充 可读取的字节序列[min(文件大小, buffer的可写空间)] 到 buffer 

然后 后面的再缓冲空间能够提供数据的时候, 直接拷贝缓冲空间的数据, 缓冲空间不够了, 再进行读取 

a37c3c0080001f7fc62afac8cdcdea8c.png

 

第一次读取的时候, 读取了 max_length 2841 个字节的数据到 buffer

max_length 的计算是取自 文件大小 和 buff可写空间 的较小值

然后后面第二次, 第三次读取就是从 这个 buffer 中拷贝数据到 上层 buf 中了 

这里的读取是 seek + read 来实现读取 目标偏移 的 max_length 个字节 

d0f5cf374a0ea03dac57688b5c35b4c7.png

 

第二条记录的读取, 可以看到当前 偏移是 947, 也就是 第二条记录的开始

然后此时 因为 buffer 中已经读取了 2841, 然后 可以直接使用 buffer 的数据 

这里是直接使用的 memcpy 拷贝, “memcpy(Buffer, info->read_pos, Count)”

第三条记录的读取, 同样 

48c59a8a67c0bbfb7bfc36be3edadcbe.png

 

假设是 READ_CACHED_USED 为 false 的场景下

是直接使用 pread, 来实现的 携带偏移 的读取, 偏移为 0, 读取长度为 947, 一条记录的数据 

和 READ_CACHED_USED 的差距 一眼就能看出来了吧, 是否使用了 buffer

6787a116514a2476ef4d8aab5f816023.png

 

 

基于 固定长度MyISAM 的数据表的数据行  

数据行 的信息如下

21876ebc6942dc63c61a4cd5369d0515.png

 

 

基于 固定长度MyISAM 的数据表的数据录入  

执行 sql 如下, 在 mysql.tables_priv 中增加一条记录, 我们来看一下 这个过程

create user 'tz_test_001'@'%' identified by 'tz_test';
grant select on test_02.tz_test_02 to 'tz_test_001'@'%';
drop user 'tz_test_001';

 如果没有将新增的数据放到最后的需求, 则将数据替换删除记录 

00afaabe7439b7febac4a9ed70390dea.png

 

否则是 带缓冲的写, 或者 直接写出数据到 MyISAM 的数据表的数据文件[通过 pwrite]  

2e6a18c6abe15a11ae059be0ce58eeb8.png 

 

 基于 固定长度MyISAM 的数据表的数据删除

执行 sql 如下, 在 mysql.tables_priv 中删除一条记录, 我们来看一下 这个过程

create user 'tz_test_001'@'%' identified by 'tz_test';
grant select on test_02.tz_test_02 to 'tz_test_001'@'%';
drop user 'tz_test_001';

记录的删除处理如下, 将原来该记录的数据覆盖为 标记删除 + 下一个删除记录的索引, 总共 7 字节 

然后 info->s->state.dellink 可以构成一个已经删除的元素的链表 

根据 info->lastpos 可以知道, 我们这里删除的是 第四条记录

7a525c3f5ef4b6d9a749170190ba7959.png

 

 

 

 

 

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

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

相关文章

振动分析-35-滚动轴承全生命周期模式下的时域特征对比(实战)

文章目录 1 数据集概述1.1 轴承参数1.2 运行工况1.3 数据详情2 加载显示全量数据2.1 数据提取2.2 全寿命数据可视化3 每次测量的时域特征3.1 计算时域特征的函数3.2 水平和垂直对比35Hz12kN3.3 水平和垂直对比37.5Hz11kN3.4 水平和垂直对比40Hz10kN3.5 结果分析4 参考附录1 数据…

单链表速通后续!

目录 1>>闲话 2>>头删 3>>查找 4>>在指定位置之前插入 5>>删除指定结点 6>>指定位置之后插入 7>>删除指定位置之后的结点 特别思考: 8>>销毁单链表 Slist.h Slist.c test.c 9>>总结 1>>闲话…

C++一个很好的计时方法

C一个很好的计时方法 //记时LARGE_INTEGER t1;LARGE_INTEGER t2;LARGE_INTEGER f;QueryPerformanceFrequency(&f);QueryPerformanceCounter(&t1);Sleep(100);QueryPerformanceCounter(&t2);double time;time (double)(t2.QuadPart-t1.QuadPart)/(double)f.QuadPar…

机器学习篇-day06-集成学习-随机森林 Adaboost GBDT XGBoost

一. 集成学习思想 集成学习 原理 集成学习是机器学习中的一种思想,它通过多个模型的组合形成一个精度更高的模型,参与组合的模型称为弱学习器(基学习器)。训练时,使用训练集依次训练出这些弱学习器,对未知…

Chromium 如何查找前端 window.navigator, window.screen等对象在c++中的实现

以前端Navigator 对象为例: 1、直接在vscode里面搜索"Navigator" 过滤条件*.idl,这样可以搜到Navigator.idl对象文件。 2、打开Navigator.idl 可以看到平级目录对应的Navigator.h 和Navigator.cc定义 3、Navigator.idl会在out\Debug\gen\thir…

【系统集成中级】线上直播平台开发项目质量管理案例分析

【系统集成中级】线上直播平台开发项目质量管理案例分析 一、案例二、小林在项目质量管理中存在的问题(一)计划阶段缺失(二)测试用例编制与执行问题(三)质量管理流程问题(四)质量保证…

全金属的两足机器人钢铁侠开发

比较喜欢钢铁侠和终结者,其全金属的机身,反射着金属的光泽,透露出令人惊叹的美感。 这也是一个全金属机器人,周身有十几片铝片和四个舵机组成,可以叫他钢铁侠或者终结者。这么笨,这么小,可以说是…

【笔记】shell基本使用,超全,更新ing

一、shell的执行 1、执行命令但不输出结果到命令行 [rootlocalhost ~]$ command >/dev/null2、多命令顺序执行 命令 1;命令 2 #顺序执行命令,命令间无逻辑关联 命令 1&&命令 2 #命令1正确执行才执行命令2,否则不执行 命令 1||命令 2 #命令…

记录IDEA编译报错:不支持发行版本

一共四个地方,版本均保持一致

成分喵(一键查询食品/化妆品成分)

一款免费可以一键查询各大品牌食品和化妆品成分神器,无论是拍照、扫码又或者是商品链接都能查成分,还能根据成分查商品,而且各种成分的功效、作用和安全性都会一一标注出来,包括是否对身体有害、敏感风险等级等等。 下载&#xf…

大模型应用开发速成:一本通向LLM专家之路

大家好,今天给大家推荐一本大模型应用开发入门书籍《大模型应用开发极简入门》,本书对很多AI概念做了讲解和说明! 朋友们如果有需要 《大模型应用开发极简入门》,扫码获取~ 本书主要讲解了以下几个方面的大模型技术: G…

技术发明一等奖!FISCO BCOS研究成果荣获CCF权威认可

近日,中国计算机学会(CCF)正式揭晓了2024年度“CCF科技成果奖”的获奖名单。FISCO BCOS开源工作组组长单位微众银行与清华大学合作的“安全可控高性能区块链基础平台”项目,凭借卓越的技术创新与显著的社会经济效益,荣…

MFC项目如何使用hiredis库连接redis

如何在windows平台使用c连接redis 1. 下载hiredis的vs工程文件2. 使用vs2022编译hiredis3.项目中调用4. 集群连接5. 简单的封装下 最近需要在windows PC终端读取redis数据。我这里使用hiredis连接redis. 工程是vs2022开发的。 注意:如果是使用的‘hiredis’就不能在…

【鸟类识别系统】Python+卷积神经网络算法+人工智能+深度学习+ResNet50算法+计算机课设项目

一、介绍 鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在…

ORA-65096:公用用户名或角色名无效

CREATE USER DATA_SHARING IDENTIFIED BY "Ab2"; Oracle建立用户的的时候,可能会出现一直提示 ORA-65096:公用用户名或角色名无效; 我查了一下,好像是 oracle 12版本及以上版本的特性,用户名必须加c##或者C##前缀才能创…

对ElementPlus的el-select二次封装,添加分页和搜索功能,实现一个自定义的下拉选择框

组件展示效果图 在 Vue3 的 elementPlus项目中,我们经常需要使用下拉选择框 (el-select) 来展示大量数据。然而,默认情况下 el-select 不支持分页和搜索功能。本文将介绍如何通过二次封装 el-select 组件来实现这一需求,并使用自定义的 Hook …

一周热门|OpenAI 回击马斯克:为了自己的竞争优势,不断骚扰我们;微软、清华团队提出 Diff Transformer

「一周热门」将从【企业动态】【技术前瞻】【政策法规】【专家观点】四部分,带你快速跟进大模型行业热门动态。 企业动态 OpenAI 回击马斯克:为了自己的竞争优势,他不断骚扰我们 日前,OpenAI 指控马斯克在一场法律诉讼中对其进行…

谷歌浏览器 文件下载提示网络错误

情况描述: 谷歌版本:129.0.6668.90 (正式版本) (64 位) (cohort: Control)其他浏览器,比如火狐没有问题,但是谷歌会下载失败,故推断为谷歌浏览器导致的问题小文件比如1、2M会成功,大…

基于Transformer的诗句生成

基于Transformer的诗句生成 前言相关介绍Transformer一、基本原理与结构二、关键技术三、应用领域四、优缺点 Transformer应用:诗句生成优缺点 前提条件实验环境基于Transformer的诗句生成准备数据集读取数据集分割数据集设置相关参数创建自己DataSet对象定义网络模…

双十一速购清单!如何才能挑到性价比高的宠物空气净化器

对于很多上班族而言,平时都不敢大手大脚的花钱,甚至很想将一份钱掰成两份来用,所以双十一是很多人都不会错过的购物狂欢节。 当然,我这个996的社畜也一样,而且我还养了一只爱掉毛的猫咪,每天下班回去都看到…