前言網路上許多網站的運作都需要資料庫系統當作背後的支持,該系統主要功能是將資料建置於資料庫中以便後續給使用者做處理。以往我們使用的是關聯式資料庫系統(RDMBS)將資料做儲存,一般關聯式資料庫進行數據處理時,都會遵循以下ACID原則:
一、A(Atomicity) 原子性:所有操作勢必執行到最後,無法只執行到一半就結束。
二、C(Consistency) 一致性:異動的過程需保持前後資料的一致性。
三、I(Isolation) 獨立性:所提交的執行命令不受另一個執行的影響,避免兩項執行互相衝突。
四、D(Durability) 持久性:假設某一項執行命令正在修改時,另一項命令正在執行相同的部分,只要後者不做資料的提交,前者的數據就不受後者的影響。
但是隨著現今網路上許多網站像是Facebook、Google,每天出現大量的數據資料都需要做儲存,所使用的關聯式查詢條件恐怕無法負荷所需要查找的資料量,但如果是增加關聯式資料庫的儲存節點,提高整體的儲存量,不免也會提高機器的成本花費。
為了解決儲存問題,業者就開始逐步推出分散式系統(Distributed System),NoSQL資料庫的應用也漸漸被注意。
NoSQL簡介NoSQL,也稱作「Not Only SQL(不僅僅只是SQL)」,混用了關聯式資料庫和NoSQL資料庫的方式達到最佳的儲存效果,對於處理巨量資料有很好的效益。
NoSQL有幾項特點:由於NoSQL有水平擴展的特性,只要增加機器就能增加儲存的資料量,而且只需要簡單的機器即可達成,不必花費較多的經費採購較高規格的機器;關聯式資料庫在儲存資料前必須預先分析資料表的Schema欄位才能做儲存,而已確定Schema欄位的表無法想進行欄位的修正將會非常麻煩,NoSQL所採用的儲存方式為Key-Value鍵值儲存,不需預做Schema欄位的分析,每筆資料之間沒有關聯性,可以進行任意的切割。
NoSQL符合CAP定理(又稱作Brewer’s theorem)中的其中兩項。而CAP定理主要組成為:資料一致性(Consistency)、可用性(Availability)及中斷容忍性(Partition Tolerance)。理論上一個分散式資料庫無法同時符合這三種特性,最多只能符合其中兩項。
NoSQL本身強調以Key-Value的格式來儲存資料,Key-Value儲存方法使用的是雜湊表(Hash Table)的方式儲存,一欄儲存關鍵字(Key),另一欄則儲存內容值(Value),利用映射的鍵值當作查詢的依據,提高查詢的速度。
接下來簡單介紹NoSQL與一般關聯式資料庫所儲存的資料差異。關聯式資料庫使用的是多欄位的儲存方式,並搭配至少一個主鍵,如下表一學生列表,「編號」欄位即為主鍵,可用來區別資料。

《表一》學生列表
另一方面,NoSQL的儲存內容只有鍵(Key)跟值(Value),不需要事先設定主鍵,每一筆資料不一定只有一列,同一筆資料不一定只有一個鍵名,鍵值也可空白,因此鍵值沒有資料格式的問題,詳如表二。

《表二》NoSQL資料表內容
以MongoDB為例進行範例介紹市面上有許多利用NoSQL資料庫為設計架構的軟體,我們在此以MongoDB為例進行範例介紹,MongoDB是一種以文件為導向的資料庫,並結合關聯式資料庫及Key/Value欄位儲存的特性來管理資料的應用程式,以下先介紹傳統的RDBMS和MongoDB在術語上的比較,如表三。

《表三》術語比較表
MongoDB目前已經推出線上操作的版本(
https://mlab.com/),不需要下載安裝軟體,非常貼近目前網路充斥的社會。
1.剛進到官網,使用者可依照自己的需求自由添購所需要的空間大小,我們先進入右上角的Log In。

《圖一》(資料來源:MongoDB官網)
2.依序輸入所需的帳號密碼資訊。

《圖二》(資料來源:MongoDB官網)
3.點擊Create New 新增Database。

《圖三》(資料來源:MongoDB官網)
4.我們可以先切換到傳統的畫面來進行編輯。

《圖四》(資料來源:MongoDB官網)
5.進入到Database編輯畫面後,Region部分可以選擇US East(Virginia)及Europe(Ireland),並選擇下方Single-node模式,因為只有這兩項有提供免費的版本,因此我們選擇Free選項。MongoDB version 目前只有3.4.x(MMAPv1)的版本。

《圖五》(資料來源:MongoDB官網)
6.完成後就會顯示已建立的Database列表

《圖六》(資料來源:MongoDB官網)
7.進入該Database後,會有警告提示「A database user is required to connect to this database. To create one now, visit the 'Users' tab and click the 'Add database user' button.」,請先切換到Users頁面設定User資訊。

《圖七》(資料來源:MongoDB官網)
8.設定完後再回來Collections頁面設定Table名稱。

《圖八》(資料來源:MongoDB官網)
9.設定完Collection後,進入該Collection繼續點選Add Document設應個別資料。

《圖九》(資料來源:MongoDB官網)
10.進來後可設定該document的內容,document使用的設定方式為json格式,每個json格式的鍵值(Key-Value)都是兩兩相對,每筆document也可以擁有不同的鍵(Key)。設定完之後點選Create and go back。

《圖十》(資料來源:MongoDB官網)
11.設定完後可以回到Documents頁面查看剛建立的所有資料。

《圖十一》(資料來源:MongoDB官網)
12.並且可以在Start new search下拉的地方選擇[new search]查找已經建立好的資料,這裡的Query條件欄位必須符合json格式才能進行搜尋。

《圖十二》(資料來源:MongoDB官網)
參考資料1.
NoSQL 簡介2.
NoSQL入門指引3.
了解NoSQL不可不知的5項觀念4.
NoSQL/ Key-Value Database5.
雲端時代的 MongoDB 環境建置