多路查找树

  • 计算机的存储
    • 内存
    • 硬盘
      • 硬盘基本构成
      • 硬盘存储的优缺点
      • 磁盘的预读
  • 二叉树与B树
    • 二叉树读取数据
    • B树读取数据

计算机的存储

计算机中的存储大致可以分为内存硬盘存储,硬盘还能继续分为机械硬盘与固态硬盘。

内存

内存我们相对比较熟悉,可以总结出它的优缺点:
优点:使用电信号来保存信息,不存在机器操作,所以访问速度非常快。
缺点:造价高,断电后数据丢失。一般作为CPU的高速缓存。

硬盘

硬盘基本构成


机械硬盘的基本构成如下:

  • spindle:主轴
  • surface:盘面
  • track:磁道
  • sector:扇区
  • gap:间隔

  • arm:传动臂
  • read/write head:磁头

硬盘中的数据存在扇区(sector)中,硬盘是怎么读取数据的呢?
硬盘上有一个传动臂,传动臂上面有磁头,硬盘就是通过磁头来读取扇区中的数据的
传动臂可以在一定幅度内摆动,它的摆动带起了磁盘的转动,转动速度一般分为 7200转/分钟5400 转/分钟磁盘的转动结合传动臂的摆动,就可以让磁头读取盘面上任何一个扇区的内容。

硬盘存储的优缺点

经过上面的介绍,我们可以得知硬盘存储的优缺点如下:
优点:造价低,容量大,断电后数据不丢失。
缺点:由于存储介质的特性,再加上机械运动耗费时间(传动臂的摆动与磁盘的转动),所以磁盘的读取速度较慢

即使是固态硬盘,它的读取速度比机械硬盘要快,但是依旧远远低于内存中的读取速度。

磁盘的预读

由于磁盘的读写速度问题,要尽量减少磁盘I/O操作。所以磁盘往往不是严格按需读取,而是每次都会预读,即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。
这样做的理论依据是计算机科学中著名的局部性原理: 当一个数据被用到时,其附近的数据也通常会马上被使用。

预读的长度一般为 页(page) 的整倍数。

页:
页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每个存储块称为一页(在许多操作系统中,页得大小通常为4k),主存和磁盘以页为单位交换数据。

文件系统及数据库系统的设计者利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入

二叉树与B树

二叉树读取数据


首先我们来思考一下,如果用二叉树存储大量数据的话会怎么样?

当数据量特别大的时候,二叉树的高度会非常非常高,并且由上面的介绍可知:磁盘每次会读取一个页,而一般一个页为一个节点的大小。因此,要在二叉树中读取大量的数据的话,由于树的高度太高,节点数太多,而每一个节点都需要一次I/O操作,I/O操作又是非常费时的,由此可见,读取效率是特别低的。

由此,我们引出了B树。

B树读取数据

由于每个节点会进行一次I/O操作,那么我们要减少I/O操作的次数,很明显,我们需要减少节点的数量,因此我们可以通过拓展节点的方式来减少节点的数目。

很明显,上上张图中的二叉树有31个节点,我们要读取某个数据可能要经过5次I/O操作,而在下面的B树中,我们只需要经过2次I/O操作。

将树的度M设置为1024,在600亿个元素中最多只需要4次I/O操作就可以读取到想要的元素。

【Java数据结构】计算机中数据的存储方式(为什么要使用B树)相关推荐

  1. opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类

    opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类 参考文章: (1)opengl中的Floatbuffer和 ...

  2. Matlab中数据的存储方式

    简介 MATLAB提供了丰富的算法以及一个易于操作的语言,给算法研发工作者提供了很多便利.然而MATLAB在执行某些任务的时候,执行效率偏低,测试较大任务量时可能会引起较长时间的等待.未解决这个问题, ...

  3. 计算机中数据的编码方式

    一.整数的表示 由于计算机只能识别二进制的0和1,在存储数据时就涉及到了对数据的编码问题,计算机中对整数的编码有两种不同的方式,分别为: 1. 只能表示非负数,此种类型数据称为无符号类型 即 unsi ...

  4. 赶紧进来修内功--- 详细讲解在内存中数据的存储方式(整形篇)

    本文详细介绍了所有整形家族类型的取值范围;整形数据在内存中的存储方式(大小端存储方式)以及对应的解析,介绍讲解判断当前机器的存储方式代码练习题,掌握后编程基础更进一步牢固!!! 数据的存储 一.整形数 ...

  5. 浏览器中数据的存储方式

    cookie 解决问题 http 请求是无状态的,即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不知道当前请求是哪个用户. cookie 第一次登录后服务器返回一些数据(cookie)给 ...

  6. 数据结构Java09【计算机中数据的存储原理、2-3树的插入原理、B树和B+树】

    学习地址:[数据结构与算法基础-java版]                  

  7. c语言中负数的读取和存储,C语言中负数的存储方式

    详细介绍负数的文章: https://blog.csdn.net/daiyutage/article/details/8575248 1.以char类型举例,其取值范围是 -128 ~ 127,即-2 ...

  8. 【转载】数据在计算机中是如何存储的

    hello,小伙伴们好,我是江湖人送外号[道格牙]的子牙老师. 有几天没更新文章了哈.因为手写JVM小班已经开课了,需要花时间备课,录视频试讲,解答学员问题-比较耗时间.今天就来一篇超实用超硬核的文章 ...

  9. 数据在计算机中是如何存储的

    hello,小伙伴们好,我是江湖人送外号[道格牙]的子牙老师. 这篇文章,咱们讨论的问题是数据在计算机中是如何存储的.为什么要讨论这个问题呢?因为在手写JVM的过程中,我们需要实现所有的数据类型,比如 ...

最新文章

  1. 关于类、方法、对象(实例):静态方法
  2. UPX命令行压缩、反汇编动画进入、OllyDbg搜索命令功能
  3. 位置参数和关键字参数小记
  4. ubuntu+ngrok内网穿透+Flask部署以及frp稍微提一下
  5. linux运行好麻烦,解析用Linux非常困难、必须用命令行、很老又丑陋及无法运行游戏...
  6. php 设置agent,限制某个目录禁止解析php及user_agent、php相关配置
  7. 字符串的相关方法 2101 0310
  8. python读取hdf5文件_科学网—python读hdf5文件 - 钱磊的博文
  9. mysql 按小时统计
  10. 仅为代码实际运行资源付费 解构国内首个函数计算
  11. 饿了么的架构设计及演进之路
  12. 小红帽 oracle,Linux+5+红帽子企业版安装Oracle9
  13. VC运行库安装错误0x80240017解决过程
  14. 计算机毕业后的打算英语作文,毕业后规划英语作文
  15. vue里面动态渲染图片?
  16. 使用 PetaLinux 自定义 ZynqMP 平台
  17. 辰视智能主办的第二届智能制造高峰论坛昨日在深圆满举行
  18. Jupyter Notebook打开Python文件的方法
  19. 一年中最后一个月的最后一天说说_最后一天的说说_最后一天的心情说说大全...
  20. GOTS——商品中的化学品控制

热门文章

  1. 怎么看待苹果公司要求分成微信、知乎打赏32%?
  2. sql server 转发_SQL Server中的转发记录性能问题
  3. TCP/IP学习笔记(3)----IP,ARP,RARP协议
  4. Only a type can be imported. xxxx resolves to a package
  5. 支付弹出窗口被拦截解决办法
  6. 【 D3.js 入门系列 --- 4 】 怎样使用scale(比例)
  7. POJ 3122 Pie 二分枚举
  8. 《那些年啊,那些事——一个程序员的奋斗史》——122
  9. 小e的每日一画 之 飞毯旅行记 20071231
  10. svn--Eclipse版本的安装步骤