113 lines
4.7 KiB
Markdown
113 lines
4.7 KiB
Markdown
# 基础概念
|
||
|
||
本章节将介绍 NoSQL 数据库的基本概念,并深入探讨 MongoDB 的核心概念、架构原理,为后续的学习打下坚实的基础。
|
||
|
||
---
|
||
|
||
## NoSQL 数据库概述
|
||
|
||
NoSQL(Not Only SQL)泛指非关系型数据库,它们在数据结构、可扩展性和事务模型上与传统的关系型数据库(如 MySQL)有显著不同。
|
||
|
||
### 关系型数据库 vs NoSQL 数据库
|
||
|
||
| 特性 | 关系型数据库 (RDBMS) | NoSQL 数据库 |
|
||
| :--- | :--- | :--- |
|
||
| **数据模型** | 基于表(Table)和行(Row)的结构化数据 | 多样化模型(文档、键值、列族、图) |
|
||
| **Schema** | 固定(Schema-on-Write),需预先定义表结构 | 动态(Schema-on-Read),数据结构灵活 |
|
||
| **扩展性** | 主要通过垂直扩展(Scale-Up)提升单机性能 | 主要通过水平扩展(Scale-Out)构建分布式集群 |
|
||
| **事务** | 遵循 ACID 原则,保证强一致性 | 通常遵循 BASE 原则,保证最终一致性 |
|
||
| **适用场景** | 事务性要求高、数据结构稳定的应用 | 大数据、高并发、需要快速迭代的应用 |
|
||
|
||
### NoSQL 数据库分类
|
||
|
||
NoSQL 数据库根据其数据模型的不同,主要分为以下几类:
|
||
|
||
1. **文档型数据库 (Document-Oriented)**
|
||
- **特点**:以文档(通常是 JSON 或 BSON 格式)为单位存储数据,结构灵活。
|
||
- **代表**:MongoDB, CouchDB
|
||
|
||
2. **键值型数据库 (Key-Value)**
|
||
- **特点**:数据以简单的键值对形式存储,查询速度快。
|
||
- **代表**:Redis, Memcached
|
||
|
||
3. **列族型数据库 (Column-Family)**
|
||
- **特点**:数据按列族存储,适合大规模数据聚合分析。
|
||
- **代表**:Cassandra, HBase
|
||
|
||
4. **图形型数据库 (Graph)**
|
||
- **特点**:专注于节点和边的关系,适合社交网络、推荐系统等场景。
|
||
- **代表**:Neo4j, ArangoDB
|
||
|
||
### MongoDB 在 NoSQL 生态中的定位
|
||
|
||
MongoDB 是文档型数据库的杰出代表,它凭借其灵活的数据模型、强大的查询语言和高可扩展性,在 NoSQL 生态中占据了重要地位。它特别适用于需要快速开发、数据结构多变、高并发读写的应用场景。
|
||
|
||
---
|
||
|
||
## 核心概念
|
||
|
||
理解 MongoDB 的核心概念是掌握其使用的第一步。
|
||
|
||
### 文档(Document)与 BSON 格式
|
||
|
||
- **文档 (Document)**:是 MongoDB 中数据的基本单元,由一组键值对(key-value)组成,类似于 JSON 对象。文档的结构是动态的,同一个集合中的文档可以有不同的字段。
|
||
|
||
```json
|
||
{
|
||
"_id": ObjectId("60c72b2f9b1d8b3b8c8b4567"),
|
||
"name": "Alice",
|
||
"age": 30,
|
||
"email": "alice@example.com",
|
||
"tags": ["mongodb", "database", "nosql"]
|
||
}
|
||
```
|
||
|
||
- **BSON (Binary JSON)**:MongoDB 在内部使用 BSON 格式存储文档。BSON 是 JSON 的二进制表示形式,它支持更多的数据类型(如日期、二进制数据),并优化了存储空间和查询性能。
|
||
|
||
### 集合(Collection)概念
|
||
|
||
- **集合 (Collection)**:是 MongoDB 文档的容器,可以看作是关系型数据库中的表(Table)。但与表不同,集合不需要预先定义结构(schema-less)。
|
||
|
||
### 数据库(Database)结构
|
||
|
||
- **数据库 (Database)**:是集合的物理容器。一个 MongoDB 实例可以承载多个数据库,每个数据库都有自己独立的权限和文件。
|
||
|
||
### MongoDB 与关系型数据库术语对比
|
||
|
||
| MongoDB | 关系型数据库 (RDBMS) |
|
||
| :--- | :--- |
|
||
| Database | Database |
|
||
| Collection | Table |
|
||
| Document | Row (or Record) |
|
||
| Field | Column (or Attribute) |
|
||
| Index | Index |
|
||
| Replica Set | Master-Slave Replication |
|
||
| Sharding | Partitioning |
|
||
|
||
---
|
||
|
||
## 架构原理
|
||
|
||
了解 MongoDB 的底层架构有助于我们更好地进行性能调优和故障排查。
|
||
|
||
### 存储引擎(WiredTiger)
|
||
|
||
WiredTiger 是 MongoDB 默认的存储引擎,它提供了文档级别的并发控制、数据压缩和快照等高级功能,是 MongoDB 高性能的关键。
|
||
|
||
### 内存映射文件系统
|
||
|
||
MongoDB 使用内存映射文件(Memory-Mapped Files)来处理数据。它将磁盘上的数据文件映射到内存中,使得 MongoDB 可以像访问内存一样访问数据,从而将数据管理委托给操作系统的虚拟内存管理器,简化了代码并提升了性能。
|
||
|
||
### 索引机制
|
||
|
||
为了提高查询效率,MongoDB 支持在任意字段上创建索引。与关系型数据库类似,MongoDB 的索引也采用 B-Tree 数据结构,能够极大地加速数据检索过程。
|
||
|
||
### 查询优化器
|
||
|
||
MongoDB 内置了一个查询优化器,它会分析查询请求,并从多个可能的查询计划中选择一个最优的执行计划,以确保查询的高效性。
|
||
|
||
---
|
||
|
||
## 文档学习
|
||
|
||
- 阅读 MongoDB 官方文档中关于“核心概念”的部分。 |