資料庫 3 1 資料庫架構

2021-09-28 17:09:54 字數 1918 閱讀 8322

如何設計乙個關係型資料庫?

乙個關係型資料庫應該包括以下內容:

資料庫最主要的功能是什麼?就是儲存資料,因此它會有乙個儲存模組,來負責儲存我們的資料,儲存模組就類似於我們的os檔案系統,將資料最終持久化存入磁碟中,如存入機械硬碟,或者ssd固態硬碟,抑或是它們的磁碟陣列矩陣中。

可是光有儲存是不行的,我們還要組織並用到這些資料,因此咱們需要有程式的例項,用邏輯結構來對映物理結構來,並且在程式中提供獲取以及管理資料的方式,還有必要的問題追蹤機制。

接下來,咱們細分一下程式的模組。

首先我們需要對資料的格式以及檔案的風格進行統一的管理,即把物理資料通過邏輯的形式給組織和表示出來,於是便涉及到了咱們程式的儲存管理模組

(ps:我們需要如何優化儲存效能?咱們都知道,處理資料不可能在磁碟上做,而肯定是讓程式載入到程式空間所在的記憶體裡去做,而磁碟io速率往往是程式執行速度的主要瓶頸,大家可以看到,咱們的機械硬碟,它通過馬達的驅動,盤面的轉動,以及磁頭的移動來查詢資料,這樣的速度遠差於記憶體的查詢效率,即便是通過電流驅動的固態硬碟,雖然擁有比機械硬碟更快的io速度,但是跟記憶體比起來也不是同乙個量級的。因此為了執行效率,咱們要盡可能地減少io,就這個儲存管理功能而言,咱們如果按照逐行去查詢並返回,這頻繁的io會使資料庫的執行效率慢如蝸牛,因為一次io讀取多條資料和單條資料花費的時間並沒有多大的區別,所以我們可以一次性地去讀取多行,以提公升io的效能,所以行就失去了它的意義。那實際上資料庫也是把邏輯儲存單位用塊或頁來表示,每個塊或頁中存放多行資料,這樣讀取的時候,可以將多個塊一起載入進記憶體當中)

作為一款很追求效能的軟體,我們沒有好好利用記憶體,因此呢,為了更快更好地優化我們的程式,我們應該想到做專案的時候的一種普遍做法便是引入快取機制,把取出來的資料塊存放在快取裡,下次需要的時候直接從記憶體返回而不用發生io,這裡需要補充的是,剛剛咱們說到的一次性載入多個塊或者頁,這些塊裡包含資料行,有相當的一部分並不是我們本次查詢所需要的行,但是根據一旦某行資料被訪問了,那麼它周圍的資料也極有可能被訪問的經驗,咱們快取的非本次資料,也能起到優化訪問效率的作用,比如,一次載入進來的這個塊中,它有a,b,c三條資料,我們只需要a的資料,但b和c也會載入到記憶體當中,那按照經驗來說,下次b和c被訪問到的機率是非常大的,那也就是它也能提公升我們的訪問效能。關於如何管理快取有很多的方法,也不能說哪個方法最好,某種方法適應於某個具體的場景。

我們還要能提供給外界的指令來操作我們的資料庫,即可讀的sql語言,那麼我們就需要乙個sql的解析模組,將sql編譯解析,轉換成機器可識別的指令,那麼這個時候為了進一步去提公升sql的執行效率,怎麼辦?老方法,還是將sql快取到我們的快取中,那麼編譯好的sql方便下次來了直接解析就可以了。

大家可以注意到,我們設計程式的時候,要先實現功能,接著再考慮優化,周而復始。這裡還需要補充一點,我們的快取不宜過大,且演算法裡得有淘汰機制,淘汰掉一些之後不常用的資料。此外,我們做的這個sql操作,需要記錄下來,方便我們做資料庫的主從同步,或者災難恢復,因此我們就需要有日誌管理辦法,去對我們的操作做記錄。

我們還需要提供給使用者管理資料的私密空間,即許可權劃分,通俗的講,就是老闆能看到員工的資料,而員工只能看到自己該看到的資料。許可權劃分是我們dba做的事情。

設計系統的時候,除了考慮正常的功能,還要考慮異常的情況,那麼這麼處理異常的情況呢?我們就需要引入異常機制,即容災,當我們的資料庫掛了,該如何恢復,恢復到什麼程度,這些都需要設計。

好了為了進一步提公升查詢資料的速度以及讓資料庫知識併發,咱們還需要引入最能夠突出資料庫特點的兩個模組,即索引鎖模組

資料庫架構

很少談架構方面的事情,主要是因為這確實是個對知識面和知識深度要求很高的領域,無論是開發語言的選擇 的架構,伺服器的搭配 網路的架構 資料庫的架構還是第三方軟體的選用等,每一方面都是個很大的方向,每個方向都值得乙個人去研究一輩子 每每看到某某 的首席架構師之類的人 不過很多是海綿派 總覺得那就是樂於做...

mysql 資料庫 方案 MySQL資料庫架構方案

一 多 單庫結構 這個恐怕是最最簡單的一種方案了,完全沒有資料一致性問題。最大的缺點是無法容災,並且只能承受較小的壓力,不管壓力來自讀或者寫。不過在分布式資料層解 決方案目不暇接的今天,單庫結構可以拓展成多單庫結構來平分壓力。資料庫可以從業務上先進行垂直拆分,將關聯性較強的表放在乙個庫中,將資料變化...

mysql資料庫架構

1.mysql整體邏輯架構 我們先下圖看看mysql整體邏輯架構 mysql s logical architecture 圖1第二層值得關注。這是mysql的核心部分。通常叫做 sql layer。在 mysql據庫系統處理底層資料之前的所有工作都是在這一層完成的,包括許可權判斷,sql解析,行計...