如果一个碎片说它上面有200个块,那么是时候把它们中的一些块移到另一个碎片上了,
1> mongo db如何决定移动哪些块?
2>这是在配置服务器或mongos中移动逻辑吗?
3>我如何影响/控制块选择算法,以便mongodb将块移动到其他分片,以便根据我的用户访问模式分配我的读取?
答案 0 :(得分:4)
mongos触发了碎片之间的块移动。 Mongos将在两种情况下移动大块。如果一个分片包含9个或更多块,则mongos将触发平衡循环并在其他分片之间重新分配块。在这种情况下,将移动具有最低分片键的块。此外,如果最顶层的块被拆分,mongos会将具有较高分片键的块移动到另一个分片。
Mongo的一个功能是,在正确设置的分片群集中,块被自动分割和移动,这样您的应用程序就不需要知道它正在与分片数据库交互。一切都发生在幕后。
但是,可以使用“split”和“moveChunks”命令手动分割和移动块。有关如何使用这些命令的示例,请参阅mongo文档:“拆分碎片块”http://www.mongodb.org/display/DOCS/Splitting+Shard+Chunks和“移动 Chunks“http://www.mongodb.org/display/DOCS/Moving+Chunks在某些情况下,用户已将自己的自定义平衡器编写到自己的应用程序中,但这种情况并不常见,只有最先进的用户才会尝试。
作为替代方案,可以给予平衡器可以操作的时间窗口,或者完全禁用它。有些用户会暂时禁用平衡器进行维护,或者给它一个窗口,以便在他们希望应用程序将数据库置于高负载状态时不会竞争写锁。
有关平衡器的更多信息,请参见“分片管理”文档的“平衡”和“平衡器窗口”部分。
http://www.mongodb.org/display/DOCS/Sharding+Administration
希望上述资源能让您更好地了解分片的工作原理,以及分片之间如何平衡分块。