原文在這裏how-databases-workhtml
當我回想涉及到關係數據庫的知識點時,我不由以爲如有所失。它們不少地方會用到。會有不少不一樣的數據庫:小而有用的 SQLite 到強大的 TealData。可是,只有不多的文章解釋數據庫是如何工做的。你能夠本身谷歌一下 「關係數據庫是如何工做」,看看結果數量是多少。此外,那些文章都是很短的。而如今,若是你在尋找最時髦的技術(大數據,NoSQl 或者 JavaScript),你會找到更多深刻的文章解釋他們是如何工做 這是由於關係數據庫太舊,太無聊,以至於不能在大學課程、論文和書籍以外解釋嗎?算法
做爲開發者,我討厭使用我不懂的東西。再者,數據庫已經被使用40多年,確定是有緣由。這些年來,我花數百個小時去真正理解這些我天天用的黑盒子。關係數據庫是頗有趣的,由於它們(的理論)基於可用性和可重性(useful and reusable concepts)。若是你對數據庫感興趣,而你歷來沒有時間或者意願去深刻研究這個大概念, 你會喜歡這篇文章。 儘管這文章的標題是明確,但本文的目的不是如何使用數據庫。因此,(本文假定)你應該明白如何寫簡單的join查詢和基本的CRUD操做;不然你可能沒法理解這篇文章。這是你惟一須要知道的事,我會解釋其餘全部的東西。 我將會從一些計算機科學的東西開始講,好比是時間複雜度。我知道有些人會討厭這概念,但若是你不理解這些東西,你將沒法理解數據庫裏面那些精巧的東西。因爲這是個大主題,我將會只關注我認爲重要的東西,即:數據庫處理 SQL 的方式。我將只介紹數據庫背後的概念,以便讀到文章的最後,你會對(執行語句時)數據庫引擎下面發生什麼有一個清晰的概念。 因爲這是一篇設計不少算法和數據結構的技術長文,全部須要花多點時間去閱讀。一些概念是很難理解的;你能夠跳過它,這也能獲得總體的概念。 爲了讓你更容易理解知識,這文章或多或少分紅3部分數據庫
(因爲本來太長太長了,我把它分紅幾篇文章,陸續更新)數據結構
可是數據庫包含更多的奇淫巧技。例如,我沒有談到一些棘手的問題,例如架構
所以,當您必須在bug多多的NoSQL數據庫和堅如磐石的關係數據庫之間進行選擇時,請三思然後行。不要誤會,一些 NoSQL 數據庫是很好的。但它們畢竟太年輕,並只能解決少數應用關注的特定問題。 最後說一句,若是有人問你數據庫的原理是什麼,你不用溜之大吉,如今你能夠回答:數據結構和算法