红黑树、B+Tree、B—Tree

红黑树

B-Tree

这三个通常都是把内存全部加载到内存里,然后再内存中进行处理的,数据量通常不会很大。

内存一般容量都在GB级别,比如说现在常见的4G、8G或者16G。

如果要处理的数据规模非常大,大到内存根本存不下的时候。这个时候只能先存到硬盘里,硬盘呢

容量又比内存大的多,因为没有办法把大规模的数据读到内存里,所以只能分批次的把需要处理的

数据从硬盘调到内存里,进行进一步处理。

操作数据是需要CPU去执行相关的指令的,cpu是不能直接和硬盘进行交互的。硬盘里的数据必需

先调到内存里头,才能进一步和CPU进行交互,进行数据处理。可以叫做一次硬盘I/O,然而这个

访问速度是非常慢的,内存单次的访问时间是纳秒级别,但是硬盘的访问的毫秒级的,1毫秒等于

100万纳秒。

降低树高就可以减少非常耗时的硬盘操作。

B+Tree

节点之间是用指针连接成了一个链表的结构

B+Tree常被用作数据库中的索引结构,那实际上每个元素都包含指向对应记录存储地址的指针。那此时呢,结点内的元素又被称为关键字(key),通过关键字中包含的指针可以索引到数据库中的某一条记录。

B+Tree相当于数据表中的一个索引,可以通过关键字,快速定位到数据表中的某一条记录,实际

上关键字的指针指向的是数据文件中这一条(id=23)这一条的地址,其他关键字也是一样的都在最

下面画的那一排下面记录呢。B+Tree本身也是作为一个索引文件存储在硬盘里的,但在实际应用

中不一定非要以ID作为关键字,也可以将姓名作为关键字等(可以给同一个数据表构建多个不同关

键字的索引来应对各种各样的查询需求)。

因为叶子节点包含了所有的关键字,所以要顺序查找所有的关键字的记录,就像遍历链表一样,

非常的方便。如果要随机查找某一关键字,也需要挨个遍历去寻找呢?那么B+Tree的叶子节点不

就是解决这个问题吗?可以帮助我们快速定位到叶子节点某一关键字,相当于给叶子节点建立的索

引,目的就是实现以log级别的复杂度,去查找叶子节点上的某一关键字记录。

所以整个B+Tree是一套多级索引结构,目的就是为了加速查询的速度。我们只需要通过指向根节

点的指针,就可以以log级别的复杂度查找到指定关键字对应的记录。

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

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

相关文章

如何简单判断某个port是否被防火墙block

在存储系统中经常遇到要上传一些code到存储中做升级,但是通过客户网络死活搞不定的情况,其实很多时候是由于客户内部有防火墙的设置,某些端口是被block屏蔽的。本文就介绍几个命令用来快速判断是否这些port被客户做了block。如果确认是被bloc…

Spring Boot 集成 swagger 3.0 指南

Spring Boot 集成 swagger 3.0 指南 一、Swagger介绍1.springfox-swagger 22.SpringFox 3.0.0 发布 二、Spring Boot 集成 swagger 3.01. 添加Maven依赖2. 创建配置类配置Swagger2.1 创建SwaggerConfig 配置类2.1 创建TestInfoConfig信息配置类 3. 在你的Controller上添加swagg…

【思源笔记】思源笔记配置S3同步

本文首发于 ❄️慕雪的寒舍 文章目录 1. 写在前面2. 什么是思源笔记的S3/WEBDAV同步?2.1. 说明2.2. 思源的同步配置和工作空间2.3. 什么是S3协议? 3. 配置思源S3同步3.1. 初始化数据仓库密钥3.2. 思源S3同步界面3.3. 配置七牛云KODO3.4. 如何将同步配置导…

以GD32F103C8T6为例的核心板原理图PCB绘制学习笔记简单总结

目录 GD32F103C8T6核心板 设计流程 基础知识 部分原理图解析 排针连接 (H1 - PZ254V-12-8P): 晶振 封装 基础知识 C0603封装 C0805 F1210封装 保险丝 L0603 贴片电感 LED-0603 R0603 HDR-TH_8P-P2.54-V-M-R2-C4-S2.54 排针 按键(SW-SMD-T6X…

Python(PyTorch)物理变化可微分神经算法

🎯要点 🎯使用受控物理变换序列实现可训练分层物理计算 | 🎯多模机械振荡、非线性电子振荡器和光学二次谐波生成神经算法验证 | 🎯训练输入数据,物理系统变换产生输出和可微分数字模型估计损失的梯度 | 🎯…

Code Practice Journal | Day52_Graph03

KamaCoder 101. 孤岛的总面积 题目:101. 孤岛的总面积 (kamacoder.com) 题解:代码随想录 (programmercarl.com) solution namespace ACMModeExample {class Program{static void Main(string[] args){// 读取矩阵的行数和列数string[] dimensions Cons…

[Matsim]Matsim学习笔记-population.xml的创建

学习需求 在利用matsim实现交通模拟时,需要把模拟的乘客出行数据替换成自己的,如何进行替换呢? 带着这个问题,调研学习matsim,实现population.xml的生成 调研笔记 幸运的发现matsim中实现了很多的writer工具类&#xf…

unity 使用Sqlite报错

Fallback handler could not load library C:/Users/Administrator/Desktop/xxx /_Data/MonoBleedingEdge/sqlite3&#xff0c; 出现DllNotFoundException: sqlite3 assembly:<unknown assembly> type:<unknown type> member:(null) 解决方法 &#xff1a;下载一个…

Nacos微服务注册管理中心与服务通信

参照springboot-alibaba-ribbon项目学习 E:\Codes\Idea_java_works\apesource\springboot\微服务\springboot_alibaba_ribbon Nacos 微服务注册中心-discover Nacos 是⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是 注册中⼼ 配置…

Java入门:06.Java中的方法--进阶02.03

2 可变参数 方法调用时&#xff0c; 传递的实参数量&#xff0c;是由被调用方法的参数列表数列决定的。 一般来讲&#xff0c;传递的实参数量必须与形参变量数量相同&#xff0c;但是也有一种特殊的参数&#xff0c;允许调用时传递的实参数量是可变&#xff0c;这种参数就称为…

CSS3多行多栏布局

当前布局由6个等宽行组成&#xff0c;其中第四行有三栏&#xff0c;第五行有四栏。 重点第四行设置&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>img {hei…

做项目过程中问题小汇总 | vue3 elementplus js

el-card去除阴影 <el-card style"box-shadow: none;"> </el-card>el-button按钮加图标 <el-button type"primary" size"default" icon"Plus"click"addRole">添加职位</el-button>el-table表头的文…

linux和docker部署基本的命令掌握

git用到的指令 上传代码 git add . git commit -m zhushi git push 拉取代码 git clone 代码仓地址 git pulldocker用到的指令 # 查看docker下的容器进程,停止和删除 docker ps -a docker stop name(id) docker rm name(id) # docker下面的镜像和删除 docker images docker r…

AI 时代的编程革命:如何在挑战中抓住机遇?

AI 发展对软件开发的挑战与机遇&#xff1a;程序员应对策略 随着人工智能&#xff08;AI&#xff09;技术的快速进步&#xff0c;软件开发领域正经历深刻的变革。AI 不仅改变了编程的方式&#xff0c;也对程序员的职业发展产生了重要影响。在这个背景下&#xff0c;我们既看到…

WPF—数据模版绑定数据集合(listbox和panel)

WPF—数据模版绑定数据集合(listbox和panel) WPF中&#xff0c;可以使用ListBox或者Panel&#xff08;比如StackPanel或Canvas&#xff09;来展示数据集合&#xff0c;并使用数据模板DataTemplate来定义数据的呈现方式。以下是一些简单的例子&#xff0c;展示如何将数据集合绑…

C#高级进阶---关于插件开发(初版)

一、关于插件 插件开发是一种使应用程序功能可扩展的技术。通过插件&#xff0c;应用程序可以动态地加载和使用外部功能模块&#xff0c;而无需重新编译整个程序。 1. 插件架构设计 插件系统通常包含以下几个核心部分&#xff1a; 主程序&#xff08;Host Application&#x…

HTML5休闲小游戏《砖块破坏者》源码,引流、刷广告利器

HTML5休闲小游戏《砖块破坏者》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods468802.html

Linux:Bash中的命令介绍(简单命令、管道以及命令列表)

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 在Bash中&#xff0c;命令执行的方式可以分为简单命令、管道和命令列表组成。这些结构提供了强大的工具&#xff0c;允许用户组合命令并精确控制其执行方式。以下是对这…

自己制作VOC转yolo的软件

不多说&#xff0c;直接贴源码&#xff0c;很简单&#xff0c;直接复制下来运行就行 from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton,QListWidget, QProgressBar, QHBoxLayout, QMainWindow, QFileDialog, QMenu,QDesktopWidget, QSplas…

Kubernetes 中如何对 etcd 进行备份和还原

etcd 是 Kubernetes 集群的重要组件&#xff0c;存储了集群的所有数据&#xff0c;如配置文件、状态信息、以及服务发现数据。因此&#xff0c;定期备份和能够快速还原 etcd 数据是保障 Kubernetes 集群安全与稳定运行的关键步骤。本文将详细介绍如何对 etcd 进行备份与还原的具…