首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分片key、chunkSize、预分片

分片key、chunkSize、预分片
EN

Stack Overflow用户
提问于 2012-07-05 22:21:06
回答 2查看 1.8K关注 0票数 0

按照这里提到的步骤,我已经在一台机器上设置了一个分片集群:

http://www.mongodb.org/display/DOCS/A+Sample+Configuration+Session

但是我不理解'--chunkSize‘选项:

$ ./mongos --configdb localhost:20000 --chunkSize 1 > /tmp/mongos.log &

对于N个分片,每个分片应该有1/N数量的文档,将分片键的范围划分为N个几乎相等的部分,对吧?这会自动修复chunkSize/shard-size。那么,上面的命令处理的是哪一块?

此外,还提供了在特定键值下手动拆分集合,然后将块迁移到您想要的任何其他分片。这可以手动完成,甚至可以由“平衡器”自动处理。它不会与分片设置冲突并混淆配置服务器,或者会立即报告任何此类移动吗?

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-05 23:34:42

你可能会混淆一些事情。chunkSize参数设置执行拆分的块大小。使用_id "chunksize“在"config”数据库中的"settings“集合中查看当前值(如果已设置)。chunkSize选项将仅设置此值,或者在尚未设置值的情况下对系统进行更改,否则将忽略该值。

区块大小是以is为单位的大小,如果超过该大小,系统将保持区块不变。这是在两个地方完成的,1)当写入通过mongos实例时,2)在均衡过程中将块移动到另一个分片之前。因此,它不遵循“数据大小/分片计数”公式。你的每块1Mb的例子几乎总是一个坏主意。

您确实可以手动拆分和移动块,尽管这可能会导致不太理想的块分布,但它永远不会混淆或破坏配置元数据和平衡器。原因相对简单;平衡器使用相同的命令并遵循相同的代码路径。从MongoDB的角度来看,均衡器进程拆分和移动块与您这样做没有显着区别。

不过,手动拆分和移动块也有一些有效的用例。例如,您可能希望手动执行此操作,以便为冷启动--预剥离--产生的非常高的峰值负载做好群集准备。通常,您将编写一个脚本来执行此操作,或者从已经运行良好的性能测试中加载拆分。此外,您可能会注意热块拆分/移动这些块,以便根据应用程序监视的“负载”均匀分布。

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2012-07-06 02:02:53

太好了,谢谢!如果我错了,我想我会得到它now..Correct我:

我在想,如果有N个服务器,那么集合的前1/N部分(=chunk1)将分配给shard1,第二个1/N (=chunk2)分配给shard2,依此类推。当你说没有这样的“公式”时,我又搜索了一下,找到了这些链接

MongoDB sharding, how does it rebalance when adding new nodes?

How to define sharding range for each shard in Mongo?

从文档中“块”的定义来看,我认为它仅仅是数据迁移的一个单元。当我们在N个服务器之间共享一个集合时,那么总的no。块的大小不一定是N,它们也不需要大小相等。

一个块的最大大小已经在config数据库的设置集合中设置为默认值(通常为64MB),或者可以通过使用--chunkSize参数指定一个值来手动设置,如上面的代码所示。根据shard-key的值,一个分片可能比另一个分片具有更多的块。但是MongoDB使用了一个均衡器进程,试图在分片之间均匀地分配这些块。通过均匀分布,我的意思是,如果它们增长超过其限制,或者如果某个特定的分片负载过重,它倾向于拆分块并将其迁移到其他分片。这也可以手动完成,方法是遵循平衡器进程使用的同一组命令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11346282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档