第243期 / January 5, 2018

研發新視界

分享到臉書!分享到維特!分享到噗浪!分享到Google+!分享到微博!轉寄友人友善列印

NoSQL介紹

作者/林侑立

[發表日期:2017/12/5]

前言

網路上許多網站的運作都需要資料庫系統當作背後的支持,該系統主要功能是將資料建置於資料庫中以便後續給使用者做處理。以往我們使用的是關聯式資料庫系統(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 Database
5.雲端時代的 MongoDB 環境建置