Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

分片集群中的操作限制

在此页面上

  • 分片操作限制
  • 对现有集合数据大小进行分片

$where 不允许引用 $where 函数中的 db 对象。这在未分片集合中并不常见。

分片环境中不支持 geoSearch 命令。

在 MongoDB 5.0 及更早版本中,您无法在 $lookup 阶段的 from 参数中指定分片集合

要对指定 multi: falsejustOne 选项的分片集合使用 updateOne() deleteOne() 操作:

  • 如果您仅针对一个分片,则可以在查询规范中使用部分分片键,或者

  • 您可以在查询规范中提供分片键_id 字段。

要将 findOneAndUpdate() 与分片集合一起使用,您的查询筛选器必须在分片键上包含相等条件,以比较以下任一格式的键和值:

{ key: value }
{ key: { $eq: value } }

MongoDB 不支持跨分片的唯一索引,除非唯一索引包含完整分片键作为索引的前缀。在这些情况下,MongoDB 将在整个键上强制执行唯一性,而不是单个字段。

提示

请参阅:

对任意字段的唯一约束,了解另一种方法。

仅当现有集合的大小不超过特定限制时,才能对其进行分片。 可以根据所有分片键值的平均大小和配置的数据大小来估计这些限制。

重要

这些限制仅适用于初始分片操作。 成功启用分片后,分片集合可以增长到任意大小。

MongoDB 在集合中分配文档,以便每个数据段在创建时都是半满的。 使用以下公式计算理论最大集合大小。

maxSplits = 16777216 (bytes) / <average size of shard key values in bytes>
maxCollectionSize (MB) = maxSplits * (chunkSize / 2)

注意

BSON文档的最大大小为16 MB 或16777216字节。

所有转化均应使用基数2的比例,例如 1024千字节 = 1兆字节。

如果maxCollectionSize小于或接近等于目标集合,则增加数据段大小以确保成功进行初始分片。 如果怀疑计算结果是否太“接近”目标集合大小,则最好增加数据段大小。

成功完成初始分片后,您可以根据需要减小数据段大小。 如果您稍后减小数据段大小,则所有数据段可能需要一些时间才能分割到新大小。 有关修改数据段大小的说明,请参阅修改分片集群中的数据段大小。

下表说明了使用上述公式得出的近似最大集合大小:

分片键值的平均大小
512字节
256字节
128字节
64字节

最大分割数

32 , 768

65 , 536

131 , 072

262 , 144

最大集合大小( 64 MB 数据段大小)

1 TB

2 TB

4 TB

8 TB

最大集合大小( 128 MB 数据段大小)

2 TB

4 TB

8 TB

16 TB

最大集合大小( 256 MB 数据段大小)

4 TB

8 TB

16 TB

32 TB

后退

参考