?要建一棟大樓,首先肯定是需要一張詳細,漂亮的設計圖,一個系統的建立同樣也需要一個藍圖,如果蒙頭直接干,想到啥做啥,那這個系統到后面就會崩潰,其實這也是架構師存在的意義之一,
?有一天,在搬磚的時候,突然,你對自己說:“不行,我不能整天做增刪改查,我是要成為程式媛的男人,就讓我自己做一個資料庫讓別人增刪改查吧!”
?說做就做,你跑到某寶上買了一大塊硬碟,接上電腦,放在了自己的房間里,:“這就是我實作資料庫的倉庫了!”
?然后,你想著要做一個資料庫,自己肯定要先畫一個資料庫的藍圖(架構圖)吧!
我們先有點儀式感,給我們要繪畫的架構藍圖檔案起個名字,就叫dggz(大哥關注)吧!
?那有了自己的硬碟,然后第一步,在dggz上畫一個資料倉庫,

?有了資料倉庫,接下來你就考慮一個問題,資料倉庫需要一個磁盤管理器來存取檔案吧,于是乎你就萌生了三個解決方案,
?1.使用目前作業系統提供的檔案系統來作為自己資料倉庫的磁盤管理器,
?2.自己寫一個磁盤管理器?
?3.在現有的檔案系統上加以改造,使這個磁盤管理器適合自己的資料倉庫,
?資料庫經常要做的是拿里面得資料元組出來做事,很明顯現有得檔案系統以檔案為單位并不顯得那么合適,那是否可以考慮自己寫一個磁盤管理器?很明顯,如果能自己寫一個磁盤管理器是最適合咱們資料倉庫的方案了,但是成本過高,時間成本和人力成本都太高,那只有第三種折中的方案了,在現有的檔案系統上加以改造,使它適應我們自己的資料倉庫了,
?說干就干,咱要使現有的檔案系統適應咱自己的倉庫,那咱自己的倉庫就要有一些問題需要解決,
?1.資料項怎么表示呢,就是 姓名,年齡這些資料在倉庫里用varchar和interger 都用bytes表示,但怎么表示這個問題需要我們自己考慮,
? 2.記錄怎么表示,就是資料項的集合,比如說 姓名年齡是user表的模式,那么一條記錄就是 (小明,18),這條記錄在檔案中要怎么表示,
? 3.每次把資料讀入記憶體,不大可能一次一條的讀,那每次肯定讀入一個塊為單位會更合適,那么記錄在塊中怎么組織比較合適呢?
? 4.記錄怎么修改呢?比如說修改后記錄超出塊的范圍等等問題?
? 5.塊要怎么在檔案中表示呢?
?終于,歷經千辛萬苦,咱們解決了以上的問題,對現有的 檔案系統完成了改造,可以在dggz上加上存盤管理器了,

?接下來,咱要考慮一下讀取的效率問題了,資料的讀取如果每次都是直接從磁盤讀出來,那么咱這個資料庫的效率肯定不會特別的高,所以咱在記憶體中肯定要設定一個緩沖區,用來交換資料,保存一些資料,讓交換到磁盤里的次數減少,于是咱可以在dggz上上一塊緩沖區,

?有了這塊緩沖區,肯定需要涉及到緩沖區的管理,考慮以下問題,
?1.緩沖區的結構怎么設計?
?2.緩沖區的置換演算法怎么設計?
?3.緩沖區的怎么管理,就是怎么從磁盤把資料置換到緩沖區?
解決完以上問題,咱們就可以在dggz上畫一個緩沖區管理器了,

?下一步呢?我們要從磁盤里讀資料,但每次讀資料總不能都全表掃描把,肯定需要一個索引,和檔案的管理器吧,用來記錄和管理索引,利用索引,檔案,記錄等資訊,穿過緩沖區讀取倉庫里的檔案,

?有了對咱資料庫操作的整套工具后,就要考慮對外的開放了,需要有SQL陳述句,那定義好咱們的SQL陳述句,就需要有一個查詢的編譯器,

?此時,決議完這些陳述句,肯定需要一個執行這些陳述句的工具,執行引擎就出現了,

?就這樣,咱的一個簡單的資料庫就完成了,但是這樣的資料庫在軟體設計上有諸多的不完善,無法商用,比如說如果資料出現丟失,咱們資料庫有什么辦法恢復嗎?這個時候就需要一個日志和恢復的管理器吧,

?有了日志,咱得考慮下一個事情,如果咱對資料庫的操作,比如說銀行轉賬,A往B的賬戶賺錢,A轉了100萬到B的賬戶,這個時候銀行系統崩潰了,然后恢復,這個時候B的賬戶還沒有轉進100萬,于是乎發生了官司,怎么辦,咱們肯定不會允許這個事情發生,所以咱就考慮把A賬戶減100萬和B賬戶加100萬系結成一組操作,要么都做,要么都不做,我們稱這個東西叫事務,這樣才能保證我們資料庫的正確性和安全性,于是乎,咱就往資料庫里添加了一個事務管理器,當然,事務需要記錄在日志中才安全,

?這個時候資料庫的安全性和正確性得到了滿足,但是資料庫是同時很多人在用的,現在咱們完成的只是單人的使用,如果多個人一起使用,還是會發生比如兩個同時訪問一個資料,一個讀一個寫,就會有不正確的事發生,所以要加上并發控制,當然,并發控制目前主流的還是用鎖,所以我們需要一個鎖表,

?嗯嗯,做系統的都知道,需要管理員,那就來一個資料庫管理員吧,

?然后一個完整的資料庫系統就新鮮出爐啦!
?你滿意的看了看自己的磚,搬得更加賣力了,
?挖了這么多的坑,下一章終于要開始填坑了!下一章先講講存盤器吧!
?最后,還是那句話,大哥姐姐們,碼字不易,來點贊吧,有打賞我也不介意嘿嘿,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/104285.html
標籤:其他
