分片集群中的操作限制
在此页面上
分片操作限制
分片环境中的不可用操作
$where
不允许引用 $where
函数中的 db
对象。这在未分片集合中并不常见。
分片环境中不支持 geoSearch
命令。
分片集合中的单份文档修改操作
要对指定 multi: false
或 justOne
选项的分片集合使用 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 |