MongoDB 是一种流行的分布式文档型数据库,随着其在各行业的广泛应用,规范的命名和设计显得尤为重要,这不仅有助于提升管理效率,还能确保系统的稳定性和性能。以下是对MongoDB数据库命名和设计规范的详解:
**一、命名规范**
1. **文档键的命名**:
- **强制**:键不能包含空字符`\0`或美元符号`$`,这两个字符有特殊含义。
- **强制**:键必须区分大小写,且不能重复。
- **强制**:禁止使用数字开头的键,以避免与数字索引混淆。
- **强制**:避免自定义`_id`字段,因为MongoDB默认会生成全局唯一的`_id`,自定义可能导致性能下降。
- **建议**:相似类型的文档应放入同一集合,利于索引利用。
- **建议**:如果大小写不敏感,建议统一存储大小写,或使用辅助字段处理。
2. **集合的命名**:
- **强制**:集合名不能是空字符串,不能包含`\0`,也不能以`system.`开头。
- **强制**:集合名应全小写且不超过64个字符。
- **强制**:禁止数字或`system`开头的集合名。
- **建议**:尽量避免使用“单库多集合”,以减少库级锁的影响。
3. **数据库的命名**:
- **强制**:数据库名不能包含`/`, `\`, `.`, `"`, `*`, `<`, `>`, `:`, `|`, `?`, `$`, 空格或`\0`。
- **强制**:全小写,不超过64字节。
- **强制**:避免与保留的数据库名(如`admin`, `local`, `config`)重名。
**二、设计规范**
1. **索引**:
- **强制**:索引名称长度不超过128字节。
- **强制**:禁止在数组字段上创建索引,这可能导致存储和查询效率降低。
- **建议**:组合索引时,基数大的字段放前面,以优化查询性能。
2. **查询**:
- **建议**:先执行等值查询,再进行排序,最后进行范围查询。
- **避免**:使用可能导致性能低下的操作符,如`$ne`, `$not`, `$exists`, `$nin`, `$or`。
3. **命名空间**:
- 命名空间是数据库名与集合名的组合,如`database.collection`,最长不超过100字节。
**三、数据库设计**:
- **数据库名**:全小写,不包含特殊字符,长度不超过64。
- **集合名**:全小写,禁止`system.`开头,长度不超过64。
- **上线评审**:数据库上线前需通过DBA的评审,确保设计合理。
这些规范旨在提供一个清晰、高效、可维护的MongoDB环境。遵循这些指导原则,可以避免很多潜在的问题,同时提高数据库的可用性和性能。在实践中,还需要结合具体业务需求进行适当的调整和优化。