M05-MongoDB数据库核心知识
MongoDB數據庫架構
MongoDB存儲引擎
存儲引擎負責管理數據存儲,包括內存和磁盤,解決數據的存儲和磁盤的交互
mongodb的存儲引擎可以自由的替換,但是要符合mongoDB的API
mongoDB官方支持的存儲引擎
WiredTiger是3.2之后默認使用的存儲引擎:提高了更良好的鎖并發機制,可以支持文檔級別的鎖
MMAPv1是3.2之前的使用的存儲引擎,在鎖機制這一塊兒不是太好
In-Memory是企業版支持從存儲引擎
Encrypted是企業版支持的存儲引擎,加密存儲引擎
第三方
RocksDB是facebook出的一個nosql存儲引擎,主要是解決寫入并發的性能,也可以結合mysql使用
TerarKDB是解決存儲空間的優化和查詢性能的優化
阿里云數據庫mongoDB版擴展支持的存儲引擎
命令查看服務狀態信息
db.serverStatus()
查看服務引擎
db.serverStatus().storageEngine
db.serverStatus().storageEngine
{
“name” : “wiredTiger”,
“supportsCommittedReads” : true,
“oldestRequiredTimestampForCrashRecovery” : Timestamp(0, 0),
“supportsPendingDrops” : true,
“dropPendingIdents” : NumberLong(0),
“supportsSnapshotReadConcern” : true,
“readOnly” : false,
“persistent” : true,
“backupCursorOpen” : false
}
MongoDB數據邏輯架構
固定集合Capped:定義了一個集合容量(數據大小)固定,超過了運行淘汰,設定一個淘汰機制,例如先進先出,場景:數據排隊的消息隊列,在MongoDB內部做主從復制的時候,使用了base集合,使用固定容量大小的存儲日志同步到從服務器
集合Collection
MongoDB文檔模型與BSON
- Doucment文檔,類似于關系型數據庫中的行Row,數據基本單元
- 文檔結構類似于JSON文檔,存儲鍵值對數據
- MongoDB保存數據的基本格式是BSON Doucment
- BSON是二進制的JSON,目的的節約存儲空間
- MongoDB的文檔支持更豐富的數據類型
- _id是默認的主鍵,使用的是ObjectId類型保證唯一,也可以自定義
- 字段存儲有特定的順序,允許嵌套復雜類型,如文檔類型的數據
- 除了數據使用文檔、查詢、過濾、索引管理等功能也全部使用文檔
- BSON文檔大小有16M的限制,就是一行的數據16M
- 超出16M限制的數據可以使用GridFS存儲
MongoDB文檔模型設計原則
數據模型兩種方式
Normalized 范式
Denormalized 反范式
MongoDB文檔結構分為
引用式:也就是RDBMS中的外鍵關聯
嵌入式:也就是Doucment文檔中的內嵌結點
MongoDB日志Log機制(Journal)
- 為了防止突發故障導致的數據丟失,MongoDB提供了日志機制
- WiredTiger使用前寫日志write-ahead transaction log和Checkpoint檢查點一起來確保數據正確持久性
- 如果MongoDB日志存在檢查點,就使用日志重放功能修改直到上一個檢查點
- 日志使用了snappy壓縮庫
- 最小日志大小128字節,小于此大小不啟用壓縮
- 單節點,不啟用日志,可能導致數據修改丟失
- WiredTiger引擎日志默認大小100ms毫秒刷一次磁盤,日志大小最大100M,超過會自動創建新文件
- WiredTiger引擎會自動刪除直到上一個checkpoint的日志文件
配置文件
locate mongod.conf
一般在在/etc/mongod.conf
Mongod.conf 控制日志
深入MongoDB日志模式底層原理
控制WiredTiger日志持久化
- MongoDB的日志在dbpath目錄下的Journal目錄下
- 啟動參數--journal開始啟用--nojournal關閉,也可以配置文件關閉
- WiredTiger默認提交日志時間的間隔100毫秒
- 3.2版本WiredTiger寫入日志間隔默認50毫秒
- 3.6以后WiredTiger設置檢查點間隔是60秒
- 如果寫入操作設置了j:true,引擎會立即寫磁盤
- 日志大小最大100M,超過會自動創建新文件
- 如果強制關閉Mongod進程可能會導致日志丟失
- 使用storage.journal.commitIntervalMs控制間隔
- In-Memory引擎不支持此參數
- MMAPv1引擎默認提交日志時間的間隔30毫秒
- WiredTiger引擎自動刪除直到上一個checkpoint的日志文件
MongoDB面試題
Embedding內嵌:快速讀取、數據冗余、數據更新時候比較復雜
Linking引用:節約空間,關系靈活,數據更新比較簡單、需要從多個表讀數據
總結
以上是生活随笔為你收集整理的M05-MongoDB数据库核心知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用selenium+chrome模拟登
- 下一篇: java计算机毕业设计汉字幼教系统源码+