NoSQL MongoDB gudab

NoSQL + MongoDB + gudab介紹與應用

莊興旺 2018/04/27 18:51:07
7033

NoSQL + MongoDB + gudab介紹與應用


簡介

21世紀互聯網的興起,巨量資料在網路上流通,帶動了NoSQL的蓬勃發展。內文將重點介紹:NoSQL的定義和分類、MonogDB的功能和系統架構、資料庫監控工具- gudab、個案研究-影像流程系統、硬體規格建議。

作者

莊興旺


NoSQL + MongoDB + gudab介紹與應用

 

NoSQL介紹

 

NoSQL 的定義

 

NoSQL這個名詞,多數人聽到的解釋為 Not Only SQL,但從字面上很難明白代表的意義。事實上,這個名詞包含多種新興資料庫,故沒有一致的定義。

 

如維基百科在概念不明確的情況下,給了反面解釋。

NoSQL是對不同於傳統的關聯式資料庫的資料庫管理系統的統稱 (維基百科)

 

但是,我們能透過下列多數 NoSQL資料庫的共通特性,劃分 RDBMS NoSQL 資料庫的邊界,而本文後半將重點介紹 NoSQL領頭羊 - MongoDB

1.         21世紀互聯網(Intenet)盛行後誕生。由於家用網路和智慧手機盛行、資料量變大,網路資料交換使用豐富的資料結構 JSONXML

2.         通常有水平擴展(scale-out)的能力。多依照分散式架構設計(不包含圖形資料庫)。

3.         通常不使用關聯模型。不做正規化、不支持SQL語法和JOIN操作。將聚集後的資料作為儲存的最小單位,透過豐富的資料結構,有利於將資料分散到多個節點。

4.         不需要事先建立固定的表格模式,也就是無模式(schema free)。

5.         開放原始碼

  

而用戶對NoSQL的興趣,來自於RDBMS面臨的3大難題。

  1.        巨量資料 

傳統RDBMS是設計在單個節點上運作,但凡需要增加系統資源,垂直擴展(scale-up)所費不貲而且會有硬體瓶頸。反之,NoSQL通常有水平擴展的能力,藉由多個一定水準的商用硬件(x86 Server),分別處理部分的資料,有效打破硬體瓶頸造成的效能問題。

  2.         阻抗不匹配( impedance mismatch  

記憶體和資料庫的資料結構不同,讓開發者無法直覺的處理資料,需要透過ORM解決方案(例.Hibernate)和執行SQL JOIN,造成系統效能不佳。 

另外,若資料欄位有異動時,需要聯繫DBA修改模式,不利開發。 

3.         過於複雜關係 

有時需要從多個表格做JOIN操作,才能呈現複雜的關係,但這種操作嚴重影響系統效能。反之,NoSQL的圖形資料庫,透過寫入資料時,預處理圖形節點間的關係,來保證查詢時的效能。 

 

NoSQL 的分類 

從資料模型的角度,可以劃分成四種: 

1.        文檔資料庫(Document 

廣泛應用在各種場景(不支持事務型系統),與欄位群資料庫相比更適合靈活查詢。 

2.        欄位群資料庫(Column-family 

廣泛應用在各種場景(不支持事務型系統),與文檔資料庫相比更適合寫入操作。 

3.        鍵值資料庫(Key-value 

只能透過key來查詢,並將value視為一個Object,故無法取出Object裡的部分欄位。適合儲存用戶訊息,例如:購物車、web session 

4.        圖形資料庫(Graph

節點與連線所構成的圖形資料結構。適合記錄複雜關係的資料,例如:社群網路、推薦引擎、運輸路線等關係性強的場景。

 
  . NoSQL 的分類

 

前三者為聚集導向的資料庫,適合建立在分散式架構處理巨量資料,但通常不支持ACID Transaction

  . RDBMS 關聯模型 vs NoSQL 聚集導向
 

最後一個圖形資料庫,適合建立在單一伺服器處理複雜關係,支持ACID Transaction,但同樣不支持關聯模型。

  . RDBMS 關聯模型 vs 圖形模型

 

NoSQL CAP 定理

聚集導向的NoSQL,通常設計成分散式架構,而分散式系統有一個著名的CAP定理,指出系統只能同時滿足CAP 當中的兩項。

l   Consistence(一致性)

一致性,不管何時何地,只要請求有所回應,那得到的資料皆為最新,但不保證每次請求都能立即得到結果。

l   Availability(可用性)

保證每一次請求都可以立即得到非錯的結果,但不保證資料是最新的。

l   Partition-tolerance(分區容錯性)

當分散式系統原本通順的網路,因為發生網路延遲或中斷,導致節點之間無法在限定時間完成通信(形成分區),系統仍能正常運行。

 

因此,用戶必需根據應用場景,選擇適合的資料庫。

l   CA(一致性、可用性)

資料庫代表為RDBMS, Greenplum, Vertica …,通常在水平擴展上不太強大。想像兩個節點(XY),對應用程式可用,為了X節點更新時滿足一致性,故XY需要溝通協調至一致,不能有分區,故犧牲分區容錯性。

l   CP(一致性、分區容錯性)

資料庫代表為MongoDB, Hbase, Redis …,與符合AP的資料庫相比,通常寫入效能較低。想像兩個節點(XY),分處"分區"兩側(彼此無法溝通),為了X節點更新時滿足一致性,故Y需要對應用程式不可用,避免取到舊資料,故犧牲可用性。

l   AP(可用性、分區容錯性)

資料庫代表為Cassandra, Dynamo, CouchDB …,與符合CP的資料庫相比,通常應用程式對一致性的要求較低。想像兩個節點(XY),分處"分區"兩側(彼此無法溝通),為了分區時滿足可用性,故允許X更新時造成與Y資料不一致,但可能讓多個應用程式存取到不同數值,故犧牲一致性。

 

Q. 想一想,MongoDB歸類於CAP哪兩者交集?

  . CAP - MongoDB

 

MongoDB介紹

資料庫排名

l   DB-ENGINES 調查報告,MongoDB NoSQL 的第 1 名,所有資料庫的第 5 名。

  . DB-ENGINES

 

l   Stackoverflow 調查報告,MongoDB是最多人想嘗試(Wanted)的第1名,是最多人喜愛(Loved)的第7名。

  . Stackoverflow

 

基礎認識

MongoDB 是現在最流行的 NoSQL 資料庫,提供用戶:

l   加速開發效率

l   處理大量資料

l   降低成本支出

 

小典故

l   名字起源於 "humongous" (堆積如山)

l   創始者希望使用者覺得簡單自然,因此 Logo 是一片葉子。

  . MongoDB Logo

 

設計理念採用Nexus架構,也就是集RDBMSNoSQL兩家的優點。

l   RDBMS:豐富的查詢語法、強一致性、企業級工具

l   NoSQL:靈活的資料結構、水平擴展的效能、全球化佈署

  . Nexus Architecture

 

依個人經驗,總結MongoDB 6大特點。

1.         非結構化:適合儲存非結構化、半結構化(JSON,XML)資料。

2.         模式自由(schema free):開箱即用,不用預定義。

3.         副本集:透過複製,讓多個節點維護相同資料,可分散讀取請求,提高讀取效能。

4.         分片叢集:透過分片,讓資料分散到多個節點,可分散寫入請求,提高寫入效能。

5.         儲存引擎:可根據應用場景,抽換儲存引擎。

Ø  MMAPv1:早期的引擎,表現良好。

Ø  WiredTiger3.0版本後預設的引擎,提供壓縮和高效能。

Ø  In-memory:資料不落地,放在記憶體中。

Ø  Encrypted engine:資料落地時,檔案額外加密。

6.         UI工具:工具非常豐富,例. gudabRobo 3TOps ManagerCompass …

  . 6 大特點

 

MongoDB還有其他功能特色,包含但不限於以下特點:

免費、開源、豐富的查詢語法、支持次級索引、對開發者友善、容易佈署、參考文檔豐富、學習曲線低、部分近似 RDBMS

 

RDBMS面向切入

下面從 RDBMS 4 個面向,和 MongoDB 做比較

1.         執行檔名稱

l   mongod是啟動DB用的執行檔

l   mongo是與mongod交互的shell,採用 JavaScript interface

  . 執行檔名稱

 

2.         術語和概念

l   術語的差異Table/CollectionRow/Document

l   觀念的差異 Join/EmbeddingSchema Fixed/Schema FreeScale-up/Scale-out

  . 術語和概念

 

3.         資料模型

l   Relation模型:採用SQLJOIN操作(查詢多個表格)。

l   Document模型:採用 Embedding方式,避免多次查詢。

  . 資料模型

 

4.         CRUD 語法

下列依序為SQLmongo shell新增、查詢、修改、刪除的語法對照。可以發現,MongoDB的語法較符合Object-Oriented

l   INSERT INTO peopleuser_id, age, status VALUES "bcd001", 45, "A"

Ø  db.people.insertOne { user_id: "bcd001", age: 45, status: "A" }

 

l   SELECT * FROM people

Ø  db.people.find()

 

l   UPDATE people SET status = "C" WHERE age > 25

Ø  db.people.updateMany { age: { $gt: 25 } },   { $set: { status: "C" } }

 

l   DELETE FROM people WHERE status = "D"

Ø  db.people.deleteMany { status: "D" }

 

MongoDB系統架構

Standalone 單機

l   適合測試環境、快速開發。

l   預設為27017埠。

  . Standalone

 

Replica Set 副本集

l   適合正式環境、資料量小、資料量固定。

l   透過複製(Replication),由多個節點維護同一份資料,能有效提高讀取效能。

l   MongoDB採用主從式複製,主節點(Primary)接受應用程式讀寫操作,而從節點(Secondary)僅接受讀操作。

l   提供高可用HA,屬於active-standby機制。當Primary掛掉時,由Secondary 提供熱備份,從Secondary重新選出新的Primary做容錯移轉(fail-over)。

l   Primary記錄應用程式的操作日誌(oplog),作為Secondary的同步源。

  . Replica Set

 

Sharded Cluster 分片叢集

l   適合正式環境、資料量大、資料量持續增長。

l   透過分片(Sharding),將一份資料分散到多個節點,能有效提高寫入效能。

l   MongoDB透過Routermongos)作為應用程式的入口,將整個分片叢集視為單機資料庫,有效降低開發複雜度。而Config Server會記錄路由規則等中繼資料。

l   建議在巨量資料的情境,一開始就使用分片叢集。因為等資料量過多才分片,會造成大量資料分流其他分片,不僅吃資源而且費時。

  . Sharded Cluster

 

gudab介紹

企業級MongoDB監控管理平台

gudab產品官網https://www.gudab.com/cht/#Download,提供 WindowsLinux兩種版本下載。

  . gudab 官網

 

gudab Enterprise滿足企業級MongoDB維運最重要的三大功能:監控、告警、備份,若您有其他考量,可以使用免費版的 gudab Express

  . 版本差異

 

6大模組與特色

gudab提供企業環境所需之各種管理功能,包含系統監控、備份還原、儀表板、異常告警、活動與使用者管理等模組。

  . 6 大模組

 

6大特色

1.         叢集架構自動偵測

Auto-discovery 自動偵測並描繪系統拓樸,將所有叢集內MongoDB自動列出,並顯示主機型態與清單以便設定進行監控。若Replica SetSharded Cluster有多個成員時,無需一一輸入FULLNAMEhost:port 加入監控,只要輸入其中一員,就能把整個叢集相關成員加入監控。

  . 自動偵測

 

2.         指標監控

可針對CPURAMDiskConnectionIndexThroughput等超過30種以上指標進行監控,透過即時圖表,顯示系統狀況。MongoDB本身提供系統指令,查詢指標性能,而gudab 將其記錄下來,根據時間顆粒,做成時間序列圖呈現。

  . 指標監控

 

3.         系統告警

透過伺服器清單以及監控指標,管理者可個別針對伺服器設定所有監控指標之告警觸發動作,支援E-mailSNMP等告警通知方式。並且gudab還提供用戶設定例外時間,讓資料庫在預期的時間下線,系統不會持續發信告警。相比常見的 NagiosCacti等監控工具,gudab提供UI操作,不用在小黑窗維護多組配置檔,只需要簡單的輸入然後click即可。

  . 系統告警

 

4.         系統活動日誌

記錄受監控之MongoDB Server的活動歷程,目前只有簡單的事項(開啟、關閉),gudab後續將完善此功能,以利稽核作業。

  . 系統活動日誌

 

5.         個人化儀錶板

提供管理者針對監控指標,透過加入我的最愛方式,自行設定儀表板組合,以利日常監控管理工作(重點監控、截圖做成報表 )。

  . 個人化儀錶板

 

6.         備份還原

gudab是透過加入Delayed Secondary的方式,記錄一份1hr前(預設)的data files(全備),並另外記錄oplog(差異備份)。於人工全備還原後(copy-paste),中間差異的資料,可以透過gudab進行差異備份以及匯出與匯入還原,並可進階設定監控目標。

  . 備份還原

 

個案研究

實際案例

某企業影像流程系統採用 IBM FileNet,使用多年在資料大量累積,且流程邏輯日益複雜後面臨以下問題。經2017年導入新一代影像流程管理系統tribis後,有效解決問題,大幅增加營運效率。

 

問題

l   FileNet 維護費用昂貴

l   系統效能日益惡化

l   原產品設計潛藏問題

n   流程與表單資料不同步

n   影像資料受限原產品編碼方式,無法直接查詢

  . 既有系統架構

 

解決方案

MongoDB 取代 FileNet CE,無需改動表單系統中介元件間的API

1.         使用MongoDB 來管理保單影像檔資料,Binary檔案直接存進MongoDB中,並針對該檔案定義此檔案屬性描述(如受理編號),以便於快速搜尋檔案。

2.         應用系統透過MongoDB API 來存取保單影像資料,以Replica Set機制來提供資料備份與系統備援。

  . 新一代影像流程管理系統 tribis 架構

 

透過GridFS API 一次查詢,取得完整保單資料存到保單物件中 (屬性描述 + 實體檔案)。GridFSMongoDB的一個規範,在存取大於16MB 的資料時,會寫入2collections

  . GridFS 儲存方式

 

l   屬性描述:檔案名稱、檔案型態、檔案大小

l   實體檔案:切分後的二進位資料,每筆以255kB為限。

  . GridFS 資料範例

硬體規格建議

巨量資料的建議架構

根據實務經驗,設計的考量如下:

l   雙中心備援架構

l   實現雙中心就近存取資料 Data Center Awareness

l   雙叢集系統

n   第一層系統放近期資料

n   第二層系統放歷史資料

l   最小編制至少12 Data Node

n   第一層系統 Replication Factor = 3 (會有2份副本)

n   第二層系統 Replication Factor = 2 (會有1份副本)

  . 巨量資料架構

 

依節點角色建議規格

l   Data Node

泛指儲存實際資料的實例 standalone, primary, secondary,需裝在一定水準的 x86 ServerEg. 12 physical cores, 256GB RAM)。建議裝在本機、不建議裝在 VM。建議採用本地儲存、而非共同儲存設備(如 SAN NAS)。建議每個 Data Node 獨立一台 x86 Server(專屬機)。

 

l   non- Data Node

泛指沒有儲存實際資料的實例 mongos, configsvr, arbiter,可裝在等級較低的 x86 Server VMEg. 4 physical cores, 16GB RAM),建議 Mongos Server AP Server 裝在同一台,數量視 AP Server 的數量決定。建議 Configsvr Server 獨立裝在等級較低的 x86 Server。建議 Arbiter Server 裝在 VM 上即可。

 

估算硬碟大小範例

l   經驗

通常影響 MongoDB 效能的資源因素是 RAM,故可從 RAM 大小來反推硬碟大小。若單台 x86 規格為 12 cores, 256GB RAM,標準案例能保證有效處理 2TB的資料量。

 

l   理由

至少需將 index 放入 RAM ,才能保證資料庫效能。通常 index size 為資料量的 10% (需視實際案例),故 256GB RAM 能支持 2.5TB 的資料量,通常會抓 20%緩衝,則實際支持的資料量為 2.5TB x 80% = 2TB

莊興旺