後端工程師的第一堂課 (15) : 資料庫 — 介紹與比較
這是篇共 30 篇的後端領域入門系列文章,預計 1 -2 週新增 1 個新文章。
在後端領域有許多資源在告訴我們怎麼寫好 Python, Golang, Java, PHP … 等各種程式語言。但卻很少告訴我們怎麼學會 Web 後端領域 的知識。
希望你可以透過這篇文章,搭配你正熟悉中的某門任何程式語言,讓你順利入門 Web 後端 :)
【後端工程師的第一堂課】全系列: https://medium.com/@johnliutw/list/da301cc31b15
從這篇開始,我們會開始進入 資料庫 的領域。資料庫可以說是後端工程師,每天都會跟他泡茶聊天維繫感情的領域,而資料庫到現今的發展,也逐漸有幾家獨霸的廠商。此外,因為不同的問題解決方向,發展出所謂的 NoSQL 這類特別的資料庫類型。
NoSQL 也是現代化必知的資料庫類型,不過首先我們會先介紹的是 關聯式資料庫(RDBMS) ,NoSQL 會在之後的章節再特別跟大家介紹!
此篇會介紹四個,筆者認為目前使用上較常見的資料庫系統: MySQL、 PostgreSQL 、 Microsoft SQL Server、Oracle Database
常見重要名詞解釋
query
: 指的是對資料庫作查詢時,會寫出的資料庫 SQL 程式語言,所組合而成的語句。transaction
: 交易功能,有些資料庫的操作流程,會一次需要多個 query ,而 transaction 的功能,就可以把這麼多的 query,當作一個統一的單位來操作,是設計安全且可靠的資料庫系統,不可或缺的一環。
MySQL
隆重介紹,鐺鐺鐺,幾乎是現在資料庫系統前兩把交椅的 MySQL~~~ MySQL 會這麼風靡的原因,主要是因為他有下列幾項優點:
- 開放原始碼,更新快速
因為開放原始碼的關係,一直會有來自社群的更新反饋,驅使 MySQL 的官方持續強化這個資料庫軟體,每年的技術研討會都會看見許多新的嘗試被發表。 - 相容於各個不同的程式語言、作業系統
不管是哪種語言、作業系統的工程師,都能快速的簡單設定後,開始使用 MySQL,不會被任何平台所限制。 - 具有多執行緒,能充分利用資源做運算
簡單來說, MySQL 能同時處理好幾份工作,盡可能不讓電腦有閒置的資源。 - 社群活躍,資源眾多
開發階段遇到的任何問題,幾乎都可以在 Google 上找到答案,或是各大技術社群都會提供協助。或是能在回報問題後,很快的獲得協助與回饋。 - 使用此資料庫軟體的成本極低
如題,不管是針對 $$ 或是時間而言,成本都很低廉。
但相對於優點,他也有以下的缺點
- 性能較差,適合中小型應用程式
MySQL 的免費公開版性能一直是個罩門,不過對於中小型應用程式綽綽有餘,但當使用者人數和流量漸升,勢必是個問題,主要是跟核心設計架構有關。 - 安全性
MySQL 的安全機制相較其他資料庫是較薄弱的,機制上設定較為複雜,且非標準化機制。
最後要提醒大家,MySQL 跟 MySQL Workbench 不一樣喔!!很多新手都會搞混這兩者,並卡很久。
MySQL 是沒有介面的,因此可以透過像 MySQL Workbench 或是 PHP myAdmin 這類軟體,來用介面的方式操作 MySQL 資料庫,非常重要,請各位讀者一定要牢牢記住喔!!
PostgreSQL
PostgreSQL 是最常拿來和 MySQL 比較的資料庫系統,因為他有和 MySQL 高度重疊的特性,因此使用上來說,其實如果沒有特別的需求,筆者認為兩者都是可以在通用情境下,隨意擇其一的資料庫系統。
優點:
- 更加開放,貼近社群
跟 MySQL 相同,都為開源軟體,但 Postgre 的設計上又更加以社群需求為導向去設計,畢竟 MySQL 目前是屬於非常有名的金錢怪獸 Oracle XD - 商業應用導向
設計更新皆以商業應用導向為主,像是最重要的 transaction ,資料的交易機制,擁有更嚴格的測試驗證和設計機制。 - Store Procedure 和 View 功能強化
Store Procedure 是類似資料庫裡的 函式 功能,可以在資料庫裡撰寫邏輯 。View 則是把資料庫的複雜查詢語句,直接儲存起來,當做一個 table ( 資料表 )。
在這種複雜的應用上,具有比 MySQL 更強的機制。 - 地理結構資料類型
PostgreSQL 非常適合製作有地理相關功能的應用程式,除了提供專屬的資料類型,也提供許多相關的資料庫函式,非常方便。
缺點:
- 結構龐大
PostgreSQL 因為有許多商業性的功能應用,因此容量大小上較為巨大,可能對於較小型的伺服器是個負擔。 - 複雜的查詢會導致效能低落
對於比較複雜語句的查詢,會有較低的效能,主要是因為 PostgreSQL 軟體本身架構的緣故。
Microsoft SQL Server
Microsoft SQL Server 是偉大的微軟公司推出的資料庫系統軟體,我們先別說他遠到不行的親戚 Access (或許連親戚都不算?)。而微軟推出的這個資料庫軟體,非常微軟也就是不是微軟相關的開發應用,根本不能用,或是用不起來。
不過那也是過去的事情。
在現代, MSSQL 不停的提升其相容性,有越來越多的非微軟應用程式,要直接跟 MSSQL 做串接,因此筆者認為這會是很重要,常用的 SQL 軟體。
優點:
- 工具整合性
微軟生態系的雙面刃,對於微軟相關的開發工具都有非常好的整合應用,
不管是報表、商業智慧( BI ) 相關的功能,或是和 C# 相關程式的對接,都非常的流暢好用。 - 使用的學習曲線低
Ms SQL Server 的學習曲線相較低,且不需要一些繁瑣的設定,並自帶資料庫介面操作工具,新手也能快速開始使用。 - 嚴格的交易安全與控制
對於資料庫 transaction 的安全控制非常良好,畢竟是大軟體商經營的DB 伺服器,因此這部分算是基本盤。
缺點:
- 較為封閉的開發環境
基本上是屬於原始碼封閉的開發環境,因此社群上的討論度比較低,雖然隨著許多開發者文件日漸開放,但仍是屬於 proprietary software ( 專有軟體)。 - 較為笨重
由於對於資料庫技術不是微軟 Team 主打的方向,因此使用了稍嫌龐大、資源吃重的資料庫引擎,會造成伺服器本身的資源負載量較大。
Oracle Database
Oracle Database 是甲骨文公司推出的資料庫系統,基本上,是純粹針對大型公司行號推出的資料庫,因此在一般新創、個人開發上,極少使用 Oracle 資料庫。但會是較有歷史的組織,例如銀行、公部門,蠻有機會看見的資料庫系統。
優點:
- 極高的安全性
由於針對大型公司設計的緣故,在安全性機制的設定上,具有最高認證級別的ISO標準認證。 - 效能出色
在從事各種大型運算,或查詢上,是經過 TPC 組織( 專門執行商用負載 )的認證,效能可以說是笑冠全主流資料庫系統。 - 功能齊全、強大
具有多種資料儲存格式可以選擇,還有各式能夠自行制定的功能,例如同義詞、套件等等不同的模塊。
缺點:
- 使用成本昂貴
基本上免費版是不太能用的,因此大部分都是在公司使用付費版,而付費版的價格較為高昂,相對應的硬體設施也有一定的要求。 - 學習成本高
Oracle 是一個比較有技術含量的資料庫系統,對於新手來說,要快速學會核心的應用比較吃力些,需要較為 Senior 的技術開發者協助。
基本上資料庫的選擇,也是根據自己目前的需求,去規劃設計,因此也沒有用哪個一定好唷~( 但筆者是開放派的啦 XD