基于本文回答

播面 播面

刷题像听歌,多听自然懂
0
评论

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.usersdb2.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?”

00:00
00:00