【分布式存儲】數據存儲和檢索~B+樹

為什么數據存儲結構重要

在存儲系統中,其實不管數據是什么樣的,歸根結底其實都還是取決于數據的底層存儲結構,而主要常見的就是數據庫索引結構,B+樹、Redis中跳表、以及LSM、搜索引擎中的倒排索引。本質都是如何利用不用的數據結構,在性能和存儲空間之間權衡。數據寫的速度和讀取數據。

MySQL中索引如何用B+樹實現的

常用數據結構分析

哈希表: 哈希表以O(1)的查詢效率著名,但是其本身是用空間換時間。并且不支持范圍查詢。
平衡二叉查找樹: 查詢和寫入都是O(logN) 進行中序遍歷的話,可以得到一個有序的數據序列,但是不支持快速查找。
跳表: 跳表,其實是通過多層的鏈表結構實現,可以快速查詢、刪除、插入 都是O(LogN)
在這里插入圖片描述
而B+樹和跳表十分相視。

B+樹

在這里插入圖片描述
我們從從一個二叉查找樹進行改造,將非葉子節點不存儲數據,由葉子節點存儲數據。并且葉子節點通過指針可以前后引用。這樣,當我們查找數據的時候,找到15。然后可以通過遍歷.next 就可以進行范圍查詢。這就是為什么葉子節點需要雙向鏈表進行引用。

如果將全部的數據都存儲到內存中,那么內存是放不下的,所以一個方式就是,只將根節點存儲在內存中,其他節點存儲在磁盤上。
而二叉查找數因為數據如果較多,樹的高度就會更高,查詢的IO次數更多。
在這里插入圖片描述
所以一般使用固定階段,3層來保證數據查詢的IO次數。操作系統讀取數據是按照Page 64KB進行讀取。所以我們盡量讓每個節點存儲的數據等于一頁的大小。

合并和分裂
因為在使用數據庫的時候,會刪除和增加數據,所以當超過一定的節點數據時,會進行分裂和合并操作。
在這里插入圖片描述

小結

本篇主要簡單介紹下B+數在MySQL索引是如何實現的,B樹和B+數據的區別,一共在兩個地方

  • B+數節點不存儲數據,只存儲索引數據,B樹存儲的是數據。
  • B樹葉子結點不需要通過鏈表鏈接。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35178.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35178.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35178.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軟件設計師(七)面向對象技術

面向對象: Object-Oriented, 是一種以客觀世界中的對象為中心的開發方法。 面向對象方法有Booch方法、Coad方法和OMT方法等。推出了同一建模語言UML。 面向對象方法包括面向對象分析、面向對象設計和面向對象實現。 一、面向對象基礎 1、面向對象的基本…

7. 延遲隊列

延遲隊列 7.1. 延遲隊列概念 延時隊列,隊列內部是有序的,最重要的特性就體現在它的延時屬性上,延時隊列中的元素是希望 在指定時間到了以后或之前取出和處理,簡單來說,延時隊列就是用來存放需要在指定時間被處理的 元素的隊列。 7…

【Spring Boot】構建RESTful服務 — 使用Swagger生成Web API文檔

使用Swagger生成Web API文檔 高質量的API文檔在系統開發的過程中非常重要。本節介紹什么是Swagger,如何在Spring Boot項目中集成Swagger構建RESTful API文檔,以及為Swagger配置Token等通用參數。 1.什么是Swagger Swagger是一個規范和完整的框架&…

QT創建項目

可選擇CMake或qmake

SSL證書DV和OV的區別?

SSL證書是在互聯網通信中保護數據傳輸安全的一種加密工具。它能夠確保客戶端和服務器之間的通信得以加密,防止第三方竊聽或篡改信息。在選擇SSL證書時,常見的有DV證書和OV證書,它們在驗證標準和信任級別上有所不同。那么SSL證書DV和OV的有哪些…

二叉搜索樹K和KV結構模擬

一 什么是二叉搜索樹 這個的結構特性非常重要,是后面函數實現的結構基礎,二叉搜索樹的特性是每個根節點都比自己的左樹任一節點大,比自己的右樹任一節點小。 例如這個圖, 41是根節點,要比左樹大,比右樹小&…

Neo4j之DELETE基礎

在 Neo4j 中,DELETE 語句用于刪除節點、關系或節點屬性。它允許從圖數據庫中移除不再需要的數據。 1】刪除節點及其關系: MATCH (p:Person {name: Alice}) DETACH DELETE p;這個查詢會找到具有 "Person" 標簽且屬性 "name" 為 &qu…

人工智能原理概述 - ChatGPT 背后的故事

大家好,我是比特桃。如果說 2023 年最火的事情是什么,毫無疑問就是由 ChatGPT 所引領的AI浪潮。今年無論是平日的各種媒體、工作中接觸到的項目還是生活中大家討論的熱點,都離不開AI。其實對于互聯網行業來說,自從深度學習出來后就…

進入現代云技術的世界-APIGateway、ServiceMesh、OpenStack、異步化框架、云原生框架、命令式API與聲明式API

目錄 APIGateway Service Mesh OpenStack 異步化框架 云原生框架 命令式API與聲明式API APIGateway API網關(API Gateway)是一個服務器——充當了客戶端和內部服務之間的中間層。API網關負責處理API請求,將客戶端的請求路由到相應的后端…

StringJoiner

1、為什么要學習StringJoiner? 2、StringJoiner概述 StringJoiner跟StringBuilder一樣,也可以看成一個容器,創建之后里面的內容是可變的。 2.1、作用 提高字符串的操作效率,而且代碼編寫特別簡潔,但是目前市場上很少有…

銀行家算法

1.設計目的與要求 1.1設計目的 了解銀行家算法中使用的數據結構和求安全序列算法,并進一步加深對避免死鎖算法及其實現過程的理解。 1.2設計要求 通過編寫和調試一個系統動態分配資源的簡單模擬程序,觀察死鎖產生的條件,并采用適當的算法&a…

2023.8.7論文閱讀

文章目錄 CMUNeXt: An Efficient Medical Image Segmentation Network based on Large Kernel and Skip Fusion摘要本文方法實驗結果 Boundary Difference Over Union Loss For Medical Image Segmentation(損失函數)摘要本文方法實驗結果 CMUNeXt: An E…

回歸預測 | MATLAB實現基于PSO-LSSVM-Adaboost粒子群算法優化最小二乘支持向量機結合AdaBoost多輸入單輸出回歸預測

回歸預測 | MATLAB實現基于PSO-LSSVM-Adaboost粒子群算法優化最小二乘支持向量機結合AdaBoost多輸入單輸出回歸預測 目錄 回歸預測 | MATLAB實現基于PSO-LSSVM-Adaboost粒子群算法優化最小二乘支持向量機結合AdaBoost多輸入單輸出回歸預測預測效果基本介紹模型描述程序設計參考…

【基礎操作】Linux打開terminal,Anaconda默認進入的虛擬環境(python版本)設置(自行指定)

為了免除每次打開terminal都要輸入 conda activate … 的麻煩,可以這么設置。 1. 打開terminal,然后輸入命令 vim ~/.bashrc2. 然后在文件末尾添加 conda activate your_envs # your_envs是你的虛擬環境名稱3. 保存退出,重新打開就成功啦…

navicat連接postgresql報錯

navicat連接postgresql報錯 navicat連接postgresql報錯 現象 有小伙伴告訴我 安裝了新的postgresql 使用navicat連接,報錯 ERROR: column "datlastsysoid" does not existLINE 1: SELECT DISTINCT datlastsysoid FROM pg database column “datlastsy…

Go 語言類型轉換的陷阱

1 介紹 Go 語言作為強類型語言,在使用 Golang 開發項目時,經常會遇到類型轉換的場景,整型之間可以直接轉換,字節切片和字符串之間也可以直接轉換。 但是,如果整型和字符串之間做類型轉換,則需要使用 str…

.netcore grpc客戶端流方法詳解

一、客戶端流式處理概述 客戶端流式處理方法在該方法沒有接收消息的情況下啟動。 requestStream 參數用于從客戶端讀取消息。 返回響應消息時,客戶端流式處理調用完成。客戶端可以發送多個消息流到服務端,當所有客戶端消息流發送結束,調用請…

SpringBoot案例-部門管理-修改

目錄 前言 查看頁面原型,明確需求 頁面原型 需求 閱讀接口文件 思路分析 功能接口開發 控制層(Controller類) 業務層(Service類) 業務類 業務實現類 持久層(Mapper類) 接口測試 前…

Day 41

Day 41 343. 整數拆分 一個是j * dp[i - j],相當于是拆分(i - j),對這個拆分不理解的話,可以回想dp數組的定義。 dp[i] max({dp[i], (i - j) * j, dp[i - j] * j}); class Solution:def integerBreak(self, n: int) -> int:dp [0] *…

離線環境conda虛擬環境備份遷移--conda pack問題

1.第一步:創建虛擬環境 conda create -n pyenv --clone base 或者 conda create -n pyenv python3.8.5 --offline 命令執行結束,在路徑/xxxx/anaconda/envs 下看到pyenv 或者 conda info --envs 查看羅列虛擬環境 2.第二步:打包環境 conda …