mysql(自寫)

Mysql介于應用和數據之間,通過一些設計 ,將大量數據變成一張張像excel的數據表

數據頁:

mysql將數據拆成一個一個的數據頁

索引:

為每個頁加入頁號,再為每行數據加入序號,這個序號就是所謂的主鍵。? 將每個頁的頁號和所在頁最小的主鍵提出來,放入到一個新生成的數據頁中,并且給數據也加入層級的概念,這樣就可以根據上層的數據頁,快速縮小查找范圍,加速查找數據頁的過程。現在頁和頁之間看起來就像是一顆樹,這個可以加速查找數據頁的樹,就是常說的b+樹索引

除了主鍵索引,也可以為其他數據表的列(字段)去建立索引,這就是輔助索引

Buffer Pool

應用和磁盤間,加一層緩存,緩存里裝的就是索引頁和部分數據(先讀buffer pool,有對應數據就返回,沒數據就去磁盤找)

進程自己維護的Buffer Pool可以定制更多緩存策略,還能實現加鎖等各種數據表高級特性,所以有了Buffer Poll,就沒必要使用操作系統的文件緩存了。Buffer Pool通過直接IO模式,繞過操作系統的緩存機制,直接從磁盤讀取數據

直接IO方式是指繞過操作系統的緩存機制,直接從磁盤中讀取到用戶態空間緩沖區,避免了數據從磁盤拷貝到內核態緩沖區,再從內核態緩存區拷貝到用戶態緩沖區的兩次復制,所以大大提升了性能

自適應哈希索引

就算有了Buffer,Poll,要查到某個數據也,也依然要查找B+樹,查詢復雜度O(lgn).可以使用查詢你速度為O(1)的哈希表進行優化,記錄每個數據頁的查詢頻率,對于熱點數據頁,以查詢的值為key,數據頁地址為value構建哈希表

ChangeBuffer

大部分數據表除了主鍵索引外,還會加一些輔助索引。那對于這類數據表的寫操作,更新完主鍵索引的數據頁之后還需要更新輔助索引頁,這樣,讀取輔助索引頁的磁盤IO必然少不了

可以先將要寫入的數據收集到一塊內存里(這就是ChangeBuffer),等哪天磁盤里的索引頁正好被讀入Buffer Pool的時候,再將寫入數據應用到索引頁中,通過這個方式,減少了大量的磁盤IO提升性能

Undo Log

在數據庫中有一個叫事物的概(就是可以讓多行數據要么同時更新成功,要么同時失敗,就是所謂的原子性)。為了實現這一點,我們就知道寫數據時每行數據原來長啥樣,方便對更新后的數據進行回滾,因此就有了undo log ,更新Buffer Pool數據葉的時候,會用舊數據生成Undo log記錄,會用舊數據生成undo log ,存儲在bufferpool中的特殊undo log 內存頁中,并隨著Buffer Pool的刷盤機制,不定時寫入到磁盤的Undo log 文件中

Redo Log

將事務中更新數據行的操作都寫入到Redo Log Buffer內存中,在事務提交的時候進行redo log刷磁盤,將數據固化到redo log文件中,數據庫進程崩潰重啟后,就能通過Redo Log File找到歷史操作記錄重做數據,保證了事務里的多行數據變更,要么都成功,要么都失敗

Redo Log File是由順序寫入的,Buffer Pool的內存數據隨機分散在磁盤內,順序寫磁盤性能是隨機寫的幾十倍

InnoDB

sql語句如何轉成存儲引擎的函數接口呢

Server層

本質是sql語句和InnoDB存儲引擎的中間層,在server層內提供一個連接管理模塊,用于管理來自引用的網絡連接,并提供一個分析器用于判斷sql語句有沒有語法錯誤,再提供一個優化器,用于根據一定的規則,選擇改用什么索引生成執行計劃,之后提供一個執行器根據執行計劃去調用InnoDB存儲引擎的接口函數

binlog是什么

redolog 是環形寫的,寫入數據多的時候會把最開始寫入的刪除掉,所以沒法完全恢復,只能用來恢復部分最近數據(當然,這部分也是比較大的了)

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

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

相關文章

Nginx 502 Bad Gateway:從 upstream 日志到 FastCGI 超時復盤

Nginx 502 Bad Gateway:從 upstream 日志到 FastCGI 超時復盤 🌟 Hello,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵,每一…

Dreamore AI-解讀并描繪你的夢境

本文轉載自:Dreamore AI-解讀并描繪你的夢境 - Hello123工具導航 ** 一、🌙 初識 Dreamore AI:你的智能夢境伴侶 Dreamore AI 是一款超有趣的AI 夢境解析與可視化工具,它巧妙地把夢境解讀和圖像生成這兩大功能融為一體。你只需要…

集合-單列集合(Collection)

List系列集合:添加的元素是有序、可重復、有索引的。Set系列集合:添加的元素是無序、不重復、無索引的。代碼:public class A01_CollectionDemo1 {public static void main(String[] args) {/** 注意點:Collection是一個接口&…

寫一個 RTX 5080 上的 cuda gemm fp16

1. cpu 計算 fp16 四則運算由于會用到cpu 的gemm 與 gpu gemm 的對比驗證,所以,這里稍微解釋一下 cpu 計算fp16 gemm 的過程。這里為了簡化理解,cpu 中不使用 avx 相關的 fp16 運算器,而是直接使用 cpu 原先的 ALU 功能。這里使用…

web滲透PHP反序列化漏洞

web滲透PHP反序列化漏洞1)PHP反序列化漏洞反序列我們可以控制對象中的值進行攻擊O:1:"C":1:{s:3:"cmd";s:8:"ipconfig";}http://127.0.0.1/1.php?xO:1:%22C%22:1:{s:3:%22cmd%22;s:3:%22ver%22;}常見的反序列化魔術方法:…

FPGA學習筆記——SPI讀寫FLASH

目錄 一、任務 二、需求分析 三、Visio圖 四、具體分析 五、IP核配置 六、代碼 七、實驗現象 一、任務 實驗任務: 1.按下按鍵key1,開啟讀ID操作,將讀出來的ID,通過串口發送至PC端顯示,顯示格式為“讀ID:XX-XX-XX…

一句話PHP木馬——Web滲透測試中的隱形殺手

文章目錄前言什么是"一句話木馬"?常見變種與隱藏技巧1. 函數變種2. 加密混淆3. 變量拆分4. 特殊字符編碼上傳技巧與繞過防御常見上傳繞過技巧檢測與防御措施1. 服務器配置2. 上傳驗證3. 代碼審計4. Web應用防火墻(WAF)實戰案例分析深度思考:安…

房屋租賃系統|基于SpringBoot和Vue的房屋租賃系統(源碼+數據庫+文檔)

項目介紹 : SpringbootMavenMybatis PlusVue Element UIMysql 開發的前后端分離的房屋租賃系統,項目分為管理端和用戶端以及房主端 項目演示: 基于SpringBoot和Vue的房屋租賃系統 運行環境: 最好是java jdk 1.8,我們在這個平臺上運行的。其他版本理論上…

C++動態規劃——經典題目(下)

上一篇文章沒有寫全&#xff0c;這篇再補兩道題酒鬼#include<bits/stdc.h> using namespace std; int dp[110][10]{0}; int a[1010]{0}; int n,m; int main() {cin>>n;dp[0][0]0;dp[1][0]0;dp[1][1]a[1];for(int i1;i<n;i){cin>>a[i];}for(int i2;i<n;…

介紹Ansible和實施Ansible PlayBook

第一章 介紹Ansible1. ansible的特點是什么&#xff1f;a. ansible使用yaml語法&#xff0c;語言格式簡潔明了。b. ansible不需要代理&#xff0c;僅僅通過SSH遠程連接就可以控制受管主機&#xff0c;是一種非常便捷、安全的方法。c. Ansible的功能強大&#xff0c;可以利用ans…

ComfyUI驅動的流程化大體量程序開發:構建上下文隔離的穩定系統

ComfyUI驅動的流程化大體量程序開發&#xff1a;構建上下文隔離的穩定系統 在現代軟件工程中&#xff0c;隨著程序體量的不斷增長&#xff0c;上下文污染&#xff08;Context Pollution&#xff09;和狀態依賴混亂已成為導致系統不穩定、調試困難、維護成本高昂的核心問題。尤…

基于SpringBoot的協同過濾余弦函數的美食推薦系統(爬蟲Python)的設計與實現

基于SpringBootvue的協同過濾余弦函數的個性化美食(商城)推薦系統(爬蟲Python)的設計與實現 1、項目的設計初衷&#xff1a; 隨著互聯網技術的快速發展和人們生活水平的不斷提高&#xff0c;傳統的美食消費模式已經無法滿足現代消費者日益個性化和多樣化的需求。在信息爆炸的時…

機器視覺學習-day19-圖像亮度變換

1 亮度和對比度亮度&#xff1a;圖像像素的整體強度&#xff0c;亮度提高就是所有的像素加一個固定值。對比度&#xff1a;當對比度提高時&#xff0c;圖像的暗部與亮部的差值會變大。OpenCV調整圖像亮度和對比度的公式使用一個&#xff1a;代碼實踐步驟&#xff1a;圖片輸入→…

redis詳解 (最開始寫博客是寫redis 紀念日在寫一篇redis)

Redis技術 1. Redis簡介 定義與核心特性&#xff08;內存數據庫、鍵值存儲&#xff09; Redis&#xff08;Remote Dictionary Server&#xff0c;遠程字典服務&#xff09;是一個開源的、基于內存的高性能鍵值存儲數據庫&#xff0c;由 Salvatore Sanfilippo 編寫&#xff0c;用…

【MD文本編輯器Typora】實用工具推薦之——輕量級 Markdown 編輯器Typora下載安裝使用教程 辦公學習神器

本文將向大家介紹一款輕量級 Markdown 編輯器——Typora&#xff0c;并詳細說明其下載、安裝與基本使用方法。 引言&#xff1a; MD 格式文檔指的是使用 Markdown 語言編寫的文本文件&#xff0c;其文件擴展名為 .md。 Markdown 是一種由約翰格魯伯&#xff08;John Gruber&am…

Vue2+Element 初學

大致實現以上效果 一、左側自動加載菜單NavMenu.vue 菜單組件&#xff0c;簡單調整了一下菜單直接的距離&#xff0c;代碼如下&#xff1a;<template><div><template v-for"item in menus"><!-- 3、有子菜單&#xff0c;設置不同的 key 和 inde…

Shell編程知識整理

文章目錄一、Shell介紹1.1 簡介1.2 Shell解釋器二、快速入門2.1 編寫Shell腳本2.2 執行Shell腳本2.3 小結三、Shell程序&#xff1a;變量3.1 語法格式3.2 變量使用3.3 變量類型四、字符串4.1 單引號4.2 雙引號4.3 獲取字符串長度4.4 提取子字符串4.5 查找子字符串五、Shell程序…

AI與低代碼的激情碰撞:微軟Power Platform融合GPT-4實戰之旅

引言 在當今數字化飛速發展的時代,AI 與低代碼技術正成為推動企業變革的核心力量。AI 憑借其強大的數據分析、預測和決策能力,為企業提供了智能化的解決方案;而低代碼開發平臺則以其可視化、快速迭代的特性,大大降低了應用開發的門檻和成本。這兩者的結合,開啟了一場全新的…

豆包1.6+PromptPilot實戰:構建智能品牌評價情感分類系統的技術探索

豆包1.6PromptPilot實戰&#xff1a;構建智能品牌評價情感分類系統的技術探索 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般絢爛的技術棧中&#xff0c;我是那個永不停歇的色彩收集者。 &#x1f98b; 每一個優化都是我培育的花朵&#xff0c;…

如何在VsCode中使用git(免敲命令版本!保姆級!建議收藏!)

目錄 文章目錄 前言 一、電腦安裝git 二、在vscode安裝git插件 三、克隆倉庫 四、提交代碼 五、創建分支、切換分支、合并分支 1、創建分支 2、切換分支 3、合并分支 六、創建標簽和推送標簽 七、解決沖突 八、拉取、抓取倉庫 九、Reivew代碼 總結 前言 隨著Vscode的推出和普及…