緩存與加速技術實踐-MongoDB數據庫應用

一.什么是MongoDB

? ?MongoDB 是一個文檔型數據庫,數據以類似 JSON 的文檔形式存儲。
? ?MongoDB 的設計理念是為了應對大數據量、高性能和靈活性需求。
??MongoDB 使用集合(Collections)來組織文檔(Documents),每個文檔都是由鍵值對組成的。

? 數據庫(Database):存儲數據的容器,類似于關系型數據庫中的數據庫。

? 集合(Collection):數據庫中的一個集合,類似于關系型數據庫中的表。

? 文檔(Document):集合中的一個數據記錄,類似于關系型數據庫中的行(row),以 BSON 格式存儲。

? ?MongoDB 將數據存儲為一個文檔,數據結構由鍵值 (key=>value) 對組成,文檔類似于 JSON 對象,字段值可以包含其他文檔,數組及文檔數組。

1.主要特點

? 文檔導向的存儲:MongoDB 是一個面向文檔的數據庫,它以 JSON-like 的格式存儲數據,使得數據結構更加靈活和豐富。

? 索引優化查詢:MongoDB 允許用戶為文檔中的任意屬性創建索引,例如 FirstName 和 Address,從而提高查詢效率和排序性能。

? 數據鏡像與擴展性:通過本地或網絡創建數據的副本,MongoDB 實現了強大的數據冗余和擴展能力。

? 水平擴展與分片:面對增加的負載,MongoDB 可以通過分片技術將數據分布到計算機網絡中的其他節點上,實現水平擴展。

? 強大的查詢語言:MongoDB 使用 JSON 格式的查詢語法,支持復雜的查詢表達式,包括對內嵌對象和數組的查詢。

? 數據更新:利用 update () 命令,MongoDB 能夠替換整個文檔或更新指定的數據字段。

2.MongoDB概念解析

SQL 術語 / 概念MongoDB 術語 / 概念解釋 / 說明
databasedatabase數據庫
tablecollection數據庫表 / 集合
rowdocument數據記錄行 / 文檔
columnfield數據字段 / 域
indexindex索引
table joins表連接,MongoDB 不支持
primary keyprimary key主鍵,MongoDB 自動將_id 字段設置為主鍵

二.MongoDB安裝

安裝前需要安裝各個Linux平臺依賴包

dnf -y install openssl libcurl

解壓安裝包

tar zxvf mongodb-linux-x86_64-rhel8-8.0.8.tgz?

將解壓包拷貝到指定目錄

?mv?mongodb-linux-x86_64-rhel8-8.0.8.tgz?/usr/local/mongodb

MongoDB的可執行文件在bin目錄下

cd?/usr/local/mongodb

cd bin/

vim /etc/profile

在末尾添加一行 : export /usr/local/mongodb/bin:$PATH

source /etc/profile

創建數據庫目錄

[root@localhost?~]#mkdir -p /var/lib/mongo
[root@localhost?~]#mkdir -p /var/log/mongodb

?由于mongodb依賴openssl11,需要編譯安裝openssl11

[root@localhost?~]# dnf install -y gcc make perl
[root@localhost?~]# tar xzf openssl-1.1.1w.tar.gz
[root@localhost?~]# cd openssl-1.1.1w
[root@sentinel01 openssl-1.1.1w]#./config --prefix=/opt/openssl11 --openssldir=/opt/openssl11/ssl
[root@sentinel01 openssl-1.1.1w]#make -j2
[root@sentinel01 openssl-1.1.1w]#make install

設置openssl11的環境變量

[root@localhost?~]# echo 'export LD_LIBRARY_PATH=/opt/openssl11/lib:$LD_LIBRARY_PATH' | sudo tee /etc/profile.d/openssl11.sh
[root@localhost?~]# source /etc/profile.d/openssl11.sh?

接下來啟動Mongodb服務

?[root@localhost?~]# mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

?看到以下信息,說明啟動成功

[root@localhost?~]# mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
about to fork child process, waiting until server is ready for connections.
forked process: 12102
child process started successfully, parent exiting

?三.MongoDB Shell

? ? MongoDB Shell 是 MongoDB 提供的官方交互式界面,允許用戶與 MongoDB 數據庫進行交互、執行命令和操作數據庫。

?1.安裝MongoDB Shell

[root@localhost?~]# tar xzf mongosh-2.5.0-linux-x64-openssl3.tgz
[root@localhost?~]# cd mongosh-2.5.0-linux-x64-openssl3
[root@localhost?mongosh-2.5.0-linux-x64-openssl3]# cd bin/
[root@localhost?bin]# cp mongosh /usr/local/bin/
[root@localhost?bin]# cp mongosh_crypt_v1.so /usr/local/lib/

2.驗證MongoDB Shell

[root@localhsot?bin]# mongosh
Current Mongosh Log ID: 680a15327aa1c07b1b26ff
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.5.0
Using MongoDB: 8.0.8
Using Mongosh: 2.5.0

For mongosh info see:

The server generated these startup warnings when booting
2025-04-24T18:22:54.368+08:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See?Production Notes for Self-Managed Deployments - Database Manual - MongoDB Docs
2025-04-24T18:22:55.892+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2025-04-24T18:22:55.892+08:00: You are running this process as the root user, which is not recommended

2025-04-24T18:22:55.892+08:00: This server is bound to?localhost. Remote systems will be unable to connect to this server. Start the server with --bind_ip <address> to specify which IP addresses it should serve responses from, or with --bind_ip_all to bind to all interfaces. If this behavior is desired, start the server with --bind_ip 127.0.0.1 to disable this warning
2025-04-24T18:22:55.892+08:00: Soft rlimits for open file descriptors too low
2025-04-24T18:22:55.892+08:00: For customers running the current memory allocator, we suggest changing the contents of the following sysfsFile
2025-04-24T18:22:55.892+08:00: We suggest setting the contents of sysfsFile to 0.
2025-04-24T18:22:55.892+08:00: We suggest setting swappiness to 0 or 1, as swapping can cause performance problems.

test>

四.數據庫管理

?1.查看數據庫列表

? ? ?要查看當前MongoDB實例中所有數據庫的列表,可以用show dbs命令

>show dbs

? ?要查看當前正在使用的數據庫,可以用db命令

>db

2.創建數據庫

test> use runoob
switched to db runoob
runoob> db
runoob
runoob>

runoob> show dbs
admin 40.00 KiB
config 60.00 KiB
local 40.00 KiB
runoob>?

插入一條命令會顯示你創建的列表?

runoob> db.runoob.insertOne({"name":"zhangsan"})
{
acknowledged: true,
insertedId: ObjectId('680a18f4277aa1c07b1b2700')
}
runoob> show dbs
admin 40.00 KiB
config 60.00 KiB
local 40.00 KiB
runoob 40.00 KiB
runoob>?

?3.刪除數據庫

如果你要刪除數據庫,可以使用db.dropDatabase()

runoob>use test

test>db.dropDatabase()

4. 默認數據庫

? ?MongoDB 中默認的數據庫為 test,如果您沒有創建新的數據庫,數據將存放在 test 數據庫中。

? ?當您通過 shell 連接到 MongoDB 實例時,如果未使用 use 命令切換到其他數據庫,則會默認使用 test 數據庫。

? ?例如,在啟動 MongoDB 實例并連接到 MongoDB shell 后,如果您開始插入文檔而未顯式指定數據庫,MongoDB 將默認使用 test 數據庫。

5. 系統內置數據庫

? ?在 MongoDB 中,admin、config 和 local 是三個特殊的系統內置數據庫

admin 數據庫:存儲所有數據庫的用戶身份信息和全局權限(如 root 用戶)。用戶必須通過? ? ? ? admin 數據庫認證后才能執行跨庫管理操作。
config 數據庫:僅在分片集群環境中存在。存儲分片信息、塊(chunk)分布、集合分片策略等關鍵元數據。
? ? local 數據庫:存儲當前節點的副本集狀態、操作日志(oplog)等本地數據。數據不會被復制到其他節點,僅存在于當前實例。

五.集合管理

1.查看集合

查看當前庫已有集合,可以使用show collections命令

?>show collections

2.創建集合?

db.createCollection("myComplexCollection", {capped: true,size: 10485760,max: 5000,validator: { $jsonSchema: {bsonType: "object",required: ["name", "email"],properties: {name: {bsonType: "string",description: "必須為字符串且為必填項"},email: {bsonType: "string",pattern: ".*@.*$",description: "必須為有效的電子郵件地址"}}}},validationLevel: "strict",validationAction: "error",storageEngine: {wiredTiger: { configString: "block_compressor=zstd" }},collation: { locale: "en", strength: 2 }
});
> use test
switched to db test
> db.createCollection("runoob")
{ "ok" : 1 }

?3.更新集合名

db.adminCommand({renameCollection: "test.oldCollection",to: "test.newCollection"
});
db.adminCommand({renameCollection: "test.oldCollection",to: "production.newCollection"
});

?

?4.刪除集合

>db.kgc.drop()

六.文檔操作

1.插入文檔

當個文檔插入:insertOne()

db.myCollection.insertOne({name: "Alice",age: 25,city: "New York"
});{"acknowledged": true,"insertedId": ObjectId("60c72b2f9b1d8b5a5f8e2b2d")
}

?2.insertMany()

db.myCollection.insertMany([{ name: "Bob", age: 30, city: "Los Angeles" },{ name: "Charlie", age: 35, city: "Chicago" }]);返回結果:
{"acknowledged": true,"insertedIds": [ObjectId("60c72b2f9b1d8b5a5f8e2b2e"),ObjectId("60c72b2f9b1d8b5a5f8e2b2f")]
}

?2.查詢文檔

查找所有文檔

>db.myCollection.find();

?查找當個文檔

>db.myCollection.findOne({name:"bob"});

3.刪除文檔

deleteOne()方法用于刪除匹配過濾器的單個文檔

>db.myCollection.deleteOne({name:"bob"});

deleteMany()方法用于刪除所有匹配過濾器的文檔

>?db.myCollection.deleteMany({name:"Alice"})

4.更新文檔

插入測試數據

>db.myCollection.insertMany([{ name: "Alice",age: 25,city: "Los Angeles",statu
s: "inactive" },{ name: "Bob",age: 30,city: "Los Angeles",status: "active" },
{ name: "Charlie",age: 35,city: "Chicago",status: "active"}]);

?1.updateOne()用于更新單個文檔

>db.myCollection.updateOne({ name: "Alice" },                     // 過濾條件{ $set: { age: 26 } },                // 更新操作{ upsert: false }                     // 可選參數
);

2.updateMany()用于匹配所有文檔?

db.myCollection.updateMany({ age: { $lt: 30 } },                // 過濾條件{ $set: { status: "active" } },     // 更新操作{ upsert: false }                    // 可選參數
);

?七.MongoDB備份與恢復

? 1.安裝備份與恢復命令

[root@localhost?~]#rpm -ivh?mongodb-database-tools-rhel70-x86_64-100.12.0.rpm

? 2.MongoDB數據備份?

[root@localhost ~]# mongodump
2025-04-25T22:44:21.307+0800    writing admin.system.version to dump/admin/system.version.bson
2025-04-25T22:44:21.307+0800    done dumping admin.system.version (1 document)
2025-04-25T22:44:21.308+0800    writing mydb.myCollection to dump/mydb/myCollection.bson
2025-04-25T22:44:21.308+0800    writing test.myComplexCollection to dump/test/myComplexCollection.bson
2025-04-25T22:44:21.310+0800    writing test.myCollection to dump/test/myCollection.bson
2025-04-25T22:44:21.313+0800    done dumping test.myCollection (3 documents)
2025-04-25T22:44:21.313+0800    done dumping test.myComplexCollection (0 documents)
2025-04-25T22:44:21.334+0800    done dumping mydb.myCollection (3 documents)
[root@localhost ~]# ls
dump

? 3. MongoDB數據恢復

[root@localhost ~]# mongorestore
2025-04-25T22:50:28.111+0800    using default 'dump' directory
2025-04-25T22:50:28.111+0800    preparing collections to restore from
2025-04-25T22:50:28.111+0800    don't know what to do with file "dump/prelude.json", skipping...
2025-04-25T22:50:28.111+0800    reading metadata for mydb.myCollection from dump/mydb/myCollection.metadata.json
2025-04-25T22:50:28.111+0800    reading metadata for test.myCollection from dump/test/myCollection.metadata.json
2025-04-25T22:50:28.111+0800    reading metadata for test.myComplexCollection from dump/test/myComplexCollection.metadata.json
2025-04-25T22:50:28.125+0800    restoring test.myCollection from dump/test/myCollection.bson
2025-04-25T22:50:28.134+0800    restoring mydb.myCollection from dump/mydb/myCollection.bson
2025-04-25T22:50:28.136+0800    finished restoring test.myCollection (3 documents, 0 failures)
2025-04-25T22:50:28.140+0800    restoring test.myComplexCollection from dump/test/myComplexCollection.bson
2025-04-25T22:50:28.144+0800    finished restoring mydb.myCollection (3 documents, 0 failures)
2025-04-25T22:50:28.151+0800    finished restoring test.myComplexCollection (0 documents, 0 failures)
2025-04-25T22:50:28.151+0800    no indexes to restore for collection mydb.myCollection
2025-04-25T22:50:28.151+0800    no indexes to restore for collection test.myCollection
2025-04-25T22:50:28.151+0800    no indexes to restore for collection test.myComplexCollection
2025-04-25T22:50:28.151+0800    6 document(s) restored successfully. 0 document(s) failed to restore.

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

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

相關文章

聲網對話式AI把“答疑機器人”變成“有思維的助教”

作為一家專注初高中學生的線上教育平臺&#xff0c;我們精心打磨的系統化課程收獲了不少認可&#xff0c;但課后無人答疑的難題卻始終橫亙在前。學生課后遇到疑惑&#xff0c;要么只能默默憋在心里&#xff0c;要么就得苦苦等待下一節課&#xff0c;家長們也頻繁抱怨 “花了錢&…

常見的排序方法

目錄 1. 插入排序 2. 希爾排序 3. 選擇排序 4. 堆排序 5. 冒泡排序 6. 快速排序 1. 快速排序的實現 1. 思路&#xff08;以從小到大排序為例&#xff09; 2. 選取基準元素的方法&#xff08;Hoare&#xff09; 3. 選取基準元素的方法&#xff08;挖坑法&#xff09; …

【matlab定位例程】基于AOA和TDOA混合的定位方法,背景為三維空間,自適應錨點數量,附下載鏈接

文章目錄 代碼概述代碼功能概述核心算法原理AOA定位模型TDOA定位迭代算法混合定位策略關鍵技術創新 運行結果4個錨點的情況40個錨點的情況 MATLAB源代碼 代碼概述 代碼功能概述 本代碼實現了一種三維空間中的混合定位算法&#xff0c;結合到達角&#xff08; A O A AOA AOA&a…

專題:2025醫療AI應用研究報告|附200+份報告PDF匯總下載

原文鏈接&#xff1a;https://tecdat.cn/?p42748 本報告匯總解讀聚焦醫療行業人工智能應用的前沿動態與市場機遇&#xff0c;以數據驅動視角剖析技術演進與商業落地的關鍵路徑。從GenAI在醫療領域的爆發式增長&#xff0c;到細分場景的成熟度矩陣&#xff0c;再到運營成本壓力…

推薦一個前端基于vue3.x,vite7.x,后端基于springboot3.4.x的完全開源的前后端分離的中后臺管理系統基礎項目(純凈版)

XHan Admin 簡介 &#x1f389;&#x1f389; XHan Admin 是一個開箱即用的開源中后臺管理系統基礎解決方案&#xff0c; 項目為前后端分離架構。采用最新的技術棧全新構建&#xff0c;純凈的項目代碼&#xff0c;沒有歷史包袱。 前端使用最新發布的 vite7.0 版本構建&#xf…

MySQL誤刪數據急救指南:基于Binlog日志的實戰恢復詳解

背景 數據誤刪是一個比較嚴重的場景 1.典型誤操作場景 場景1&#xff1a;DELETE FROM orders WHERE status0 → 漏寫AND create_time>‘2025-06-20’ 場景2&#xff1a;DROP TABLE customer → 誤執行于生產環境 認識 binlog 1.binlog 的核心作用 記錄所有 DDL/DML 操…

高效數據采集方案:快速部署與應用 AnyCrawl 網頁爬蟲工具實操指南

以下是對 AnyCrawl 的簡單介紹&#xff1a; AnyCrawl 提供高性能網頁數據爬取&#xff0c;其功能專為 LLM 集成和數據處理而設計支持利用搜索引擎直接查詢獲取結果內容&#xff0c;類似 searxng提供開發者友好的API&#xff0c;支持動態內容抓取&#xff0c;并輸出結構化數據&…

vue3可以分頁、搜索的select

下載 npm i v-selectpage基本使用 import { SelectPageList } from v-selectpage;<SelectPageListlanguage"zh-chs"key-prop"id"label-prop"name"fetch-data"fetchData" />const fetchData (data,callback) > {const { sea…

C# 入門學習教程 (一)

文章目錄 一、解決方案與項目1. Solution 與 project 二、類與名稱空間1.類與名稱空間2.類庫的引用1. DLL引用&#xff08;黑盒引用&#xff0c;無源代碼&#xff09;2. Nuget 引用3. 項目引用&#xff08;白盒引用&#xff0c;有源代碼&#xff09; 3.依賴關系 三、類&#xf…

76、單元測試-參數化測試

76、單元測試-參數化測試 參數化測試是一種單元測試技術&#xff0c;通過將測試數據與測試邏輯分離&#xff0c;使用不同的輸入參數多次運行相同的測試用例&#xff0c;從而提高測試效率和代碼復用性。 #### 基本原理 - **數據驅動測試**&#xff1a;將測試數據參數化&#xf…

SQL學習筆記3

SQL常用函數 1、字符串函數 函數調用的語法&#xff1a;select 函數&#xff08;參數); 常用的字符串函數有&#xff1a; 拼接字符串&#xff0c;將幾個字符串拼到一起&#xff1a;concat (s1,s2,……); select concat(你好,hello); update mytable set wherefo concat(中…

Golang 面向對象編程,如何實現 封裝、繼承、多態

Go語言雖然不是純粹的面向對象語言&#xff0c;但它通過結構體(struct)、接口(interface)和方法(method)提供了面向對象編程的能力。下面我將通過具體示例展示Go中如何實現類、封裝、繼承、多態以及構造函數等概念。 1. 類與封裝 在Go中&#xff0c;使用結構體(struct)來定義…

為什么android要使用Binder機制

1.linux中大多數標準 IPC 場景&#xff08;如管道、消息隊列、ioctl 等&#xff09;的進程間通信機制 ------------------ ------------------ ------------------ | 用戶進程 A | | 內核空間 | | 用戶進程 B | | (User Spa…

OpenCV CUDA模塊設備層-----雙曲余弦函數cosh()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數用于計算四維浮點向量&#xff08;float4類型&#xff09;的雙曲余弦值&#xff0c;作用于CUDA設備端。雙曲余弦函數定義為cosh(x) (e? …

48頁PPT | 企業數字化轉型關鍵方法論:實踐路徑、案例和落地評估框架

目錄 一、什么是企業數據化轉型&#xff1f; 二、為什么要進行數據化轉型&#xff1f; 1. 市場復雜性與不確定性上升 2. 內部流程效率與協同難題突出 3. 數字資產沉淀不足&#xff0c;智能化基礎薄弱 三、數據化流程管理&#xff1a;從“業務流程”到“數據流程”的對齊 …

VTK中的形態學處理

VTK圖像處理代碼解析:閾值化與形態學開閉運算 這段代碼展示了使用VTK進行醫學圖像處理的兩個關鍵步驟:閾值分割和形態學開閉運算。下面我將詳細解析每個部分的功能和實現原理。 處理前 處理后 1. 閾值分割部分 (vtkImageThreshold) vtkSmartPointer<vtkImageThresho…

xlsx.utils.sheet_to_json() 方法詳解

sheet_to_json() 是 SheetJS/xlsx 庫中最常用的方法之一&#xff0c;用于將 Excel 工作表&#xff08;Worksheet&#xff09;轉換為 JSON 格式數據。下面我將全面講解它的用法、參數配置和實際應用場景。 基本語法 javascript 復制 下載 const jsonData XLSX.utils.sheet…

〔從零搭建〕BI可視化平臺部署指南

&#x1f525;&#x1f525; AllData大數據產品是可定義數據中臺&#xff0c;以數據平臺為底座&#xff0c;以數據中臺為橋梁&#xff0c;以機器學習平臺為中層框架&#xff0c;以大模型應用為上游產品&#xff0c;提供全鏈路數字化解決方案。 ?杭州奧零數據科技官網&#xf…

合規型區塊鏈RWA系統解決方案報告——機構資產數字化的終極武器

&#xff08;跨境金融科技解決方案白皮書&#xff09; 一、直擊機構客戶四大痛點 痛點傳統方案缺陷我們的破局點?? 跨境資產流動性差結算周期30天&#xff0c;摩擦成本超8%?? 724h全球實時交易&#xff08;速度提升90%&#xff09;?? 合規成本飆升KYC/AML人工審核占成本…

探索阿里云容器:解鎖云原生應用的無限可能

引言&#xff1a;容器時代的開啟 在數字化浪潮洶涌澎湃的當下&#xff0c;云計算已成為企業創新與發展的關鍵驅動力。從早期的基礎設施即服務&#xff08;IaaS&#xff09;&#xff0c;到如今蓬勃發展的平臺即服務&#xff08;PaaS&#xff09;和軟件即服務&#xff08;SaaS&a…