国产三级农村妇女在线,国产精品毛片a∨一区二区三区,国产乱子伦视频大全,国产精品色拉拉,国产欧美日韩一区二区三区,

首頁 > 技術 > 數(shù)據(jù)庫

mongodb基礎知識:什么是文檔型數(shù)據(jù)庫?

數(shù)據(jù)庫 2022-12-07 20:13:39

mongoDB 是一個「文檔型數(shù)據(jù)庫,旨在簡化開發(fā)和擴展」。

這里很明顯的確定了 mongoDB 的部分優(yōu)勢,那就是「簡化開發(fā)和擴展」,那它是怎么簡化開發(fā)和擴展的呢?這就是需要我們后面認真的去研究了。

然后,又提到了一個關鍵的詞,「文檔型數(shù)據(jù)庫」,好了,到這里沒有聽過的朋友就蒙了,所以,我們往下看

什么是文檔型數(shù)據(jù)庫?

緊接著官方就給了說明,「MongoDB中的記錄是一個文檔,它是由字段和值對組成的數(shù)據(jù)結(jié)構(gòu)。MongoDB文檔類似于JSON對象。字段的值可以包括其他文檔,數(shù)組和文檔數(shù)組」。

這句話其實講的已經(jīng)非常明了了,它記錄的是一個文檔,所以相比 Mysql 這種關系型數(shù)據(jù)庫來說,moon 第一個想到的就是,「不用寫 DDL 語句來維護表字段的關系了」,文檔里面,你想怎么存就怎么存。

后面官方這里提到了文檔數(shù)據(jù)庫的「優(yōu)點」:

  • 1.文檔(即對象)對應于許多編程語言中的內(nèi)置數(shù)據(jù)類型。

也就是說說文檔內(nèi)的「數(shù)據(jù)類型是自己定義」的,可以對應不同編程語言中的各種內(nèi)置數(shù)據(jù)類型

  • 2.嵌入式文檔和數(shù)組減少了對昂貴連接的需求。

最直白的說就是類似于 Mysql 當中的 Join 語句少了

  • 3.動態(tài)模式支持流暢的多態(tài)性。

這句話的 moon 是這樣理解的,由于文檔內(nèi)容是自定義的,所以會有各種格式,比如下面這種格式就體現(xiàn)了其多態(tài)性

普通電話,具有打電話發(fā)短信的功能
{
?"type":?"basic_phone",
?"message":1,
??"call":1
}
iphone,具有打電話發(fā)短信的功能,并且還能玩游戲
{
?"type":?"iphone",
?"message":1,
??"call":1,
??"game":1
}

集合/視圖/按需實例化視圖

MongoDB 將文檔存儲在集合中。集合類似于關系數(shù)據(jù)庫中的表。

這句話就很好理解了,我就不解釋了

除集合外,MongoDB 還支持:

  • 只讀視圖(從MongoDB 3.4開始),和 SQL 的視圖沒有什么差異,視圖是基于表/集合之上進行動態(tài)查詢的一層對象,可以是虛擬的,也可以是物理的(物化視圖)。
  • 按需實例化視圖。從4.2版本開始,MongoDB 為 aggregation pipeline 添加了 $merge 階段。此階段可以將管道結(jié)果合并到現(xiàn)有集合中,而不是完全替換現(xiàn)有集合。此功能允許用戶創(chuàng)建按需物化視圖,每次運行管道時都可以更新輸出集合的內(nèi)容。

主要特性

后面就介紹到了 mongoDB 的一些主要特性

  • 高性能

    • 1.對嵌入式數(shù)據(jù)模型的支持減少了數(shù)據(jù)庫系統(tǒng)上的I / O操作。

「什么是嵌入式的數(shù)據(jù)模型呢」?

MongoDB 提供高性能的數(shù)據(jù)持久化。特別是, 對嵌入式數(shù)據(jù)模型的支持減少了數(shù)據(jù)庫系統(tǒng)上的 I / O 操作(不用連表查詢了)。索引支持更快的查詢,并且可以包含來自嵌入式文檔和數(shù)組的鍵。

「為什么嵌入式模型可以減少數(shù)據(jù)庫系統(tǒng)上的 I / O 操作?」

  • 豐富的查詢語言

MongoDB 支持豐富的查詢語言以支持讀寫操作(CRUD)以及:數(shù)據(jù)聚合 文本搜索和地理空間查詢。

「其實數(shù)據(jù)庫的核心作用就是兩個,存儲+查詢」,各種不同的數(shù)據(jù)庫幾乎都是圍繞著這兩個點去設計的,所以查詢方式也是非常重要的,MongoDB 并「不支持 sql 語句查詢」,但是對于已經(jīng)熟悉 sql 語句查詢的人來說,官方給了我們一個很簡單的理解方式,就是 sql 查詢和 mongo 查詢的對照

如上圖?https://docs.mongodb.com/v4.2/reference/sql-comparison/

SELECT?*?FROM?people?=?db.people.find
------------------------------------
SELECT?user_id,?status?FROM?people?
=?
db.people.find(
????{?},
????{?user_id:?1,?status:?1,?_id:?0?}
)
------------------------------------
SELECT?user_id,?status?FROM?people?WHERE?status?=?"A"
=
db.people.find(
????{?status:?"A"?},
????{?user_id:?1,?status:?1,?_id:?0?}
)

這樣是不是就很容易去理解了

  • 高可用

MongoDB 的復制工具(稱為副本集)提供:

1.「自動_故障轉(zhuǎn)移」2.「數(shù)據(jù)冗余」。

副本集是一組維護相同數(shù)據(jù)集合的 mongod 實例,提供了冗余和提高了數(shù)據(jù)可用性。

  • 水平拓展

MongoDB 提供水平可伸縮性作為其_核心_ 功能的一部分:分片將數(shù)據(jù)分布在一個集群的機器上。從 3.4 開始,MongoDB 支持基于分片鍵創(chuàng)建數(shù)據(jù)區(qū)域。在平衡群集中,MongoDB 僅將區(qū)域覆蓋的讀寫定向到區(qū)域內(nèi)的那些分片。

  • 支持多種存儲引擎
    • WiredTiger 存儲引擎(包括對靜態(tài)加密的支持)
    • 內(nèi)存存儲引擎。
    • MongoDB 支持多個存儲引擎:

另外,MongoDB 提供可插拔的存儲引擎 API,允許第三方為 MongoDB 開發(fā)存儲引擎。

這其實也是「類似于 mysql 存儲引擎可拔插的設計」,比較容易理解

架構(gòu)

作為一個新學習的數(shù)據(jù)庫,「架構(gòu)圖也是我們了解其信息的重要手段之一」

我們可以看到,在 mongoDB 的架構(gòu)中,核心的有三個組件

  • 數(shù)據(jù)分片(Shards)
    • 分片用于存儲真正的集群數(shù)據(jù),可以是一個單獨的 Mongod實例,也可以是一個副本集。生產(chǎn)環(huán)境下Shard一般是一個 Replica Set,以防止該數(shù)據(jù)片的單點故障。
    • 對于分片集合(sharded collection)來說,每個分片上都存儲了集合的一部分數(shù)據(jù)(按照分片鍵切分),如果集合沒有分片,那么該集合的數(shù)據(jù)都存儲在數(shù)據(jù)庫的 Primary Shard中。
  • 配置服務器(Config Servers)
    • 保存集群的元數(shù)據(jù)(metadata),包含各個Shard的路由規(guī)則,也包括了 chunk (分片數(shù)據(jù)塊)的信息。
  • 查詢路由(Query Routers)
    • Mongos是 Sharded Cluster 的訪問入口,其本身并不持久化數(shù)據(jù) 。Mongos啟動后,會從 Config Server 加載元數(shù)據(jù),開始提供服務,并將用戶的請求正確路由到對應的Shard。
    • Sharding 集群可以部署多個 Mongos 以分擔客戶端請求的壓力。

其實到了這里就基本差不多了,但是為了「加深」我們對于 mongoDB 的「印象」,我會去再看一下,「MongoDB 和 Mysql 到底有什么區(qū)別」

MongoDB 和 Mysql 有什么區(qū)別

總結(jié)

以上的知識對于一個新技術的入門來說,肯定是夠用了 但是「重點還是在于歸納總結(jié)」,當你看完這些知識的時候,你腦海里對它有什么印象

對于 mongoDB ,當你看完這篇文章的時候,你需要知道它是一個

  • 「cp 類型的文檔數(shù)據(jù)庫」
  • 它有著自己「獨特的數(shù)據(jù)查詢方式」,操作語法是怎樣的
  • 它支持「水平擴展」
  • 「自動故障轉(zhuǎn)移和數(shù)據(jù)冗余(數(shù)據(jù)分散在不同的 shard 上,有備份)成就了它的高可用」
  • 一個請求打到 mongoDB 中需要一層「路由來將請求映射到具體的數(shù)據(jù)分片上」
  • 「支持單個文檔的事物」。。。。。。

TAg

加載中~

本網(wǎng)站LOGO受版權(quán)及商標保護,版權(quán)登記號:國作登字-2022-F-10126915,未經(jīng)湖南木星科技官方許可,嚴禁使用。
Copyright ? 2012-2022 湖南木星科技有限公司(木星網(wǎng))版權(quán)所有
轉(zhuǎn)載內(nèi)容版權(quán)歸作者及來源網(wǎng)站所有,本站原創(chuàng)內(nèi)容轉(zhuǎn)載請注明來源,商業(yè)媒體及紙媒請先聯(lián)系:aishangyiwan@126.com

工信部備案號:湘ICP備19012813號-5