內(nèi)容
一、MongoDB 數(shù)據(jù)庫(kù)架構(gòu)
A.?MongoDB數(shù)據(jù)庫(kù)體系架構(gòu)
1. 存儲(chǔ)引擎(MongoDB Storage Engines):
2.?MongoDB 數(shù)據(jù)邏輯架構(gòu)
二、MongoDB 存儲(chǔ)引擎
A. 查看mongodb服務(wù)器的狀態(tài)
B. 查看引擎信息(4.2.1 沒(méi)有這個(gè)命令)
C. 查看 - 集合狀態(tài)(包含引擎信息)
三、集合 Collection
A. 創(chuàng)建集合
?B. 查看集合狀態(tài)
?C. 查看集合所有文檔 + 美化
四、文檔模型 與 BSON
A.?MongoDB 文檔模型
B.?MongoDB文檔模型設(shè)計(jì)原則
1.數(shù)據(jù)模型兩種方式
2. Mongodb文檔結(jié)構(gòu)分為
2-1:引用方式
2-2:嵌入式 (文檔嵌套)
五、日志Log機(jī)制(數(shù)據(jù)安全問(wèn)題)
A. Mongodb 日志Journa
B.?Mongod.conf 控制日志
?C. 深入MongoDB日志模式底層原理
D. 控制WiredTiger日志持久化
E. 配置文件?mongod.conf?
1. 地址
2. 內(nèi)容說(shuō)明
3. windows帶日志下--服務(wù)器啟動(dòng)(演示)
六、MongoDB 總結(jié)
A.?Document 內(nèi)嵌 VS 引用 優(yōu)缺點(diǎn)
B. MongoDB存儲(chǔ)引擎主要有哪些 ?C. 幾種主流存儲(chǔ)引擎的差異?優(yōu)缺點(diǎn)?D. MongoDB日志結(jié)構(gòu) ?E. MongoDB恢復(fù)數(shù)據(jù)庫(kù)數(shù)據(jù)的原理?F. BSON如何保證數(shù)據(jù)的序列化?G. MongoDB文檔模型 ?H. MongoDB文檔模型優(yōu)缺點(diǎn)?I. 如何控制MongoDB日志寫入時(shí)間?
一、MongoDB 數(shù)據(jù)庫(kù)架構(gòu)
A.?MongoDB數(shù)據(jù)庫(kù)體系架構(gòu)
1. 存儲(chǔ)引擎(MongoDB Storage Engines):
- WiredTiger (對(duì)處理讀寫,并發(fā)更靈活)
- MMAPv1
- In-Memory (企業(yè)版使用)
- Encrypted
- 3rd Party Engine
2.?MongoDB 數(shù)據(jù)邏輯架構(gòu)
- 二進(jìn)制BSON文檔
- Journal 日志:性能優(yōu)化
- Index 索引:查詢優(yōu)化
- Collection:
- Capped:可以模擬數(shù)據(jù)排隊(duì)的消息隊(duì)列
- 語(yǔ)言執(zhí)行引擎:
二、MongoDB 存儲(chǔ)引擎
- 作用:解決數(shù)據(jù)存儲(chǔ)和磁盤的交互,以及索引機(jī)制,大量IO操作
- 存儲(chǔ)引擎負(fù)責(zé)管理數(shù)據(jù)存儲(chǔ),包括內(nèi)存和磁盤2個(gè)區(qū)域
引擎名 | 說(shuō)明 | 描述 |
MMAPV1 | 【官方】3.0之前版本 | |
WiredTiger | 【官方】3.0之后版本(默認(rèn)) | 鎖機(jī)制提升性能 |
Encrypted | 【官方】企業(yè)版 | |
In-Memory | 【官方】企業(yè)版 | |
RocksDB | 【Facebook】可以結(jié)合mongodb,以及mysql一起使用 | 寫入性能優(yōu)化 |
TerarkDB | 【字節(jié)跳動(dòng)】工程團(tuán)隊(duì) | 存儲(chǔ)空間 + 查詢性能優(yōu)化 |
其他引擎 | 如: 阿里云提供支持,RocksDB 和 TerarkDB, WiredTiger(默認(rèn)) |
A. 查看mongodb服務(wù)器的狀態(tài)
db.serverStatus()
B. 查看引擎信息(4.2.1 沒(méi)有這個(gè)命令)
db.serverStatus().storgeEngine
C. 查看 - 集合狀態(tài)(包含引擎信息)
db.users.stats()
三、集合 Collection
- 類似于關(guān)系型數(shù)據(jù)庫(kù)中的表 Table
- MongoDB 數(shù)據(jù)庫(kù)可以包含多個(gè)集合,一個(gè)集合可以包含多個(gè)文檔( Document)
- 如果集合不存在,MongoDB會(huì)在保存第一條數(shù)據(jù)時(shí)自動(dòng)創(chuàng)建集合(懶創(chuàng)建)
- 可以使用 db.createCollection0 創(chuàng)建集合
- 集合不限制文檔Document的字段架構(gòu)
- MongoDB 3.2開(kāi)始?可以啟用 Schema Validation 強(qiáng)制驗(yàn)證文檔結(jié)構(gòu)
- MongoDB還提供了Capped Collection固定容量大小的集合
A. 創(chuàng)建集合
- 創(chuàng)建集合名為:log
- 固定容量大?。?/span>5242880 ,單位字節(jié)
- 文檔個(gè)數(shù): max:5000 ,表示最多5000個(gè)文檔
db.createCollection("log",{ capped : true, size : 5242880, max : 5000 })
?B. 查看集合狀態(tài)
db.users.stats()
?C. 查看集合所有文檔 + 美化
db.users.find().pretty()
四、文檔模型 與 BSON
A.?MongoDB 文檔模型
- Document 文檔,類似于關(guān)系型數(shù)據(jù)庫(kù)中的行Row,數(shù)據(jù)基本單元
- 文檔結(jié)構(gòu)類似于JSON文檔,存儲(chǔ)鍵值對(duì)Key-Value數(shù)據(jù)
- MongoDB保存數(shù)據(jù)的基本格式是BSON Document
- BSON是二進(jìn)制JSON,目的節(jié)約存儲(chǔ)空間
- MongoDB的文檔支持更豐富的數(shù)據(jù)類型
- _id 是默認(rèn)的主鍵,使用的是ObjectId類型保證唯一,也可以自定義
- 字段存儲(chǔ)有特定的順序,允許嵌套復(fù)雜類型,如文檔類型的數(shù)據(jù)
- 除了數(shù)據(jù)使用文檔、查詢、過(guò)濾、索引管理等功能也全部使用文檔(以文檔為操作單位)
- BSON?文檔大小有?16M的限制
- 超出16M?限制的數(shù)據(jù)可以使用GridFS存儲(chǔ)
B.?MongoDB文檔模型設(shè)計(jì)原則
1.數(shù)據(jù)模型兩種方式
- Normalized 范式 (設(shè)計(jì)標(biāo)準(zhǔn),為了節(jié)省磁盤空間)
- Denormalized 反范式(隨著磁盤價(jià)格大幅度下降,為了追求性能,不計(jì)成本累加硬件)
2. Mongodb文檔結(jié)構(gòu)分為
- 【范式】引用方式 : 也就是RDBMS中的外鍵關(guān)聯(lián)
- 【反范式】嵌入式 : 也就是Ducoment文檔中的內(nèi)嵌節(jié)點(diǎn)?
2-1:引用方式
2-2:嵌入式 (文檔嵌套)
五、日志Log機(jī)制(數(shù)據(jù)安全問(wèn)題)
A. Mongodb 日志Journa
- 為了防止突發(fā)故障導(dǎo)致的數(shù)據(jù)丟失,MongoDB提供了日志機(jī)制
- WiredTiger使用寫前日志 write-ahead transaction log 和Checkpoint檢查點(diǎn) 一起來(lái)確保數(shù)據(jù)正確持久性
- 如果MongoDB日志存在檢查點(diǎn),就使用日志重放修改直到上一個(gè)檢查點(diǎn)
- 日志使用了snappy壓縮庫(kù)
- 最小日志大小128字節(jié),小于此大小不啟用壓縮
- 單節(jié)點(diǎn),不啟用日志,可能導(dǎo)致數(shù)據(jù)修改丟失
- WiredTiger引擎日志默認(rèn)100M毫秒刷一次磁盤,日志文件最大100M,超過(guò)會(huì)自動(dòng)創(chuàng)建新文件
- WiredTiger引擎會(huì)自動(dòng)刪除直到上一個(gè)CheckPoint的日志文件
B.?Mongod.conf 控制日志
- 啟動(dòng)日志
- 日志路徑:/data/db/journal
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-591628.html
?C. 深入MongoDB日志模式底層原理
- Shared View:共享內(nèi)存數(shù)據(jù)視圖
- 數(shù)據(jù)寫入周期是60S
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-591628.html
D. 控制WiredTiger日志持久化
- MongoDB的日志在DbPath目錄下的Journal目錄下
- 啟動(dòng)參數(shù) --journal 開(kāi)啟,使用 --nojournal 關(guān)閉,也可以配置文件關(guān)閉
- WiredTiger默認(rèn)提交日志時(shí)間是間隔100毫秒
- 3.2 版本W(wǎng)iredTiger寫入日志間隔默認(rèn)50毫秒
- 3.6 版本以后WiredTiger設(shè)置檢查點(diǎn)間隔是60秒
- 如果?寫入操作設(shè)置了 j: true,引擎會(huì)立即寫磁盤
- 日志大小是100MB,寫滿以后,重新創(chuàng)建日志文件
- 如果強(qiáng)制關(guān)閉Mongod進(jìn)程可能會(huì)導(dǎo)致日志丟失
- 使用storage.journal.commitIntervalMs控制間隔
- In-Memory引擎不支持此參數(shù) (控制持久化參數(shù))
- MMAPv1引擎默認(rèn)提交日志時(shí)間是間隔30毫秒
- WiredTiger引擎自動(dòng)刪除直到上一個(gè)CheckPoint的日志文件
E. 配置文件?mongod.conf?
1. 地址
- linux下:/etc/mongod.conf
- docker中:/data/configdb/?,一般默認(rèn)沒(méi)有,可以通過(guò)部署時(shí)映射到該目錄下
2. 內(nèi)容說(shuō)明
- dbpath :數(shù)據(jù)庫(kù)文件存放目錄
- path:日志存放目錄
- port:端口號(hào)
- bindip : 0.0.0.0 允許外部容器訪問(wèn) ,注:不要寫127.0.0.1
- auth : 不使用密碼賬戶登錄
# Where and how to store data.
storage:
dbPath: /mnt/mongodb/data
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /mnt/mongodb/logs/mongod.log
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
#auth
auth:false
3. windows帶日志下--服務(wù)器啟動(dòng)(演示)
- linux/docker 默認(rèn)自動(dòng)啟動(dòng)服務(wù)器
# 服務(wù)器啟動(dòng)(默認(rèn)開(kāi)啟日志)
mongod.exe --dbpath "c:\\MongoDB\data\db" --logpath "C:\\MongoDB\data\log\mongo.log"
# 服務(wù)器啟動(dòng)(開(kāi)啟日志)
mongod.exe --dbpath "c:\\MongoDB\data\db" --journal --logpath "C:\\MongoDB\data\log\mongo.log"
# 服務(wù)器啟動(dòng)(關(guān)閉日志)
mongod.exe --dbpath "c:\\MongoDB\data\db" --nojournal --logpath "C:\\MongoDB\data\log\mongo.log"
# 客戶端啟動(dòng)
mongo.exe --port 27017
六、MongoDB 總結(jié)
A.?Document 內(nèi)嵌 VS 引用 優(yōu)缺點(diǎn)
內(nèi)嵌 | 引用 | |
優(yōu)點(diǎn) | 快速讀取 | 節(jié)約空間 關(guān)系靈活 數(shù)據(jù)更新時(shí)候比較簡(jiǎn)單 |
缺點(diǎn) | 數(shù)據(jù)冗余 數(shù)據(jù)更新時(shí)候比較復(fù)雜 |
需要從多個(gè)表讀數(shù)據(jù) |
B. MongoDB存儲(chǔ)引擎主要有哪些 ? C. 幾種主流存儲(chǔ)引擎的差異?優(yōu)缺點(diǎn)? D. MongoDB日志結(jié)構(gòu) ? E. MongoDB恢復(fù)數(shù)據(jù)庫(kù)數(shù)據(jù)的原理? F. BSON如何保證數(shù)據(jù)的序列化? G. MongoDB文檔模型 ? H. MongoDB文檔模型優(yōu)缺點(diǎn)? I. 如何控制MongoDB日志寫入時(shí)間?
到了這里,關(guān)于【DBA課程-筆記】第 3 章:MongoDB數(shù)據(jù)庫(kù)核心知識(shí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!