当前位置: 首页 > news >正文

数据库 外存储器读写数据物理过程

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1、计算机的存储设备

    计算机存储设备一般分为两种:内存储器(main memory)和外存储器(external memory)。 内存存取速度快,但容量小,价格昂贵,而且不能长期保存数据(在不通电情况下数据会消失)。

    外存储器—磁盘是一种直接存取的存储设备(DASD)。它是以存取时间变化不大为特征的。可以直接存取任何字符组,且容量大、速度较其它外存设备更快。

2、磁盘的结构

    磁盘是一个扁平的圆盘(与电唱机的唱片类似)。盘面上有许多称为磁道的圆圈,数据就记录在这些磁道上。磁盘可以是单片的,也可以是由若干盘片组成的盘组,每一盘片上有两个面。如下图中所示的6片盘组为例,除去最顶端和最底端的外侧面不存储数据之外,一共有10个面可以用来保存信息。

cccf8e4a21f964efd991acf2331b2de1207.jpg

    当磁盘驱动器执行读/写功能时。盘片装在一个主轴上,并绕主轴高速旋转,当磁道在读/写头(又叫磁头) 下通过时,就可以进行数据的读 / 写了。

    一般磁盘分为固定头盘(磁头固定)和活动头盘。固定头盘的每一个磁道上都有独立的磁头,它是固定不动的,专门负责这一磁道上数据的读/写。

    活动头盘 (如上图)的磁头是可移动的。每一个盘面上只有一个磁头(磁头是双向的,因此正反盘面都能读写)。它可以从该面的一个磁道移动到另一个磁道。所有磁头都装在同一个动臂上,因此不同盘面上的所有磁头都是同时移动的(行动整齐划一)。当盘片绕主轴旋转的时候,磁头与旋转的盘片形成一个圆柱体。各个盘面上半径相同的磁道组成了一个圆柱面,我们称为柱面 。因此,柱面的个数也就是盘面上的磁道数。

 

3、磁盘的读写原理

    磁盘上数据必须用一个三维地址唯一标示:柱面号、盘面号、块号(扇区?)(磁道上的盘块)。

    读/写磁盘上某一指定数据需要下面3个步骤:

    (1)首先移动臂根据柱面号使磁头移动到所需要的柱面上,这一过程被称为定位或查找 。

    (2)如上图11.3中所示的6盘组示意图中,所有磁头都定位到了10个盘面的10条磁道上(磁头都是双向的)。这时根据盘面号来确定指定盘面上的磁道。

    (3)盘面确定以后,盘片开始旋转,将指定块号的磁道段移动至磁头下。

    经过上面三个步骤,指定数据的存储位置就被找到。这时就可以开始读/写操作了。

    访问某一具体信息,由3部分时间组成:

    (1)查找时间(seek time) Ts: 完成上述步骤(1)所需要的时间。这部分时间代价最高,最大可达到0.1s左右。

    (2)等待时间(latency time) Tl: 完成上述步骤(3)所需要的时间。由于盘片绕主轴旋转速度很快,一般为7200转/分(电脑硬盘的性能指标之一, 家用的普通硬盘的转速一般有5400rpm(笔记 本)、7200rpm几种)。因此一般旋转一圈大约0.0083s。

    (3)传输时间(transmission time) Tt: 数据通过系统总线传送到内存的时间,一般传输一个字节(byte)大概0.02us=2*10^(-8)s

    磁盘读取数据是以盘块(block)为基本单位的。位于同一盘块中的所有数据都能被一次性全部读取出来。而磁盘IO代价主要花费在查找时间Ts上。因此我们应该尽量将相关信息存放在同一盘块,同一磁道中。或者至少放在同一柱面或相邻柱面上,以求在读/写信息时尽量减少磁头来回移动的次数,避免过多的查找时间Ts。

    所以,在大规模数据存储方面,大量数据存储在外存磁盘中,而在外存磁盘中读取/写入块(block)中某数据时,首先需要定位到磁盘中的某块,如何有效地查找磁盘中的数据,需要一种合理高效的外存数据结构,就是下面所要重点阐述的B-tree结构,以及相关的变种结构:B+-tree结构和B*-tree结构。

 

4、计算数据表占用的磁盘块情况

    查询数据库的数据块大小

mysql> show variables like '%page_size%';

+------------------+-------+

| Variable_name    | Value |

+------------------+-------+

| innodb_page_size | 16384 |

| large_page_size  | 0     |

+------------------+-------+

2 rows in set (0.00 sec)

    计算单行数据的大小:根据各字段的数据类型所占的字节数累加计算总的字节(B)数R(KB=1024B),由此可以计算出表的数据块因子brf=innodb_page_size/R

N = r/brf

eg:数据表有记录r=5000000行,每条记录R=204B,brf=16384/204=80,占用的数据块N=5000000/80=62500

MySQL里的指针按表大小的不同分别可能是 2, 3, 4 或 5 个字节。

 

参考资料

http://blog.csdn.net/iefreer/article/details/15815455

 

转载于:https://my.oschina.net/peakfang/blog/2875285

相关文章:

  • android四大组件之Service 简单音乐播放器
  • 已安装pymysql 但Pycharm 中import pymysql出错的解决方案
  • 关于字符串的倒置
  • 实时计算Flink——独享模式——Batch功能介绍
  • jQuery页面加载初始化的3种方法
  • MetaMask/provider-engine-1
  • canvas-star7.html
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • ubuntu 安装配置ssh
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • idea tomcat启动时候中文乱码、问号
  • 如何从CRM中获益?看专家怎么说!
  • ECharts初使用,从后台得到数据源
  • linux 使用ssh到远端并且使用while的坑
  • [置顶] 开源史上最成功的8个开源产品
  • 0基础学习移动端适配
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • ECMAScript6(0):ES6简明参考手册
  • JavaScript 基本功--面试宝典
  • java中具有继承关系的类及其对象初始化顺序
  • Js基础知识(一) - 变量
  • PHP那些事儿
  • React的组件模式
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 前端临床手札——文件上传
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 追踪解析 FutureTask 源码
  • 1.Ext JS 建立web开发工程
  • mysql面试题分组并合并列
  • NLPIR智能语义技术让大数据挖掘更简单
  • 阿里云API、SDK和CLI应用实践方案
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​VRRP 虚拟路由冗余协议(华为)
  • ###项目技术发展史
  • #Linux(帮助手册)
  • #NOIP 2014# day.1 T2 联合权值
  • (生成器)yield与(迭代器)generator
  • (译) 函数式 JS #1:简介
  • (转)IOS中获取各种文件的目录路径的方法
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .describe() python_Python-Win32com-Excel
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Core 项目指定SDK版本
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .sh 的运行
  • [<事务专题>]
  • [2016.7 day.5] T2
  • [20190416]完善shared latch测试脚本2.txt
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [ffmpeg] x264 配置参数解析
  • [hive小技巧]同一份数据多种处理
  • [java刷算法]牛客—剑指offer链表有环的入口、反转链表、合并排序链表