常见问题解答:使用 MongoDB 进行分片
本文档回答了有关分片的常见问题。 另请参阅手册中的分片部分,其中概述了分片,包括以下详细信息:
分片是否适合新的部署?
有时。但是,如果您的数据集适合放在单个服务器上,则应从非分片部署开始,因为在数据集较小的情况下进行分片几乎没有优势。
是否可以在分片集合后选择不同的分片键?
更改分片键的选项取决于您当前运行的 MongoDB 版本:
为什么我的文档没有分布式在各个分片上?
一旦数据段的分布达到特定阈值,负载负载均衡器就会开始跨分片分布数据。 请参阅迁移阈值。
此外,如果数据段中的文档数据块超过数据块,则MongoDB无法移动该数据段。 请参阅要迁移的每个范围的最大文档数和不可分割/巨型数据段。
mongos
如何检测分分片集群配置中的更改?
mongos
实例维护配置数据库的缓存,该数据库保存分分片集群的元数据。
mongos
通过向分片分片请求并发现其元数据已过期来延迟更新其缓存。 要强制mongos
重新加载缓存,您可以直接对每个 运行flushRouterConfig
mongos
命令。
mongos
如何使用连接?
每个mongos
实例都维护一个与分分片集群成员的连接池。 客户端请求一次使用一个这些连接;即请求不是多路复用或管道化的。
客户端请求完成后, mongos
将连接返回到池中。 当客户端数量减少时,这些池不会缩小。 这可能会导致未使用的mongos
具有大量打开的连接。 如果不再使用mongos
,则可以安全地重新启动进程以关闭现有连接。
要返回与mongos
使用的所有传出连接池相关的聚合统计信息,请将 mongosh
连接到mongos
,然后运行connPoolStats
命令:
db.adminCommand("connPoolStats");
请参阅 《自管理部署的 UNIXulimit
设置》 文档中的“ 系统资源利用率”部分。