在分片集群中创建范围
在此页面上
在大多数情况下, 分片集群会自动创建/分割和分发范围,无需用户干预。但是,在有限的情况下,MongoDB 无法创建足够多的范围或以足够快的速度分发数据,从而无法支持所需的吞吐量。
例如,您想要将大量数据摄入到不平衡的集群中,或者数据的摄入会导致数据不平衡,例如使用单调增加或减少的分片键。在此类情况下,对空分片集合的范围预分片有助于提高吞吐量。
或者,通过在对空集合或不存在的集合进行分片之前定义区域和区域范围,分片集合操作会为已定义的区域范围创建范围以及任何其他范围,以覆盖分片键值的整个范围,并执行基于区域范围的初始范围分配。有关更多信息,请参阅空集合。
警告
仅对空集合的范围进行预分片。手动分割已填充集合的范围可能会导致不可预测的范围和大小,以及低效或无效的平衡行为。
要手动分割空范围,可以运行 split
命令:
例子
要使用email
字段作为分片键为myapp.users
集合中的文档创建范围,请在 mongosh
中使用以下操作:
for ( var x=97; x<97+26; x++ ){ for ( var y=97; y<97+26; y+=6 ) { var prefix = String.fromCharCode(x) + String.fromCharCode(y); db.adminCommand( { split: "myapp.users", middle: { email : prefix } } ); } }
假设集合大小为100万份文档。
了解详情
通过分片命令创建和分配的初始范围,请参阅空集合。
手动迁移范围,请参阅在分片集群中迁移范围。