首页 > 数据库 >【Java】【数据库】B树

【Java】【数据库】B树

时间:2022-12-10 16:14:09浏览次数:64  
标签:Java 数据库 内存 IO 磁盘 节点 指针

B-树的形式

(B-树就是B树, 而且'-'是一个连接符号,不是减号。)
B树的结构如下
B树的结构
不同于B+树(关于B+树,我的这篇博客里有写:B+树)的一些特点:

  • 数据 \(K_i\) 左边的树不会将 \(K_i\) 包括在内,即如上图第二层节点的G就不在它左边指针指向的节点\([D,E,F]\)中。
  • 搜索有可能在非叶子节点结束,最好的情况下O(1)就能找到数据。
  • 它的所有叶节点均为空,而B+树的叶节点却是一些\(<数据,指针>\)组成的。
  • B+树的叶节点有链指针,而B树没有。
  • B树的索引值和具体data都在每一个节点里面,如下图:
    B树的索引值和具体data都在每一个节点里面

为什么用B树?红黑树,AVL树不快吗?

这些树在一般情况下查询性能非常好,但是数据量非常大的时候,内存不够用,大部分数据只能存放在磁盘上,而访问内存和外存的时间差了5个数量级,磁盘读取时间远超数据在内存中的比较时间,使得程序大部分时间会被阻塞在磁盘IO上。
这时候就迫切需要一种数据结构,它可以减少IO次数,B-树就这样被设计出来。

B+树比B树好在哪里?

  • B+树的叶节点有链指针,可以很好的利用空间局部性原理
    (\(空间局部性原理:如果一个存储器某个位置被访问,那么它附近的位置也将会被访问\))
  • B+树更适合外部存储。因为内节点没有data域,只有key的副本,所以每个节点能够索引的范围更大更精确,因为磁盘的IO数据大小是固定的,所以B+树单次能IO更多的信息量,相对B树来说更能减少IO次数。

标签:Java,数据库,内存,IO,磁盘,节点,指针
From: https://www.cnblogs.com/DXD-blog/p/16971667.html

相关文章

  • java 接口(interface)
    接口的作用:1.接口就是约束,它可以定义一些方法,让不同的人实现。2.接口不能被实例化,接口中没有构造方法。3.接口可以实现多个通过implement关键字去实现,实......
  • 小新学Java16-【缓冲流、转换流、序列化流】
    一、缓冲流1.1概述缓冲流,也叫高效流,是对4个基本的Filexxx流的增强,所以也是4个流,按照数据类型分类︰字节缓冲流︰BufferedInputStream,BufferedoutputStream字符......
  • 告警中心清空相关的数据库表
    abf库表1:city_manage_event_collection表2:sfe_city_case_collectioncvs-ca库表1:ca_case表2:ca_case_process表3:ca_co_case_push表4:ca_event_typews-......
  • Django框架:2、静态文件配置、form表单、request对象、pycharm链接数据库、django链接
    今日内容详细静态文件配置1.编写一个用户登录页面2.静态文件不怎么经常改变的文件主要针对html文件所使用的到的各种资源 css文件、js文件、img文件、第三方框架文......
  • 静态文件配置,pycharm链接数据库,django链接数据库 ORM
    静态文件配置​ 不经常变化的软件,主要针对html文件所使用到的各种资源eg:css文件、js文件、img文件、第三方框架文件。django针对静态文件资源需要创建一个目录统一存......
  • 瀚高数据库专用版建库语句
    瀚高数据库建库语句#第一步#psql第一个参数是数据库第二个是用户. #为了简化期间,建议用户,表空间,架构设置相同.psqlhighgo sysdbacreateusermyapp2206passwo......
  • javascript: addEventListener对事件冒泡和事件捕获的处理演示(chrome 108.0.5359.98)
    一,js代码<html><head><metacharset="utf-8"/><title>测试</title></head><bodystyle="padding:0px;margin:0px;"><buttonid="btn">点击</button>......
  • Java网络编程总结
    一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,......
  • java中this的使用
    本文主要讲述java中this的使用示例1,代码如下:publicclassContructorDetail{publicstaticvoidmain(String[]args){Personp=newPerson("Tom",18......
  • Java之工作日的计算
    业务开发中,若要求获取下一个工作日或上一个工作日,则可使用以下Java类。packagecom.cmit.kapok.system.utils;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;imp......