MongoDB 数据模型与配置
Mongo DB 介绍
- 数据模型:MongoDB 使用 BSON(二进制 JSON)格式来存储数据。BSON 是一种二进制表示形式,类似于 JSON,但支持更多的数据类型,例如日期、二进制数据和特定的地理空间类型。每个文档都有一个唯一的"_id"字段作为主键。
- 集群和复制:MongoDB 支持分布式部署,可以将数据分布在多个服务器上的集群中。集群提供了高可用性和容错能力,如果某个节点发生故障,系统可以自动切换到其他节点。复制是通过将数据复制到多个服务器来实现的,其中一个服务器是主服务器,负责写入操作,其他服务器是备份服务器,用于读取操作和故障恢复。
- 索引和查询:MongoDB 支持多种类型的索引,包括单字段索引、组合索引、文本索引和地理空间索引等。索引可以大大提高查询性能。MongoDB 的查询语言丰富而强大,支持比较、范围、正则表达式、逻辑操作符等复杂的查询操作。
- 事务支持:MongoDB 从版本 4.0 开始引入了对多文档事务的支持。事务允许开发人员在多个操作上维护数据的一致性和完整性。通过事务,可以确保多个写操作要么全部成功执行,要么全部回滚,从而保持数据的一致性。
- 安全性:MongoDB 提供了多种安全性功能来保护数据的机密性和完整性。它支持访问控制、身份验证和角色管理,可以限制用户对数据库的访问权限。此外,MongoDB 还提供了加密通信、字段级加密和审计功能等,以增强数据的安全性。
- 可视化管理工具:MongoDB 提供了名为 MongoDB Compass 的官方可视化管理工具,用于浏览和操作数据库。它提供了一个直观的界面,可以执行数据查询、创建索引、监视性能和管理集群等任务。
- 社区支持和生态系统:MongoDB 有一个庞大的活跃社区,提供了广泛的文档、教程和示例代码。此外,还有许多第三方工具和库与 MongoDB 集成,例如 ORM(对象关系映射)工具、数据迁移工具和可视化报表工具等,为开发人员提供了更多的选择和灵活性
优劣
优势
- 灵活的数据模型:MongoDB 使用类似 JSON 的 BSON 格式存储数据,文档模型非常灵活,可以存储不同结构的数据。
- 高性能:MongoDB 支持水平扩展,能够处理大量的并发请求,具有很高的读写性能。
- 强大的查询功能:支持丰富的查询操作,包括字段查询、范围查询、正则表达式、全文搜索等。
- 高可用性:MongoDB 支持主从复制和分片,可以保证数据的高可用性和可靠性。
- 自动分片:MongoDB 可以根据数据量自动分片,简化了水平扩展的管理
劣势
数据库,集合,文档,限制,限制
- 数据库(Database)
- MongoDB 可以同时管理多个数据库。每个数据库都有独立的命名空间,用于存储集合和文档。
- 每个数据库在物理上由一个或多个文件组成,这些文件存储实际的数据和索引。
- 集合(Collection)
- 集合是 MongoDB 中的一个逻辑概念,用于组织和存储一组相关的文档。
- 集合不要求预定义的结构,即不同的文档可以有不同的字段和结构。
- 集合可以通过数据库对象进行访问,例如 db.collectionName。
- 文档(Document)
- 文档是 MongoDB 中存储数据的基本单位,类似于关系数据库中的行。
- 文档使用 BSON(二进制 JSON)格式表示,是一个有序的键值对集合。
- 文档可以包含多种类型的数据,如字符串、整数、浮点数、布尔值、数组、嵌套文档等。
- 限制(Limitations)
- 单个文档的最大大小为 16MB。如果需要存储更大的数据,可以使用 GridFS 来处理大型文件。
- 单个集合中的文档数目没有明确的限制,但是在实际使用中,应根据系统资源和查询性能进行适度的控制。
- MongoDB 支持的最大数据库数量、集合数量和索引数量都有一定的限制,具体取决于 MongoDB 的版本和配置。
- 单文档写操作具有原子性。MongoDB 4.0 引入副本集多文档事务,4.2 扩展到分片集群;读写关注级别、事务时限和不支持的操作仍需按目标版本核对,不能概括为所有部署“全面支持”。
配置文件
原记录混列了旧式 dbpath/logpath/auth 与点分键,不能拼成同一份配置。本节以 MongoDB 8.0 的 YAML 层级说明名称;使用其他版本先查对应手册。包安装常见文件为 /etc/mongod.conf,实际位置以启动参数为准。下面仅演示本地实例,不是已运行配置;目录必须存在且运行账号可写:
yaml
storage:
dbPath: /data/db
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
net:
bindIp: 127.0.0.1
port: 27017| 原记录名称 | YAML中对应位置与前提 |
|---|---|
| bindIp / port | net.bindIp / net.port;扩大监听范围前单独配置认证、网络访问和TLS |
| dbpath | storage.dbPath,注意大小写 |
| logpath / logappend | systemLog.path / systemLog.logAppend,文件日志还需destination: file |
| fork | processManagement.fork;服务管理器与平台有额外约束,不应无条件设为true |
| auth / security.authorization | YAML使用security下的authorization: enabled;启用前按目标版本完成用户初始化,不能只粘贴旧auth: true |
| replication | YAML使用replication下的replSetName;配置名称不等于已经初始化副本集 |
| storage.journal.enabled | MongoDB 6.1起已移除此选项;8.0不应加入该键,不能将旧启停journal例复制过来 |
点分名称用于文档索引,不代表可以直接写成顶层YAML键。核对MongoDB 8.0配置文件格式与选项后,再由部署拥有者确认路径、账号和拓扑;本文没有验证实际环境。
继续阅读
- 知识专题
- 知识专题
- 应用实践