現在我們可以看看數據庫內部都有什麼組件。一個數據庫就是容易訪問和修改的信息集合,實際上,一組簡單的文件就可以做到。最簡單的數據庫SQLite就是由一組簡單文件組成的,並且是一組精心設計的一組文件,它允許你:
- 通過事務保證數據的安全性和一致性;
- 即時海量數據也能保證快速處理數據。
通常,一個數據的組件視圖如下:
在寫下這部分內容之前,我閱讀了很多書籍和論文,每一個都有其特有的方式來描述數據庫。因此就不要糾結我怎麼組織數據庫,或者我怎麼命名這些組件,因爲我已經爲此考慮良久來適合這篇文章。不同的組件並不重要,重要的是將一個數據庫劃分爲多個組件及其之間的聯繫。
核心組件
- 進程管理器:許多數據庫都包含一個被管理的進程或線程池。而且爲了支持納秒,很多數據庫使用它們自己的線程而不是操作系統線程。
- 網絡管理器:網絡IO是一個很重要的議題,尤其對於分佈式數據庫,因此一些數據庫有它們自己的網絡管理器。
- 文件系統管理器:磁盤IO是數據庫的第一瓶頸,因此用一個管理器來完美的處理操作系統文件系統,甚至取而代之就極其重要。
- 內存管理器:爲了避免磁盤IO的瓶頸,一個大的內存是必要的。但是如果你處理一個很大的內存,那就需要一個高效的管理器,尤其是當你有大量併發的使用內存的查詢請求時。
- 安全管理器:用於管理身份認證和用戶權限。
- 客戶端管理器:用於管理客戶端連接。
- …
工具
- 備份管理器:保護和恢復數據;
- 恢復管理器:宕機後保證數據狀態的一致性,並正常重啓;
- 監控管理器:記錄數據庫的行爲,並提供工具來監控;
- 數據庫管理器:存儲元數據(像表的名字和結構),並提供工具管理數據庫、Schemas、表空間…
- …
查詢管理
- 查詢解析器:檢查查詢語句是否有效;
- 查詢重寫器:預優化查詢;
- 查詢優化器:優化查詢;
- 查詢執行器:編譯並執行查詢語句;
數據管理
- 事務管理器:處理事務;
- 緩存管理器:在從磁盤讀或寫之前,把數據先放入內存;
- 數據訪問管理器:訪問在磁盤上的數據。
這篇文章的其餘部分,我會聚焦於一個數據庫如何管理一個查詢的一下過程:
- 客戶端管理
- 查詢管理
- 數據管理(包括數據恢復)
下一章節我們首先介紹客戶端管理。