MongoDB 中的 Namespace(命名空间)是什么?
在 MongoDB 中,Namespace(命名空间) 是集合(Collection)的唯一标识符,也就是集合的“全名”。
它由数据库名称和集合名称拼接而成,中间用点号(.)分隔。
以下是关于 Namespace 的详细解释:
1. 格式与组成
命名空间的格式如下:
plaintext
<database_name>.<collection_name>
- Database Name(数据库名): 集合所属的数据库。
- . (点号): 分隔符。
- Collection Name(集合名): 集合本身的名称。
2. 举个例子
假设你有一个数据库叫做 shop,里面有一个集合叫做 users。
- 那么这个集合的 Namespace 就是:
shop.users
如果同一个数据库里还有一个 orders 集合,它的 Namespace 就是 shop.orders。
3. 长度限制(重要)
Namespace 的最大长度取决于你使用的 MongoDB 存储引擎:
- WiredTiger 引擎(现代版本默认):
- 基本上没有实际限制。虽然理论上有限制,但非常大,日常开发中几乎不可能触及。
- MMAPv1 引擎(旧版本,已废弃):
- 限制非常严格,Namespace 的最大长度不能超过 120 字节(包含数据库名、点号和集合名)。
- 注意:MongoDB 4.2 版本已彻底移除 MMAPv1 引擎。
4. 命名空间的作用
- 唯一性: 在整个 MongoDB 实例中,
database.collection的组合必须是唯一的。虽然不同的数据库可以有同名的集合(例如db1.users和db2.users),但它们的 Namespace 是不同的,因此被视为完全不同的实体。 - 内部寻址: MongoDB 内部使用 Namespace 来定位数据文件、索引和元数据。
- 系统集合: MongoDB 也会使用特殊的 Namespace 来存储系统信息,例如:
local.oplog.rs: 存储操作日志(Oplog),用于复制集同步。config.chunks: 在分片集群中存储数据块信息。
5. 总结
简单来说,Namespace 就是 MongoDB 中集合的“全限定名”(Fully Qualified Name)。当你对 MongoDB 说“我要查 users 表”时,MongoDB 内部其实是在问“是哪个 Namespace?是 test.users 还是 production.users?”