所謂的資料庫是指一組易於訪問和修改的資料集合。但是,但是一組簡單的檔案也能實現這個功能。實際上,最近簡單的一些資料庫系統如sqllite實現的功能與一組檔案沒有大的差異。但是,sqllite可以算作設計得非常優秀的一組檔案。因為它支援:
通過事務管理保證了資料的安全性和一致性。
大資料快速處理能力,能處理百萬級的資料。
我們現在來了解一下資料庫包含哪些重要的元件,請看這張資料資料庫架構圖。
在寫下這篇文章之前,我已經研究了大量關於如何實現資料庫的書籍、文件、甚至源**。因此,別太在意我為何要這樣設計資料庫的架構圖,以及這些元件為何取這樣的名字。針對這篇文件,我做了一些取捨。真正需要關注的是這些元件承擔的不同職責。 一句話,資料庫是由一組相互互動,功能不同的元件構成的系統。
the process manager
程序管理器。許多資料庫都有專用的程序池或者執行緒池管理。甚至,僅僅為了獲得納秒級的效能提公升,許多現代處理器設計了專用的執行緒,代替作業系統的執行緒。
the network manager
網路管理。對於分布式資料庫來講,網路i/o是乙個關鍵問題。所以設計了專用的網路管理器。
file system manager
檔案系統管理。磁碟i/o是資料庫最關鍵的效能瓶頸(disk i/o is the first bottleneck of a database)。設計乙個檔案管理器能完美的與作業系統的檔案系統互動,甚至替換作業系統的檔案系統是非常主要的。
the memory manager
記憶體管理。為了避免頻繁的磁碟i/o操作,通過乙個塊大的記憶體來快取資料是必須的。但是,有了大的記憶體快取,就需要對它高效的管理。特別是有大量查詢併發訪問記憶體快取的時候。
security manager
安全管理。管理使用者授權和許可權認證。
client manager
客戶端管理。管理客戶端的連線。
backup manager
備份管理。資料庫備份與恢復。
recovery manager
資料庫恢復系統。資料庫崩潰後重啟,保證資料庫的一致性。
monitor manager
監控系統。日誌記錄資料庫的活動狀態,並提供功能監控資料庫系統。
administration manager
系統管理。元資料儲存管理(例如表名、表結構)。提供工具管理資料表結構、儲存空間配置等。
query parser
查詢解析器。sql編譯,檢查查詢語句的有效性。
query rewriter
查詢重寫器。sql前置優化。
query optimizer
查詢優化器。對sql語句做效能上的優化(類似c++編譯器優化**執行路徑,提公升執行效率)。
query executor
查詢執行器。編譯sql**,執行查詢資料庫操作。
transaction manager
事務管理。啟動/提交/回滾事務。
cache manager
快取管理。在讀取資料之前將資料提前載入到記憶體;在修改資料之後將資料持久化到磁碟。
data access manager
資料訪問管理器。操作磁碟上的資料檔案。
接下來的章節,我將重點介紹資料庫如果執行一條sql的查詢操作。通過三部分展開:
- the client manager—客戶端管理
- the query manager—查詢管理
- the data manager —資料管理
關係型資料庫原理
這篇文章是對知乎上如何自己實現乙個關係型資料庫的乙個嘗試性回答,後續會不斷更新。對外資料模型為關係型資料庫,內部的實現主要分成兩大類,一類是disk based,比如mysql,postgres,一類是memory based,後者包括memsql,sap haha,oceanbase。這裡說乙個d...
關係型資料庫 非關係型資料庫
關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...
關係型資料庫 非關係型資料庫
2019 02 25 20 38 36 關係型資料庫和非關係型資料的比較 一 關係型資料庫 關係型資料庫最典型的資料結構是表,由二維表及其之間的聯絡所組成的乙個資料組織 優點 1 易於維護 都是使用表結構,格式一致 2 使用方便 sql語言通用,可用於複雜查詢 3 複雜操作 支援sql,可用於乙個表...