MongoDB 分片技术全面解析
1. 分片设置
分片操作是在集合层面进行的。由于各种原因,有些集合可能不需要进行分片,这些未分片的集合会被存储在主分片中。在 MongoDB 中,每个数据库的主分片是不同的,当在分片环境中创建新数据库时,MongoDB 会自动选择当前存储数据最少的分片作为主分片。
若要更改主分片,可以使用以下命令:
> db.runCommand( { movePrimary : "mongo_books", to : "UK_based" } )
此命令将 mongo_books
数据库移动到名为 UK_based
的分片中。
2. 选择分片键
选择合适的分片键至关重要,因为一旦对数据进行分片并部署集群,更改分片键会变得非常困难。
2.1 更改分片键
在 MongoDB 中,没有直接的命令或简单的方法来更改分片键。唯一的方法是备份并恢复所有数据,这在高负载的生产环境中可能极其困难甚至无法实现。具体步骤如下:
1. 从 MongoDB 导出所有数据。
2. 删除原始的分片集合。
3. 使用新的键配置分片。
4. 预分割新的分片键范围。
5. 将数据恢复到 MongoDB 中。
在这些步骤中,步骤 4 需要进一步解释。MongoDB 使用数据块(chunks)来分割分片集合中的数据。如果从零开始启动 MongoDB 分片集群,MongoDB 会自动计算数据块,并将其分布在不同的分片中,以确保每