之前我們在寫 API 程式的時候,一開始使用寫死在程式裡的資料集合(List),這個方法雖然快速讓我們可以 demo 程式,但是卻非常的糟糕,因為只要重啟程式,所有的變更都會消失。後來筆者自幹了一個讀寫檔案來做 CRUD 的 UserServiceWithFile,雖然可以穩定的保存資料了,但是他卻有另外的缺點:只要有不同的 request 同時要操作這個檔案程式就會掛掉。
這時候要繼續自幹就不容易了,要自己處理 critical section 還有 race condition 非常的麻煩,筆者在大學讀完這些章節、考試過後就忘得差不多了。幸好,我們現在很幸褔,有好多現成的資料庫可以用,直接幫我們處理這些麻煩卻又關鍵的事,今天,我們就來介紹一下資料庫吧。
資料庫簡單來說就是簡單來說就是提供一個讓我們管理資料的資料中心。以下節錄維基百科的解釋:
資料庫,又稱為資料管理系統,簡而言之可視為電子化的檔案櫃——儲存電子檔案的處所,使用者可以對檔案中的資料執行新增、擷取、更新、刪除等操作
一個資料集合只要可以透過電腦系統電子化存取、管理,他就是廣義上的資料庫,像我們之前使用 API 程式存取/讀寫 CSV 檔案來管理資料,它也可以視為一個廣義的資料庫。
但是現在我們提到資料庫,通常就是指以下兩種資料庫系統:
兩種不同的資料庫系統各有不同的特性與優缺點,適合不同的使用情境,關於更多資料庫系統的知識,可以參考這篇文章。本系列文會使用 RDBMS 中的 MySQL 當作範例。這篇 2019 鐵人賽的文章介紹了目前三個主流的 RDBMS 與他們的比較,有興趣的邦友可以參考看看。
MySQL 是目前主流的關聯式資料庫其中之一,最早在 1994 年由瑞典一家公司的團隊 MySQL AB 開發,後來在 2008 年被昇陽(Sun)公司收購,接著在2010 年隨著昇陽被甲骨文(Oracle)收購,MySQL 現在也是甲骨文旗下的產品。
MySQL 一直以來以它的開放、低成本而著名,非常多的個人專案、小公司都會選擇用 MySQL 當作資料庫。雖然 MySQL 最有名的是它的低成本,但並不代表他沒有辦法扛住高流量的商業應用,依然有非常多的大公司選用 MySQL 當作他們的資料庫。
筆者自己寫過 MySQL 與微軟的 SQL Server,個人使用的感覺是,MySQL 語法簡單入門容易,但是有一些比較進階的操作,SQL Server 有內建簡單的語法幫助我們完成,可是 MySQL就必須自幹。例如下面的例子,要用 CountryCode 欄位做分群,然後比 Quantity 排名,SQL Server 可以使用 RANK OVER + PARTITION BY 的語法完成,但是 MySQL 一直到 2018 年才有類似的語法,以前要在 SELECT 語法裡面插入變數運算才有辦法達到相同的效果。
ProductID CountryCode Quantity Rank
----------- ------------ -------- ----
1 TPE 59 1
2 TPE 59 1
3 TPE 34 3
4 TPE 21 4
5 TPE 11 5
2 USA 37 1
4 USA 35 2
3 USA 32 3
5 USA 20 4
1 USA 16 5
不過,MySQL 一直在進步成長,功能越來越完善、方便,現在如果只要做普通需求的服務,用起來已經感覺不到與其他兩家要收費的資料庫有什麼差別了,所以本系列文就以成本還有學習門檻當考量,選用 MySQL 啦。
最後聊聊 MySQL 與 MariaDB。MariaDB 是另外一個 MySQL 的複刻(folk),2010 年昇陽被甲骨文收購之後,部分 MySQL 的開發者擔心 MySQL 的 GPL 授權可能會因為甲骨文公司政策而受影響,於是以 MySQL 的原始碼建立了另外一個 folk,取名為 MariaDB,並確保這個 folk 會一直在 GPL 授權之下。
有趣的是,MySQL 與 MariaDB真的是姊妹,他們的命名都是由開發團隊中的 Michael Widenius 的女兒名字命名。My 是 Michael Widenius 的大女兒,Maria 則是 My 的妹妹。
明天,我們就要來介紹如何在本機安裝 MySQL 與操作它的 GUI 軟體。