mysql儲存結構雙向鍊錶 資料庫的儲存結構

2021-10-19 19:23:31 字數 1331 閱讀 7166

資料庫的儲存結構

資料庫的儲存結構是怎樣的?

記錄是按照行儲存的,但是資料庫的讀取不是以行為單位,否則一次讀取只能處理一行,效率很低。因此資料庫,無論是讀一行,還是讀取多行,都是將這些行所在的頁進行載入。資料管理儲存空間的基本單位是頁(page)

快速回顧一遍資料庫儲存結構:一頁可以儲存多個行記錄(row) ,先是表空間(tablespace),表空間包含段(segement),還存在區(extent),其關係如下圖所示:段(segment)段裡面有多個區,區在檔案系統是乙個連續的分片空間,不過在段中不要求區與區之間是分配單位,不同型別的資料庫物件以不同的段形式存在。 當我們建立資料表,索引的時候,就會建立對應的段,比如建表的時候,會自動建立表段,建立表索引的時候,會建立乙個索引段。

區(extent) 是乙個比頁高乙個級別的儲存結構,乙個區一般有64個里連續的頁,innodb 頁的預設大小是 16k, 索引乙個區的大小是 64*16 = 1mb

表空間(tablespace) 是乙個邏輯容器,表空間儲存的物件是段,在乙個表空間中可以有多個段,乙個段只能屬於乙個表空間,資料庫可以有多個表空間,表空間從管理上劃分為系統表空間、使用者表空間、撤銷表空間、臨時表空間。

oracle 中使用塊代表頁

資料庫 io 最小單位是頁,與資料庫相關的內容會存在頁結構中,資料頁包括7個部分,分別是檔案頭(file header),頁頭(page header),最大最小記錄(inflimum+siprenum)、使用者記錄(user records)、空閒空間(free space),頁目錄(page directory)和檔案尾(file tailer)。

頁的儲存結構如下:

頁中各項內容:

頁主要分成3部分: 頭尾節點部分。資料記錄部分,索引部分。

資料頁有兩個字段,分別是檔案頭fil_page_prev 和檔案尾 fil_page_next, 主要作用是指標,分別指向上乙個資料和下乙個資料,連線起來相當於乙個雙向鍊錶。

第二部分是記錄部分,最大最小記錄和使用者記錄部分佔了頁結構的主要空間。當新記錄插入的時候,會從空想空間分配用於儲存新記錄。

第三部分是索引部分, 這部分是頁目錄,起到了記錄索引的作用。

如何建立乙個頁記錄?將索引的記錄分成幾組,這些記錄包括最小記錄和最大記錄,但是不包括已刪除記錄。

第1組,也就是最小記錄所在的分組只有乙個記錄; 最後一組,就是最大記錄所在的分組,會有1-8個記錄,其餘的組資料在4-8條。

在每個組最後一條記錄的頭資訊中會儲存該組一共有多少條,作為 n_owned 字段。

頁目錄用來儲存每組最後一條記錄的位址偏移量,這些位址偏移量會按照先後順序儲存起來,每組的位址偏移量稱為 slot ,每個槽相當於指標指向了不同組的最後乙個記錄。

總結一下

mysql儲存結構雙向鍊錶 PHP實現雙向鍊錶 棧

這次再來分享一下實現雙向鍊錶和棧的實現。雖然是以前寫的了,但是發現php寫的這些 很容易看懂!雙向鍊錶 classhero elseelse if cur next no hero no cur cur next if i ist hero pre cur if cur next null cur ...

mysql 雙向鍊錶 雙向鍊錶

雙向鍊錶是鍊錶變型,相比於單鏈表導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向鍊錶的概念 link 鍊錶的每個鏈路儲存資料稱為乙個元素。linkedlist linkedlist包含連線鏈結到名為首先第乙個鏈結,並稱為最後的最後乙個鏈結 last 雙向鍊錶表示 按照如上圖中所示,以下是要...

資料結構 鍊錶 雙向鍊錶

注意typedef的定義結構,以及dinklist的資料型別 typedef struct dnode dnode,dinklist 注意插入第乙個結點時,prior指標的空指向問題 if l next null 若l後繼結點為空 則省略該步驟 l next prior p 基本 頭插法建立雙向鍊錶...