7. B+樹

一、B+樹是應文件系統所需而產生的一種B樹的變形樹

1. 定義(使用階數m來定義)

  1. 除了根結點外,其他非終端結點最多有m個關鍵字,最少有?m/2?個關鍵字
  2. 結點中的每個關鍵字對應一個子樹
  3. 所有的非終端結點可以看成是索引部分,結點中僅含有其子樹根結點中最大(或最小)關鍵字
  4. 所有的葉子節點包含了全部的關鍵字以及指向含有這些關鍵字記錄的指針,并且:

    • 同一葉子節點中的關鍵字按大小順序排列
    • 相鄰的葉子節點順序鏈接(相當于是構成了一個順序鏈表
    • 所有葉子節點在同一層

?

2. 和B樹的區別

對于非終端結點,關鍵字的個數與其子樹的個數相同;不像B樹,子樹的個數總比關鍵字的個數多1。

所有的關鍵字及相應的指針都在葉子結點中;不像B樹,有的關鍵字是在內部結點中。(換句話說,在B+樹中,內部結點僅僅起到索引的作用。在搜索過程中,如果待查詢的關鍵字和內部結點的關鍵字一致,那么搜索過程不停止,而是繼續向下搜索這個分支)

  1. 關鍵字的數量不同:B+樹中,對于非終端結點,關鍵字的個數與其子樹的個數相同;而B樹中,關鍵字的個數比子樹的個數少1。
  2. 存儲的位置不同:B+樹中的數據都存儲在葉子結點上,也就是其所有葉子結點的數據組合起來就是完整的數據;而B樹的數據存儲在每一個結點中。
  3. 非終端結點的構造不同:B+樹的非終端結點僅僅存儲著關鍵字信息和指向孩子的指針(這里的指針指的是磁盤塊的偏移量),也就是說內部結點僅僅包含著索引信息
  4. 查詢不同:B樹在找到具體的數值以后,則結束;而B+樹則需要通過索引找到葉子結點中的數據才結束,也就是說B+樹的搜索過程中走了一條從根結點到葉子結點的路徑

?

?

二、關于B+樹的面試題

1. 為何B+樹用于數據庫索引?

B樹在提高了磁盤IO性能的同時并沒有解決元素遍歷的效率低下的問題。B樹的其非終端結點同樣存儲著數據,因此如果我們要找到具體的數據,就需要進行一次中序遍歷。正是為了解決這個問題,B+樹應運而生。

B+樹的數據都存儲在葉子結點中,非終端結點均為索引,方便掃庫,只需要遍歷葉子結點即可實現整棵樹的遍歷。所以B+樹更加適合在區間查詢的情況,而且在數據庫中基于范圍的查詢是非常頻繁的,所以通常B+樹用于數據庫索引。

?

2. 為何相比于B樹,B+樹在文件系統和數據庫系統中更具優勢?

①B+樹的磁盤讀寫代價更低?
B+樹的非終端結點并沒有指向關鍵字具體信息的指針,因此其內部結點相對B樹更小如果把同一非終端結點的所有關鍵字存放在同一盤塊中,那么盤塊所能容納的關鍵字數量也越多。一次性讀入內存中的需要查找的關鍵字也就越多。相對來說I/O讀寫次數也就降低了。

舉個例子,假設磁盤中的一個盤塊容納16bytes,而一個關鍵字2bytes,一個關鍵字具體信息指針2bytes。一棵9階B樹(一個結點最多8個關鍵字)的非終端結點需要2個盤快。而B+樹非終端結點只需要1個盤快。當需要把非終端結點讀入內存中的時候,B樹就比B+樹多一次盤塊查找時間(在磁盤中就是盤片旋轉的時間)。

②B+樹的查詢效率更加穩定?
由于非終端結點并不是最終指向文件內容的結點,而只是葉子結點中關鍵字的索引。所以任何關鍵字的查找必須走一條從根結點到葉子結點的路徑。所有關鍵字查詢的路徑長度相同,導致每一個數據的查詢效率相當。

③B+樹更有利于對數據庫的掃描?
B樹在提高了磁盤IO性能的同時并沒有解決元素遍歷的效率低下的問題,而B+樹只需要遍歷葉子節點就可以解決對全部關鍵字信息的掃描,所以對于數據庫中頻繁使用的范圍查詢,B+樹有著更高的性能。

?

轉載于:https://www.cnblogs.com/xzxl/p/9574448.html

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

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

相關文章

Retinex理論及算法學習

為了能夠獲取最大的信息量,達到更好的圖像增強效果。了解人類視覺系統的特性和圖像的屬性是準確地選擇圖像增強方法的必備知識。 一、人眼視覺系統 1、人眼成像 人的眼睛是一個非常復雜的器官。一般來說它就是一個球體,平均直徑約為20mm,內壁是一層視網膜(retina),前部…

js或css文件后面的參數是什么意思?

經常看到不少導航網站測樣式或js文件后面加了一些參數&#xff0c;主要是一你為一些并不經常更新的頁面重新加載新修改的文件。 經常遇到頁面里加載的js與css文件帶有參數&#xff0c;比如&#xff1a; <script type"text/javascript" src"jb51.js?version1…

TCP/IP協議與UDP協議的區別

首先咱們弄清楚&#xff0c;TCP協議和UCP協議與TCP/IP協議的聯系&#xff0c;很多人犯糊涂了&#xff0c;一直都是說TCP/IP協議與UDP協議的區別&#xff0c;我覺得這是沒有從本質上弄清楚網絡通信&#xff01;TCP/IP協議是一個協議簇。里面包括很多協議的。UDP只是其中的一個。…

C++類靜態成員與類靜態成員函數

當將類的某個數據成員聲明為static時&#xff0c;該靜態數據成員只能被定義一次&#xff0c;而且要被同類的所有對象共享。各個對象都擁有類中每一個普通數據成員的副本&#xff0c;但靜態數據成員只有一個實例存在&#xff0c;與定義了多少類對象無關。靜態方法就是與該類相關…

HDR 成像技術學習(一)

在描述一個場景的時候,動態范圍(Dynamic Range)指的是其最亮部與最暗部的亮度比值。高動態范圍的場景(High Dynamic Range Scene)指的是場景里同時存在非常明亮和非常暗淡的部分。 圖像傳感器所能捕捉的動態范圍是有限的,它受到兩個因素的限制,一個是滿阱容量(Full Wel…

Linux編程 3 (初識bash shell與man查看手冊)

一.初識bash shell 1.1 啟動 shell GNU bash shell 能提供對Linux系統的交互式訪問。通常是在用戶登錄終端時啟動&#xff0c;登錄時系統啟動shell依賴于用戶賬戶的配置。etc/passwd文件包含了所有系統用戶列表以及每個用戶的基本配置信息。      如上圖:最后一個字段&…

HDFS概述(5)————HDFS HA

HA With QJM 目標 本指南概述了HDFS高可用性&#xff08;HA&#xff09;功能以及如何使用Quorum Journal Manager&#xff08;QJM&#xff09;功能配置和管理HA HDFS集群。 本文檔假設讀者對HDFS集群中的一般組件和節點類型有一般的了解。有關詳細信息&#xff0c;請參閱HDFS架…

MFC動態創建菜單

http://blog.csdn.net/csdnzhwk/article/details/47395639轉載于:https://www.cnblogs.com/darknoll/p/6252917.html

RTP/RTCP

http://hi.baidu.com/ilovejoy/blog/item/daee10efa91e501afdfa3c5f.html http://hi.baidu.com/kikicat0_0/blog/item/6fed87b4b4fb89c536d3ca91.html

HDR 成像技術學習(二)

回顧下之前介紹的內容: HDR成像技術學習(一) 介紹了從HDR、HDR+等多幀HDR技術到硬件的單幀HDR技術。 從技術上來說,單幀HDR要比多幀HDR簡單不少,在早期設備處理能力不足的時候,速度快,沒拖影,性能要求低的單幀HDR反而要更有優勢。到了HDR+時代,單幀HDR漸漸不…

go微服務框架go-micro深度學習(一) 整體架構介紹

產品嘴里的一個小項目&#xff0c;從立項到開發上線&#xff0c;隨著時間和需求的不斷激增&#xff0c;會越來越復雜&#xff0c;變成一個大項目&#xff0c;如果前期項目架構沒設計的不好&#xff0c;代碼會越來越臃腫&#xff0c;難以維護&#xff0c;后期的每次產品迭代上線…

雜記---待整理

---恢復內容開始--- shell高亮顯示 echo -e 終端顏色 顯示內容 結束后的顏色 \e[1;31m content \e[1;0m 1為設置&#xff0c;0為不設置。 31m 0m為顏色 [ucmMacBook-Pro testpace]$ echo -e "\e[1;31m consumer huawei com \e[1;0m"consumer huawei com [ucmMacBook…

(轉載)項目實戰工具類(一):PhoneUtil(手機信息相關)

項目實戰工具類&#xff08;一&#xff09;&#xff1a;PhoneUtil&#xff08;手機信息相關&#xff09; 可以使用的功能&#xff1a; 1、獲取手機系統版本號 2、獲取手機型號 3、獲取手機寬度 4、獲取手機高度 5、獲取手機imei串號 ,GSM手機的 IMEI 和 CDMA手機的 MEID. 6、…

手把手教你寫Linux I2C設備驅動

手把手教你寫Linux I2C設備驅動 標簽&#xff1a;Linux 設備 驅動 詳解 i2c 原創作品&#xff0c;允許轉載&#xff0c;轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://ticktick.blog.51cto.com/823160/760020 Linux I2C驅動是嵌入…

HDR 成像技術學習(三)—— LOFIC

HDR 成像技術學習(一) HDR 成像技術學習(二) 我們拍攝的照片來自傳感器上的像素,它們將光處理為電信號,組合起來輸出畫面。當捕捉對象亮度過強,大量電荷擠在單個像素內,生成的圖像就會過曝。 LOFIC(Lateral Overflow Integration Capacitor,橫向溢出集合電容…

[模板]平面最近點對

實現 將平面內點按$x$坐標排序,分治$x$坐標,設$retmin(f(l,mid),f(mid1,r))$, 將$x\in[mid-ret,midret]$內的點按$y$坐標排序,算每個點與相鄰的$6$個點的距離找最優解即可. 時間復雜度:$O(nlogn)$. #define N 100005 #define INF 1e15 struct point{double x,y; }p[N]; inline …

人工智能與圖像傳感器

隨著人工智能時代的來臨,相應的芯片產品和行業也產生了相應的新方向。 在人工智能的各個分支中,機器視覺無疑是應用最廣泛的方向,它支撐著諸如人臉檢測、工業異常檢測、手勢識別等諸多重要的應用。顧名思義,機器視覺是使用機器學習/人工智能的方法來分析視覺信號,并且通過…

用戶空間訪問I2C設備驅動

2012-01-11 15:33:43標簽&#xff1a;Linux I2C 字符設備 設備驅動 用戶空間 原創作品&#xff0c;允許轉載&#xff0c;轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://ticktick.blog.51cto.com/823160/761830 關于Linux下如何編…

097實戰 關于ETL的幾種運行方式

一&#xff1a;代碼部分 1.新建maven項目 2.添加需要的java代碼   3.書寫mapper類 4.書寫runner類 二&#xff1a;運行方式 1.本地運行 2.集群運行 3.本地提交集群運行 三&#xff1a;本地運行方式 1.解壓hadoop到本地 2.修改配置文件HADOOP_HOME 3.解壓common的壓縮包 4.將壓…

模擬ssh, hashlib模塊, struct模塊, subprocess模塊

一. 模擬ssh # 服務器端 import socket import subprocess # 系統操作server socket.socket()server.bind((127.0.0.1,8008))server.listen(5)while True:print("server is working.....")conn,addr server.accept()# 字節類型while True:# 針對window系統try:…