MongoDB 业务背景及方案设计

一、业务背景

1.1 项目信息

项目说明
时间2023.6 - 2024.9
产品类型互联网动态站点 商城
用户数量25000 - 30000(用户量猛增)
PV1000000 - 5000000(24小时访问次数总和)
DAU10000 - 20000(每日活跃用户数)

1.2 业务需求

用户访问日志存储在 Web 服务器 access.log 中,需要集中化存储和分析。

1.3 运维架构设计

采用 MongoDB 数据库存储用户访问日志,使用单台服务器实现:

1. 访问日志集中化存储 - 统一收集各 Web 服务器日志 2. 用户行为分析 - 在 MongoDB 中筛选查看信息,实现用户行为分析

---

二、MongoDB 概述

2.1 MongoDB 介绍

数据库排名: https://db-engines.com/en/ranking

关系型数据库(RDBMS):

非关系型数据库(NoSQL):

MongoDB 定位:

2.2 存储介质对比

数据库类型存储介质代表数据库
关系型数据库硬盘MySQL/MariaDB/SQL Server/Oracle
非关系型数据库内存(MongoDB 例外)Redis
MongoDB磁盘 + 内存加速MongoDB
注意: MongoDB 不是纯内存数据库,只是极度依赖内存做加速。真正的数据可靠性仍靠磁盘存储和日志机制保障。

2.3 MongoDB 特点

存储性

存储单位换算:

1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB

效率性

MongoDB 与 MySQL 效率对比:

对比项MongoDBMySQL
数据模型文档(BSON)关系表
查询语言MQL(MongoDB Query Language)SQL
事务支持支持多文档事务完整 ACID 事务
扩展方式水平扩展(分片)垂直扩展为主
适用场景大量非结构化数据结构化数据

2.4 术语与概念对比

SQL 术语MongoDB 术语说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
column/fieldfield数据字段/域
indexindex索引
table joins-表连接,MongoDB 不支持
primary keyprimary key主键,MongoDB 自动将 _id 字段设置为主键

2.5 BSON 格式

BSON(Binary JSON) 是 MongoDB 用来存储和传输数据的核心格式。

特点:

三大优点: 1. 轻量 - 结构紧凑,适合传输 2. 可遍历 - 支持快速定位字段 3. 高效 - 读取某字段无需解析整个文档

示例:

{
    title: "MongoDB",               // 字符串类型
    last_editor: "192.168.1.122",   // 字符串类型
    last_modified: new Date(),      // 日期类型
    body: "MongoDB introduction",   // 字符串类型
    categories: ["Database", "NoSQL", "BSON"],  // 数组类型
    reviewed: false                 // 布尔类型
}

---

三、MongoDB 安装

3.1 安装方式

官方网站: https://www.mongodb.com/

下载地址:

3.2 环境准备

前提条件:

3.3 配置官方 YUM 源

# 创建 MongoDB yum 源配置文件
vim /etc/yum.repos.d/mongodb-org.repo

命令作用:

执行结果:

关键参数:

注意事项:

[mongodb-org-8.0] baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/8.0/x86_64/ gpgcheck=0 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-8.0.asc


**注意事项:**




关键参数:

注意事项:





});

});




security:

注意事项:


**关键参数:**

**注意事项:**



**基本语法:**

案例:备份整个数据库


**参数说明:**

**备份后目录结构:**

itheima_backup/


**查看备份文件信息:**

如果需要身份验证:


**常见备份异常说明:**



备份所有数据库:


#!/bin/bash

HOST="10.0.0.100"
PORT="27017"
USER="admin"
PASS="123456"
AUTH_DB="admin"
OUT_DIR="/backup/itheima_backup"

基本语法:


**案例:还原数据库**

参数说明:

如果需要身份验证:

注意事项:

---

数据结构: { }, }


**题目:**











**答案:**

db.students.insertOne({
})

db.students.insertMany([
  {
  },
  {
  },
  {
  }
])

db.students.find()





数据结构: { }


**题目:**






**答案:**

db.employees.insertMany([
  {
  },
  {
  }
])

db.employees.updateOne(
)

db.employees.updateMany(
)

---

解决:

解决:

示例:


**注意事项:**



**解决:**

答案:

为什么比传统关系型数据库快?