認識MongoDB

閱讀時間約 7 分鐘

※ 什麼是MongoDB?

MongoDB是一個開源、跨平台的非關聯式資料庫,屬於一種文件導向(Document-oriented database)的資料庫管理系統,也就是 NoSQL 數據庫管理系統(DBMS)。

※ 什麼是非關聯式資料庫(NoSQL)?

非關聯式資料庫(NoSQL)的意思是「Not Only SQL」,又稱「文件資料庫」﹔指的是不限定為關聯式資料庫的資料庫管理系統,以混用關聯式資料庫和非關聯式資料庫來達到最佳的儲存效果。NoSQL資料庫由於使用了彈性較高的 JSON 結構,其實可以不需要Schema,也就是沒有Schema架構(因此稱為 "schema-less"或是"Schema-Free")。NoSQL資料庫,可自由定義資料文件(Document)的結構,以及自由新增欄位。NoSQL 資料庫的主要特點是它們可以快速存儲和檢索大量的非結構化或半結構化資料。這使它們非常適合用於需要快速讀寫以及高吞吐量的使用情境,如:即時分析、物聯網(IoT)和大數據應用。

※ 什麼是Schema ?

Schema 是「資料庫綱要」,這份綱要定義一組資料的組成結構,包括資料的名稱、屬性、資料型別等。與此同時,schema 也會定義資料之間的關聯性以及其限制。

例子 定義 To-do List 的schema

const Schema = mongoose.Schema
const todoSchema = new Schema({
name: {
type: String, // 資料型別是字串
required: true, // 代表這是個必填欄位,若未寫 required,表示此欄位非必填。等同於 required: false 的寫法
},
isdone: {
type: Boolean, // 資料型別是布林值
},
})

例子

  • 每筆 todo 資料都有一個叫做 name 的屬性
  • 我們規定 name 屬性和 isDone 屬性:
  1. type - 設定資料型別。
  2. required - 設定必填,也就屬性值不能為空,否則資料庫會拒絕。
  3. default - 設定預設值,也就是在資料生成時,自動帶入的屬性值。

組成 MongoDB 的關鍵元素

  • 文件(Documents)

Document 是儲存資料的基本單位,每個 Document 都是一個 JSON 格式的資料結構。當使用者將 JSON 文件儲存到 MongoDB 時,系統會將文件以 BSON(Binary JSON)格式儲存。BSON 是 JSON 的二進制表示形式,具有更多資料類型和更快的傳輸速度。在執行查詢時,MongoDB 會檢索相應的 BSON 並將其轉換回 JSON 以供使用者查詢。

一個簡單的 Document 可能如下所示:這個 Document 包括了三個欄位,其中地址是巢狀的 Document。

raw-image
  • 集結(Collection)

Collection 是一個包含多個 Document 的容器。Collections 常被用於組織和儲存相關的 Document。例如,一個 Collection 可能包括一間公司所有員工的 Document。每個 Document 紀錄一位員工的詳細資訊。

在操作方面,Collections 提供了許多方法來查詢、插入、更新和刪除 Document。這種設計讓 Collection 非常靈活,能夠適應不同的資料需求和應用場景。

下圖是資料庫、集結和文件之間的關係。MongoDB 內可以有多個資料庫(Database),資料庫中包含多個集結(Collection),集結中則包含多個文件(Document)。

raw-image


  • _id

_id 欄位是文件的主鍵(Primary Key),代表文件的唯一值。每個文件都會有一個獨特的 _id 值,用於確保集合內資料的一致性和準確性。

raw-image
  • 索引(Indexes)

使用者可以在集結中的任何欄位上建立次級索引,次級索引能幫助使用者更快的搜尋 BSON 文件。次級索引允許使用者在不同欄位上進行快速檢索。次級索引在處理巨量資料時尤其重要,因為執行全集結掃描(Collection Scan)的成本非常高。舉例來說,使用者經常需要根據郵件進行查詢,那麼我們就可以在電子郵件地址這個欄位上建立次級索引,這樣就能直接透過電子郵件地址查詢使用者資料。

MongoDB的優勢

(一)高效能

高效能處理大數據:MongoDB可以處理T級量的資料庫,可將眾多資料庫串聯後,交給大數據,例如:Cloudera等去分析。

(二)JSON 文檔資料庫(Document Database)

MongoDB 採用文件資料庫,將每筆資料以 Document 和 Field 的方式組織資料,它能夠匯總非結構化資料,將它們製作成快速且好看懂的資料目錄。

MongoDB-Document-Database

MongoDB-Document-Database

(三)廣泛支援的程式語言

以下是 MongoDB 支援的各種主流程式語言:

C、C++、C#,Erlang、Haskell、Java、JavaScript、Lisp、fibjs、node.JS、Perl、PHP、Python、Ruby、Scala、Go、Rust。

(四)查詢語言功能強大

支援豐富的查詢語言以支援讀寫操作(CRUD),並支持聚合和其它現代用例,例如:地理搜索、圖形搜索、文本搜索。

(五)提供高可用性架構

MongoDB的複製工具(稱為副本集)有自動故障轉移功能,提供資料的高可用性(High Availability)。

(六)無限制的水平擴充

藉由資料分片(Sharding)功能來達到水平式擴充,提高MongoDB的儲存空間與效能。

(七)新增欄位自由靈活

MongoDB擁有非常彈性的Schema,不需事先創建表格,數據可直接寫入並自由添加欄位。

※ 什麼是ODM?

ODM 是針對文件資料庫 (document database) 使用的一種叫「物件映射 (object mapping)」 的技術,主要是讓開發者可以直接使用物件導向的方式操作資料庫,同時也增加程式碼的易讀性與維護性。

Mongoose 是提供給 Node.js 使用的 MongoDB ODM。透過 Mongoose,我們可以用物件導向語法,以更直覺的方式操作 MongoDB 資料庫。

raw-image

※ 為什麼MongoDB 是企業常用的 NoSQL 資料庫?

彈性的資料結構、分散式水平擴充能力及高可用性、跨區域部署之三大特點兼具 SQL 與 NoSQL 的優點,讓企業用戶在大量或非結構化資料的儲存與管理,如圖檔管理、內容管理、Log 管理、客戶資料管理(貼標) 等情境下,有效提升系統效率並降低 RDBMS 授權成本。

    全端網頁開發專業知識分享
    留言0
    查看全部
    發表第一個留言支持創作者!
    你可能也想看
    創作者要怎麼好好休息 + 避免工作過量?《黑貓創作報#4》午安,最近累不累? 這篇不是虛假的關心。而是《黑貓創作報》發行以來可能最重要的一篇。 是的,我們這篇講怎麼補充能量,也就是怎麼休息。
    Thumbnail
    avatar
    黑貓老師
    2024-06-29
    識別危險訊號:自我認識和成長的旅程 導言: 在電視節目《BoJack Horseman》中,節目製作人拉斐爾·鮑伯·韋克斯伯格寫下了一句引人深思的話:“當你戴上玫瑰色眼鏡看別人時,紅旗只是看起來像旗子。” 雖然這句話最初是指戀愛關係中的紅旗,但對於內省和自我認識也同樣適用。我們常常很難認識到自己內部的警示信號,因為我們往往會對自
    Thumbnail
    avatar
    Robert Parkin
    2023-07-19
    食材錄☀柑橘認識史吃過、玩過、用過、聞過、洗過、欣賞過、享受過、接觸過、曾經種植但被毛毛蟲吃到掛掉過。真的是徹底體會柑橘類特別的歡樂力量,非常好玩啊!
    Thumbnail
    avatar
    鈴瀧編
    2022-02-12
    你必须认识当前影响潜力巨大的粉丝经济 Chiliz原文連結:https://zb.house/你必须认识当前影响潜力巨大的粉丝经济-chiliz/ 【本文章轉載自鑄幣局 - 提供專業的加密貨幣行業的研究成果的分析平台。】 “粉丝令牌让Chiliz与加密世界的联系更加紧密,这也说明加密货币将给主流社会的影响潜力巨大。” 项目愿景 团队 Sam Li
    Thumbnail
    avatar
    ZB.House
    2021-12-09
    认识自己  尼采曾说:“聪明的人,只要可以正确认识自己,便什么也不会失去。”由此可知,正确认识自我,是走好人生路的关键,对于自我的评价,因以自己为衡量标准,而不应以外物或他人评价为衡量自我的标准。   以物喜,可能会造成盲目自大,以物悲,可能会造成盲目自卑,对于认识自我,我们应以实际情况为衡量标准。不以物
    avatar
    千岁忧.
    2021-12-03
    實例認識現代產業的複雜,及如何牽動經濟(4):台灣後來的路?不管傳產還是科技業,要能夠傳承就得要說故事,把故事寫成書,經驗能夠傳下去。沒有傳承就只能師徒制一輩子,新血極難加入,失去活力的產業必定走向夕陽,這才是夕陽產業真正的問題。
    Thumbnail
    avatar
    王立第二戰研所
    2020-07-14
    實例認識現代產業的複雜,及如何牽動經濟(3):產業分布及經濟牽連各位以為,少掉幾家髒兮兮工廠沒差嗎?這些中小代工廠養活的人口數以百萬計,今天命脈被中國掌握,哪天波動一下就是數十萬人失業,或是無薪假影響百萬家庭。
    Thumbnail
    avatar
    王立第二戰研所
    2020-07-07
    實例認識現代產業的複雜,及如何牽動經濟(2):傳產的困境生產製程不是只有生產,還有前後處理各種項目。你以為傳產消失很好嗎?這代表的是相關產業,連同工廠附近的基本食衣住都消失掉,表面上關掉一間廠不過100人失業,連動到的終端人數可能超過10,000人。
    Thumbnail
    avatar
    王立第二戰研所
    2020-07-01
    實例認識現代產業的複雜,及如何牽動經濟(1):製程的複雜這個系列要談幾個主題,主要是要讓「非產業界」的人,了解現代產業的複雜,以及相關製程對環境的影響,受眾設定是非工科的人,以文法商組,且沒有在產業界,特別是傳產這一塊的為對象,希望這些朋友在談產業的去留,或是討論各種優惠與補貼,以及環保衛生政策的時候,能夠有更進一步的認識。
    Thumbnail
    avatar
    王立第二戰研所
    2020-06-23
    股票攻略2 — 认识股票 前言 投资心态:我是老板 涨跌原理  涨停跌停 两大风险 危险股票 三种获利 股票费用  交割制度 最佳消息来源 财报3步骤 除权、除息 指数VS个股 四大指标 结语   投资心态:我是老板 想要在股市赚钱,首先要建立老板心态。所
    avatar
    RichWee全球理財投資
    2020-05-18
    股票攻略1 — 认识股票文章索引 前言 历史寻根 何谓股票 股本/缴足资本 股票单位  四种类、四形式 结语 前言 众多理财工具中,股票应该算是最有知名度的明星。若想理财,这个工具必须懂得使用。一起进入股票的世界吧! 历史寻根:集资、分担、比例 地理大发现时期,哥伦布发现新大陆、麦哲伦团队
    Thumbnail
    avatar
    RichWee全球理財投資
    2019-11-06