— 作者 謝恩銘 轉載請註明出處
上一課Web探索之旅 | 第二部分第三課:框架和內容管理系統中,我們學習了一些實用的工具。
這一課來看看資料庫吧。
說到“資料庫”,顧名思義,是“資料的倉庫”的意思。
所以資料庫的一大作用就是儲存資料。
為什麼Web領域要有資料庫呢?
資料庫的英語是Database,簡單來說可視為電子化的檔案櫃(儲存電子檔案的處所),使用者可以對檔案中的資料執行新增、擷取、更新、刪除等操作。
它是以一定方式儲存在一起、能為多個使用者共享、具有儘可能小的冗餘度、與應用程式彼此獨立的資料集合。
關係型資料庫和非關係型資料庫
常見的資料庫主要分為關係型資料庫和非關係型資料庫。
-
關係型資料庫,是建立在關係模型基礎上的資料庫,藉助於集合代數等數學概念和方法來處理資料庫中的資料。現實世界中的各種實體以及實體之間的各種聯絡均用關係模型來表示。關係模型是由埃德加·科德於1970年首先提出的,並配合“科德十二定律”。
-
非關係型資料庫,通稱NoSQL(Not Only SQL,“不僅僅是SQL”),隨著網際網路Web2.0網站的興起,傳統的關聯式資料庫在應付Web2.0網站,特別是超大規模和高併發的SNS型別的Web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關係型的資料庫則由於其本身的特點得到了非常迅速的發展。NoSQL資料庫的產生就是為了解決大規模資料集合多重資料種類帶來的挑戰,尤其是大資料應用難題。
常見的關係型資料庫有:
-
MySQL:很著名的開源資料庫,常用於部落格系統。比如我們前一課提到的Wordpress使用的資料庫就是MySQL。
-
PostgreSQL:MySQL的競爭對手。
-
SQL Server:Microsoft(微軟)的資料庫。一般和.NET配合使用。
-
Oracle:Oracle(甲骨文)公司的主要產品。可以說是關係型資料庫中的老大,功能強大,容量也大,但是費用最昂貴,所有一般人們都喜歡使用免費的MySQL。但是對於很多大公司,Oracle資料庫是不可取代的。
-
SQLite:很輕巧,就如它的名字裡有lite(英語“淡的”)這個尾綴一般。在嵌入式領域使用還比較廣泛,比如Android系統預設使用SQLite資料庫。
當然,其他還有很多關係型資料庫。沒有最好的,只有最對的。
講完了關係型資料庫,我們來談談非關係型資料庫:
NoSQL分為四大類:
-
鍵值(Key-Value)儲存資料庫:這一類資料庫主要會使用到一個雜湊表,這個表中有一個特定的鍵和一個指標指向特定的資料。Key/value模型對於IT系統來說的優勢在於簡單、易部署。但是如果DBA只對部分值進行查詢或更新的時候,Key/value就顯得效率低下了。舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB。
-
列儲存資料庫:這部分資料庫通常是用來應對分散式儲存的海量資料。鍵仍然存在,但是它們的特點是指向了多個列。這些列是由列家族來安排的。如:Cassandra, HBase, Riak。
-
文件型資料庫:文件型資料庫的靈感是來自於Lotus Notes辦公軟體的,而且它同第一種鍵值儲存相類似。該型別的資料模型是版本化的文件,半結構化的文件以特定的格式儲存,比如JSON。文件型資料庫可 以看作是鍵值資料庫的升級版,允許之間巢狀鍵值。而且文件型資料庫比鍵值資料庫的查詢效率更高。如:CouchDB, MongoDb。國內也有文件型資料庫SequoiaDB,已經開源。
-
圖形(Graph)資料庫:圖形結構的資料庫同其他行列以及剛性結構的SQL資料庫不同,它是使用靈活的圖形模型,並且能夠擴充套件到多個伺服器上。NoSQL資料庫沒有標準的查詢語言(SQL),因此進行資料庫查詢需要制定資料模型。許多NoSQL資料庫都有REST式的資料介面或者查詢API。如:Neo4J, InfoGrid, Infinite Graph。
NoSQL資料庫在以下的這幾種情況下比較適用:
- 資料模型比較簡單。
- 需要靈活性更強的IT系統。
- 對資料庫效能要求較高。
- 不需要高度的資料一致性。
- 對於給定key,比較容易對映覆雜值的環境。
SQL語言
SQL不同於傳統的程式語言,它是Structured Query Language(結構化查詢語言)的縮寫,是1974年由Boyce和Chamberlin提出的一種介於關係代數與關係演算之間的語言,是一個通用的、功能極強的關係型資料庫語言。
所以NoSQL(非關係型資料庫)是不使用SQL的。
既然資料庫儲存資料,那麼我們如何獲取到這些資料呢,如何操縱它們呢?
對於關係型資料庫來說,我們有SQL語言可以幫助我們。
SQL的基本語句是這樣子的:
SELECT id, name FROM users ORDER BY id DESC
在Web開發中,動態網站的伺服器有資料庫,伺服器向資料庫傳送“SQL查詢”,資料庫返回結果(傳遞資料),伺服器將接收到的資料插入到網頁程式碼的相應地方。
比如,我用賬號frogoscar登入CSDN,那麼CSDN的伺服器會從CSDN資料庫的眾多表格中查詢到frogoscar這個使用者的所有資訊,然後插入到生成的HTML網頁中,再把網頁傳輸給我的瀏覽器,我就能進入自己的賬戶了,我可以操作我的私人資訊:刪除,新增,修改,查詢,這些都是靠SQL語句在CSDN的資料庫裡操作的。
大家可以上W3C中文網站學習SQL的系列教程,有詳細例項:
www.w3school.com.cn/sql/index.a…
動態網站
之前的課程我們已經介紹過靜態網站和動態網站的區別了,這一課我們學習了資料庫,我們終於能把動態網站的工作原理圖補完全了:
- 客戶機的瀏覽器(客戶端)向伺服器請求網頁。
- 伺服器開始生成網頁。
- 伺服器向資料庫發出SQL Request(SQL請求 )。
- 資料庫根據收到的SQL請求,傳輸對應的資料給伺服器。
- 伺服器拿到這些資料,在生成的網頁中插入這些資料。
- 最終伺服器將對每個使用者定製的網站(HTML,CSS和JS寫成)返還給客戶端。
- 客戶端瀏覽器解釋Web網頁檔案,我們就能看到各不相同的網頁了。
總結
-
資料庫:儲存資料的重要工具。分為關係型資料庫和菲關係型資料庫。比較常用的關係型資料庫:MySQL,Oracle,SQlite,等。你可以在它們之間選擇一種你自己喜歡的。
-
NoSQL(非關係型資料庫):可以在大資料和雲時代大展巨集圖。
下回預告
人世間,
萬千情感皆有溫度,
千萬程式碼似有性格。
這裡有原創教程,IT叢林……
和你一起探索程式人生。
微信公眾號「程式設計師聯盟」ProgrammerLeague
我是謝恩銘,在巴黎奮鬥的嵌入式軟體工程師。
個人簡介
熱愛生活,喜歡游泳,略懂烹飪。