《資料庫系統概念》12-文件的組織

来源:http://www.cnblogs.com/zhixin9001/archive/2017/12/16/8047842.html
-Advertisement-
Play Games

一個資料庫被映射到多個不同的文件,這些文件由底層的操作系統來維護。每個文件分成定長的存儲單元,稱為塊(bolck),塊是存儲分配和數據傳輸的基本單元。資料庫預設的塊在4-8k之間。通常沒有記錄比塊更大(圖片音頻等大文件先不考慮),此外還要求每條記錄保存在單個塊中。 一、定長記錄instructor表 ...


一個資料庫被映射到多個不同的文件,這些文件由底層的操作系統來維護。每個文件分成定長的存儲單元,稱為塊(bolck),塊是存儲分配和數據傳輸的基本單元。資料庫預設的塊在4-8k之間。通常沒有記錄比塊更大(圖片音頻等大文件先不考慮),此外還要求每條記錄保存在單個塊中。

 

一、定長記錄
instructor表的屬性有:ID char(5); name char(20)。假設每個字元占用1位元組,則每條記錄占用25位元組,不能將這些記錄順序存儲,否則會出現跨塊的情況;而且刪除記錄時,將後面的記錄依次向前移動開銷很大。為瞭解決跨塊的問題,每個塊只存儲整數條記錄,多餘的空間暫時不用。而在刪除記錄時,可以將最後一條記錄移動到被刪除記錄的位置,而不是將所有後面的記錄依次向前移動。此外考慮到插入操作往往比刪除操作更為頻繁,可以將刪除記錄後留出的空間給下次的插入數據占用。
但插入記錄時,如何找到被刪除記錄的位置呢:可以在文件頭部留出一定空間來存儲第一條被刪除記錄的位置,第二條記錄被刪除後,其位置被記錄在第一條刪除記錄的位置,這樣依次進行,形成了圖示的情況:

被刪除的記錄形成了一條鏈表(linked list),這兒也稱為空閑列表(free list)。每次新插入數據時,都插入header指向的地址,同時header中的地址更新為下一條被刪除記錄的地址。

 

二、變長記錄

A)存儲方式
數據表中包含變長屬性時就會涉及到變長記錄的存儲。不管何種變長存儲技術,都需要解決這兩個基本問題:如何描述一條記錄,可以方便地獲取其中的屬性;如何在塊中存儲一條記錄,可以使它被方便地獲取到。
一條有變長屬性的記錄通常具有兩部分:定長的初始部分,然後是緊隨其後的變長部分。定長部分用(偏移量,長度)這樣的格式來表示,偏移量指示了數據的起始位置,長度即為變長部分的長度。變長部分在定長部分之後連續存儲。

上圖示例為instructor(ID varchar(5);name varchar(20);dept_name varchar(20);salary numeric(8,2))的存儲方式,ID name dept_name是變長的(假定偏移量、長度分別占用2個位元組);salary是定長的,所以直接存儲。
上圖也演示了空點陣圖(null bitmap)的使用,如果屬性salary是空的,則空點陣圖的第4位會被置為1,存儲salary的12-19位會被忽略。1位元組的空點陣圖可以應對最多8個屬性的表結構,如果有更多屬性,則需要擴展空點陣圖的長度。這種方式以額外的空點陣圖讀取為代價,節約了存儲空間,在具有很多屬性同時這些屬性多為空的表中是很有效的。

 

B)在塊中存儲變長記錄
在塊中存儲變長記錄時一般使用分頁的槽結構(slotted-page structure),如圖所示,每個塊(block)中都有header:

header中包含的信息有:塊中條目的個數、空閑空間的結尾處、每條記錄的入口(entry,包含記錄位置和大小)。記錄在塊中連續存儲,但是,是從塊的尾部開始存起的。每次插入新的紀錄時,就放置在空閑空間的末尾,同時在header中保存這條記錄的入口信息;當刪除一條記錄時,被刪除記錄前的記錄依次先後移動,以占據被刪記錄的空間。由於每個塊的體積在4-8k之間,並不算太大,所以這種移動的開銷相對較小。在分頁的槽結構中,數據指針不是直接指向數據,而是指向數據的入口(entry),於是數據在塊中可以任意被移動,這可以避免塊中碎片的產生。

 

學習資料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、快照 例如,當我們在虛擬機上做實驗或是作測試時,難免碰到一些不熟悉的地方,此時做個快照,備份一下當前的系統狀態,一旦操作錯誤,可以很快還原到出錯前的狀態,完成實驗,最終避免一步的失誤導致重新開始整個實驗或測試的後果。 操作演示: 二、克隆 VMware支持兩種類型的克隆: 完整克隆 鏈接克隆 完 ...
  • 原文鏈接: http://blog.csdn.net/luoweifu/article/details/46595285 什麼是線程 什麼是線程?線程與進程有什麼關係?這是一個非常抽象的問題,也是一個特別廣的話題,涉及到非常多的知識。我不能確保能把它講得好,也不能確保講的內容全部都正確。即使這樣,我 ...
  • 1、cd 跳轉到根目錄 2、cd .. 跳轉到上一級目錄 3、ll和ls查看當前目錄的內容 4、vi 查看文檔內容 5、/ 用vi打開文件後,該命令可以定位到你要查找的內容 6、tail -f 文件名 查看文件,文件會實時更新 7、 chmod u+x file、 chmod u-x file、ch ...
  • 1.1 MySQL用戶管理 1.1.1 用戶的定義 用戶名+主機域 1.1.2 用戶的作用 1、用戶登錄 2、用於管理資料庫及數據 1.1.3 連接資料庫 定義用戶:用戶名+主機域,密碼 定義許可權:對不同的對象進行許可權(角色)定義 命令: grant 許可權 on 許可權範圍 to 用戶 identif ...
  • 之前的步驟一路next,有設置記憶體大小的根據機器的配置設置一下即可。 需要註意的地方, 下麵是對於簡化版進行設置的步驟 虛擬機網路模式 1、橋接模式 在橋接模式下,VMware虛擬機里的系統就像是 區域網 中的一臺 獨立 的主機,它可以訪問同一個網段內任何一臺機器,即可以相互ping通。 在橋接模式 ...
  • 購買功能變數名稱。示例:example.com 設置多個二級功能變數名稱。如圖: 配置tomcat文件: 修改tomcat/conf目錄下的server.xml文件: 在tomcat根目錄下,複製webapps文件夾,併在tomcat根目錄下粘貼兩份,分別命名為:webapps1和webapps2。註意此文件夾名稱 ...
  • mongoDB之數據類型 Object ID :文檔的id String: 字元串,最常用,必須是utf-8 Boolean:布爾值,true 或者false Integer:整數 Double:浮點數 Arrays:數組或者列表,多個值存儲到一個鍵 Object:用於嵌入文檔,即一個值為一個文檔 ...
  • mongoDB中的資料庫操作 查看資料庫名稱: db 查看所有資料庫: show dbs 切換資料庫: use 資料庫名稱 註意:如果資料庫不存在,則指向資料庫,但不會創建。直到插入數據或者是創建集合時資料庫才會創建; 資料庫的刪除: db.dropDatabase(); ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...