Mongodb的體系結構,語法,底層原理,怎么開發使用,使用場景有哪些?

MongoDB 教材

MongoDB 是一個開源的 NoSQL 數據庫,以其高性能、高可用性和自動擴展性廣受歡迎。本文將詳細介紹 MongoDB 的體系結構、語法、底層原理、開發使用方法及常見使用場景。

目錄

  1. MongoDB 簡介
  2. MongoDB 體系結構
  3. MongoDB 語法
    • 基本操作
    • 高級查詢
    • 聚合操作
  4. 底層原理
  5. 開發使用
    • 安裝與配置
    • 基本 CRUD 操作
    • 索引與優化
    • 復制與分片
  6. 使用場景

MongoDB 簡介

MongoDB 是一個面向文檔的 NoSQL 數據庫,數據以 BSON(二進制 JSON)格式存儲。它提供了靈活的數據模型,適合處理大規模數據和高并發訪問的應用場景。

MongoDB 體系結構

MongoDB 的體系結構包含以下幾個關鍵組件:

  1. 數據庫(Database):多個集合(Collection)的集合。
  2. 集合(Collection):多個文檔(Document)的集合。
  3. 文檔(Document):MongoDB 中的基本數據單位,以 BSON 格式存儲。
  4. 分片(Sharding):將數據水平切分到多個服務器上,以實現擴展性和高性能。
  5. 復制(Replication):通過主從復制保證數據的高可用性和可靠性。

MongoDB 的體系結構如下圖所示:

+------------------+
|   MongoDB Server |
+------------------+|          ||          |
+-----+   +-----+
| DB1 |   | DB2 |
+-----+   +-----+|         |
+----+   +----+
|C1  |   |C2  |
|C2  |   +----+
+----+     ||+----+|D1  ||D2  |+----+

MongoDB 語法

基本操作
  1. 插入文檔
db.collection.insertOne({ name: "Alice", age: 25 });
db.collection.insertMany([{ name: "Bob", age: 30 }, { name: "Charlie", age: 35 }]);
  1. 查詢文檔
db.collection.find({ name: "Alice" });
db.collection.find({ age: { $gt: 25 } });
  1. 更新文檔
db.collection.updateOne({ name: "Alice" }, { $set: { age: 26 } });
db.collection.updateMany({ age: { $gt: 25 } }, { $inc: { age: 1 } });
  1. 刪除文檔
db.collection.deleteOne({ name: "Alice" });
db.collection.deleteMany({ age: { $lt: 30 } });
高級查詢
  1. 投影
db.collection.find({ age: { $gt: 25 } }, { name: 1, _id: 0 });
  1. 排序
db.collection.find().sort({ age: -1 });
  1. 分頁
db.collection.find().skip(10).limit(5);
聚合操作

MongoDB 提供強大的聚合框架,支持復雜的數據處理流程。

db.collection.aggregate([{ $match: { status: "A" } },{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } },{ $sort: { total: -1 } }
]);

底層原理

MongoDB 使用多種技術來保證其高性能和高可用性:

  1. 存儲引擎:MongoDB 默認使用 WiredTiger 存儲引擎,支持文檔級并發控制和壓縮。WiredTiger 提供了高效的讀寫性能和數據壓縮功能,能夠顯著減少存儲占用。
  2. 內存映射文件:MongoDB 將數據文件映射到內存中,以提高數據訪問速度。這種機制利用操作系統的虛擬內存管理,將常用數據頁保存在內存中,減少磁盤 I/O。
  3. 索引:MongoDB 支持多種索引類型,如單字段索引、復合索引、地理空間索引、全文索引等,能夠顯著提高查詢性能。索引使用 B 樹結構,提供高效的查找、插入和刪除操作。
  4. 復制集(Replica Set):MongoDB 通過復制集實現數據的高可用性和容錯能力。復制集包含一個主節點和多個從節點,主節點負責處理寫操作,從節點負責同步數據和處理讀操作。
  5. 分片(Sharding):MongoDB 通過分片實現水平擴展,將數據分布到多個服務器上。分片鍵用于決定數據如何分布,每個分片存儲數據的一部分,協調節點負責路由請求到相應的分片。

開發使用

安裝與配置
  1. 安裝 MongoDB

在 Linux 系統上可以通過包管理器安裝 MongoDB,例如在 Ubuntu 上:

sudo apt-get update
sudo apt-get install -y mongodb

在 Windows 系統上,可以下載 MongoDB 安裝包并運行安裝程序。

  1. 啟動 MongoDB

安裝完成后,可以使用以下命令啟動 MongoDB 服務:

sudo service mongodb start
  1. 配置文件

MongoDB 的配置文件通常位于 /etc/mongodb.conf。可以在配置文件中設置數據目錄、日志文件路徑、網絡綁定地址等。

基本 CRUD 操作
  1. 插入數據
// 插入單個文檔
db.collection.insertOne({ name: "Alice", age: 25 });// 插入多個文檔
db.collection.insertMany([{ name: "Bob", age: 30 }, { name: "Charlie", age: 35 }]);
  1. 查詢數據
// 查詢所有文檔
db.collection.find();// 查詢符合條件的文檔
db.collection.find({ age: { $gt: 25 } });
  1. 更新數據
// 更新單個文檔
db.collection.updateOne({ name: "Alice" }, { $set: { age: 26 } });// 更新多個文檔
db.collection.updateMany({ age: { $gt: 25 } }, { $inc: { age: 1 } });
  1. 刪除數據
// 刪除單個文檔
db.collection.deleteOne({ name: "Alice" });// 刪除多個文檔
db.collection.deleteMany({ age: { $lt: 30 } });
索引與優化
  1. 創建索引
// 創建單字段索引
db.collection.createIndex({ name: 1 });// 創建復合索引
db.collection.createIndex({ name: 1, age: -1 });
  1. 查看索引
// 查看集合中的所有索引
db.collection.getIndexes();
  1. 刪除索引
// 刪除指定索引
db.collection.dropIndex("index_name");// 刪除所有索引
db.collection.dropIndexes();
復制與分片
  1. 設置復制集

配置文件中添加復制集名稱:

replication:replSetName: "rs0"

啟動 MongoDB 實例后,初始化復制集:

rs.initiate();

添加從節點:

rs.add("hostname:port");
  1. 設置分片

啟動配置服務器和分片服務器:

mongod --configsvr --replSet configReplSet --port 27019 --dbpath /data/configdb
mongod --shardsvr --replSet shardReplSet --port 27018 --dbpath /data/sharddb

啟動路由服務器:

mongos --configdb configReplSet/hostname:27019

添加分片:

sh.addShard("shardReplSet/hostname:27018");

啟用集合分片


javascript
sh.enableSharding("myDatabase");
sh.shardCollection("myDatabase.myCollection", { shardKey: 1 });

使用場景

MongoDB 由于其靈活的數據模型、高性能和可擴展性,適用于多種應用場景:

  1. 內容管理系統(CMS):由于數據結構靈活,MongoDB 非常適合用于內容管理系統,可以輕松處理復雜的內容類型和關系。
  2. 實時分析:MongoDB 的高性能讀寫能力和聚合框架非常適合實時分析和數據挖掘應用,例如點擊流分析、用戶行為分析等。
  3. 物聯網(IoT):MongoDB 可以處理大量的傳感器數據和設備日志,支持高吞吐量和低延遲的數據寫入。
  4. 電商平臺:電商平臺需要處理大量的產品信息、用戶數據和交易記錄,MongoDB 的文檔模型可以靈活地適應多變的數據結構。
  5. 社交網絡:MongoDB 可以快速存儲和檢索用戶生成的內容,如帖子、評論、點贊等,支持高并發的讀寫操作。
  6. 游戲應用:游戲應用需要處理大量的用戶數據和游戲狀態,MongoDB 的高可用性和擴展性可以滿足游戲應用的需求。

注意

MongoDB 是一個功能強大且靈活的 NoSQL 數據庫,適用于多種應用場景。本文介紹了 MongoDB 的體系結構、基本操作、底層原理以及常見的開發和使用方法。通過掌握這些知識,開發者可以充分利用 MongoDB 的優勢,構建高性能、高可用的應用系統。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38064.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38064.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38064.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RDMA建鏈的3次握手和斷鏈的4次揮手流程?

文章目錄 基礎信息建鏈 3次握手斷鏈4次揮手建聯狀態active端passive端 報文結構函數關系其他后記 基礎信息 CM: Communication Management 通信管理 連接管理SIDR: Service ID Resolution Protocol. 作用: enables users of Unreliable Datagram service to locate …

實驗4 圖像空間濾波

1. 實驗目的 ①掌握圖像空間濾波的主要原理與方法; ②掌握圖像邊緣提取的主要原理和方法; ③了解空間濾波在圖像處理和機器學習中的應用。 2. 實驗內容 ①調用 Matlab / Python OpenCV中的函數,實現均值濾波、高斯濾波、中值濾波等。 ②調…

【操作系統期末速成】 EP02 | 學習筆記(基于五道口一只鴨)

文章目錄 一、前言🚀🚀🚀二、正文:??????2.1 考點二:操作系統的功能及接口2.2 考點三:操作系統的發展及分類2.3 考點四:操作系統的運行環境(重要) 一、前言&#x…

從零開始三天學會微信小程序開發(三)

看到不少入門的小程序開發者不斷的問重復性的問題,我們從實戰角度開發了這個課程,希望能夠幫助大家了解小程序開發。 課程分三天: 第一天:微信小程序開發入門第二天:給小程序接入云端數據第三天:完善我的…

MySQL高級-MVCC- readview介紹

文章目錄 1、介紹2、ReadView中包含了四個核心字段:3、版本鏈數據的訪問規則:4、不同的隔離級別,生成ReadView的時機不同: 1、介紹 ReadView(讀視圖)是 快照讀 SQL執行時MVCC提取數據的依據,記錄…

【計算機組成原理實驗】——運算器組成實驗

計組TEC4實驗——運算器組成實驗 1. 實驗目的 (1)掌握算術邏輯運算加、減、乘、與的工作原理。 (2) 熟悉簡單運算器的數據傳送通路。 (3) 驗證實驗臺運算器的8位加、減、與、直通功能。 (4) 驗證實驗臺的4位乘4位功能。 (5) 按給定數據,完成幾種指…

SerDes介紹以及原語使用介紹(4)ISERDESE2原語仿真

文章目錄 前言一、iserdese2_module模塊二、oserdese2_module模塊三、頂層模塊四、仿真結果分析 前言 上文詳細介紹了ISERDESE2原語的使用,本文根據仿真對ISERDESE2原語的使用進一步加深印象。在仿真時,與OSERDESE進行回環。 一、iserdese2_module模塊…

昇思MindSpore學習筆記4--數據集 Dataset

昇思MindSpore學習筆記4--數據集 Dataset 摘要: 昇思MindSpore數據集Dataset的加載、數據集常見操作和自定義數據集方法。 一、數據集 Dataset概念 MindSpore數據引擎基于Pipeline 數據預處理相關模塊: 數據集Dataset加載原始數據,支持文本…

移動端H5應用,使用了postcss-px-to-viewport插件,750設計稿兼容Vant框架

目前在搞一個移動端的H5項目,使用的是Vue3Vant框架。設計稿是750的,而且使用了postcss-px-to-viewport。所以發現使用Vant框架的時候,發現有點問題,好像縮小了,后來百度了一下,是需要設置portcss.config.js…

vue components

vue components intro 組件是帶有名稱的可復用實例。 因為組件是可復用的組件實例,所以它們與根實例接收相同的選項,例如 data、computed、watch、methods 以及生命周期鉤子等。 組成 props: 組件的attributes,可以傳任意類型…

大創項目推薦 題目:基于機器視覺的圖像矯正 (以車牌識別為例) - 圖像畸變校正

文章目錄 0 簡介1 思路簡介1.1 車牌定位1.2 畸變校正 2 代碼實現2.1 車牌定位2.1.1 通過顏色特征選定可疑區域2.1.2 尋找車牌外圍輪廓2.1.3 車牌區域定位 2.2 畸變校正2.2.1 畸變后車牌頂點定位2.2.2 校正 7 最后 0 簡介 🔥 優質競賽項目系列,今天要分享…

題目的起名

整個經濟社會描繪為無數個交織的方程組。機場航班的起降時間、物流的路徑規劃、金屬冶煉的原料配比、工廠店鋪的選址……”而這些方程組的價值在于,“為了實現經濟學最簡單而又最權威的目標——對稀缺資源進行最佳利用,必須快速求出這些方程組的最優解。…

Leetcode3192. 使二進制數組全部等于 1 的最少操作次數 II

Every day a Leetcode 題目來源:3192. 使二進制數組全部等于 1 的最少操作次數 II 解法1:遍歷 由于 nums[i] 會被其左側元素的操作影響,所以我們先從最左邊的 nums[0] 開始思考。 分類討論: 如果 nums[0]1,無需反…

debian 安裝mongodb

安裝所需工具 apt install gnupg curl 添加公鑰 wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add - 添加源 echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt…

amis-editor 注冊自定義組件

建議先將amis文檔從頭到尾,仔細看一遍。 參考:amis - 低代碼前端框架 amis 的渲染過程是將 json 轉成對應的 React 組件。先通過 json 的 type 找到對應的 Component,然后把其他屬性作為 props 傳遞過去完成渲染。 import * as React from …

Linux開發講課17--- 在shell腳本中,如何將一個命令存儲在一個變量中

問: 將一個命令保存到一個變量中,以便稍后再使用(不是命令的輸出,而是命令本身)。 有一個簡單的腳本如下: command"ls"; echo "Command: $command"; #Output is: Command: ls b$com…

c++ 給定一個非常巨大的數組,如何找到它的中值

快速選擇算法&#xff08;最優解&#xff09; #include <iostream> #include <vector> #include <algorithm>using namespace std;class Solution { private:// 快速選擇算法中的分區函數int partition(vector<int>& nums, int left, int right)…

逆向學習匯編篇:參數傳遞與返回地址的使用

本節課在線學習視頻&#xff08;網盤地址&#xff0c;保存后即可免費觀看&#xff09;&#xff1a; ??https://pan.quark.cn/s/b5b046015da2?? 在匯編語言中&#xff0c;函數調用和參數傳遞是編程的基礎組成部分。了解如何在匯編中傳遞參數以及如何處理返回地址對于逆向工…

LeetCode 78. 子集

更多題解盡在 https://sugar.matrixlab.dev/algorithm 每日更新。 組隊打卡&#xff0c;更多解法等你一起來參與哦&#xff01; LeetCode 78. 子集&#xff0c;難度中等。 迭代 解題思路&#xff1a; 初始化結果集 result&#xff0c;其中包含一個空集 []&#xff1b;遍歷數…

flex講解

隨著前端技術的不斷發展和更新&#xff0c;flex布局成為前端布局的主流。但是仍然有很多前端新手搞不懂flex到底怎么用&#xff01;&#xff01;&#xff01;今天我們就來好好講講flex布局 老規矩先上定義 什么是flex布局 布局的傳統解決方案&#xff0c;基于盒狀模型&#x…