1. 程式人生 > >[譯] 數據庫是如何工作(一)介紹

[譯] 數據庫是如何工作(一)介紹

自己 無法 blog 年輕 snap 優化 原因 緩沖 閱讀

原文在這裏how-databases-work

當我回想涉及到關系數據庫的知識點時,我不禁覺得若有所失。它們很多地方會用到。會有很多不同的數據庫:小而有用的 SQLite 到強大的 TealData。但是,只有很少的文章解釋數據庫是如何工作的。你可以自己谷歌一下 “關系數據庫是如何工作”,看看結果數量是多少。此外,那些文章都是很短的。而現在,如果你在尋找最時髦的技術(大數據,NoSQl 或者 JavaScript),你會找到更多深入的文章解釋他們是如何工作 這是因為關系數據庫太舊,太無聊,以致於不能在大學課程、論文和書籍之外解釋嗎?

技術分享圖片

作為開發者,我討厭使用我不懂的東西。再者,數據庫已經被使用40多年,肯定是有原因。這些年來,我花數百個小時去真正理解這些我每天用的黑盒子。關系數據庫

是很有趣的,因為它們(的理論)基於可用性和可重性(useful and reusable concepts)。如果你對數據庫感興趣,而你從來沒有時間或者意願去深入研究這個大概念, 你會喜歡這篇文章。 盡管這文章的標題是明確,但本文的目的不是如何使用數據庫。所以,(本文假定)你應該明白如何寫簡單的join查詢和基本的CRUD操作;否則你可能無法理解這篇文章。這是你唯一需要知道的事,我會解釋其他所有的東西。 我將會從一些計算機科學的東西開始講,比如是時間復雜度。我知道有些人會討厭這概念,但如果你不理解這些東西,你將無法理解數據庫裏面那些精巧的東西。由於這是個大主題,我將會只關註我認為重要的東西,即:數據庫處理 SQL 的方式
。我將只介紹數據庫背後的概念,以便讀到文章的最後,你會對(執行語句時)數據庫引擎下面發生什麽有一個清晰的概念。 由於這是一篇設計很多算法和數據結構的技術長文,所有需要花多點時間去閱讀。一些概念是很難理解的;你可以跳過它,這也能得到整體的概念。 為了讓你更容易理解知識,這文章或多或少分成3部分

  • 低級和高級數據庫組件的概述
  • 查詢優化過程的概述
  • 事務和緩沖池的管理的概述

(由於原本太長太長了,我把它分成幾篇文章,陸續更新)

  1. 回到原點(重新講下算法)
  2. 全文概述
  3. 客戶端管理
  4. 查詢關聯器
  5. 數據管理器
  6. 總結 在寫這篇文章之前,我知道這個主題有多大,我知道要寫一篇關於它的深入文章需要時間。事實證明,我非常樂觀,而且我花了比預期多兩倍的時間,但我學到了很多東西。 如果您想要對數據庫有一個很好的概述,我建議您閱讀研究論文《數據庫系統的體系結構》對數據庫有很好的介紹(共110頁),而且非計算機專業人士也能讀懂。這篇文章幫助我找到了本文的寫作計劃,但沒有像我的文章那樣關註數據結構和算法,而是更多地關註架構概念。 如果您仔細閱讀本文,您現在應該了解數據庫的強大功能。由於這是一篇很長的文章,讓我提醒一下我們所看到的內容:
  • B+ Tree索引的概述
  • 數據庫的全局概述
  • 概述基於成本的優化,重點關註連接運算符
  • 緩沖池管理概述
  • 事務管理概述

但是數據庫包含更多的奇淫巧技。例如,我沒有談到一些棘手的問題,例如

  • 如何管理集群數據庫和全局事務
  • 如何在數據庫仍在運行時拍攝快照(snapshot)
  • 如何有效地存儲(和壓縮)數據
  • 如何管理內存

因此,當您必須在bug多多的NoSQL數據庫和堅如磐石的關系數據庫之間進行選擇時,請三思而後行。不要誤會,一些 NoSQL 數據庫是很好的。但它們畢竟太年輕,並只能解決少數應用關註的特定問題。 最後說一句,如果有人問你數據庫的原理是什麽,你不用逃之夭夭,現在你可以回答:

技術分享圖片

[譯] 數據庫是如何工作(一)介紹