在mongodb中,我想使用mongos并对2台机器进行mongodb分片,通常有一个集合并向我的集合中添加文档,例如:
{type:'user',name:'xxx',id:1,.........}
{type:'userentery',userid:1.........}
{type:'usersettings',userid:1.......}
{type:'userevent',userid:1.......}
{type:'SomthingNotRelated',....}
答案 0 :(得分:2)
“粉碎”MongoDB没有这样的词。它是“分片”,因为你无法正确命名我强烈建议你在这里阅读文档:http://docs.mongodb.org/manual/core/sharding/
我对你应该如何使用mongodb的理解是正确的吗?
据我所知是的。
并且是通过避免添加更多集合来进行水平缩放并避免垂直缩放的方法吗?
或多或少。有时,包含唯一条目或求和条目的另一个聚合集合也有助于扩展。
我的方法有哪些缺点?
你还没有真正描述任何具体的方法,因此我无法回答这个问题。
如果用户拥有一个非常大的数组,那么将它放在一个单独的文档而不是用户文档中会不会更好?
取决于该阵列的操作。如果要对阵列进行持续不断的更新,以便定期大幅度地改变大小,那么你可以更好地将其拆分。
当想到逻辑上时,这些子文档通常实际上是单独的实体。
答案 1 :(得分:0)
Sharding是Mongo将分片(集合的各个部分)中的单个集合(任何集合)拆分成不同的小型数据库的能力(简化)。对于你来说它是完全透明的,你使用一个集合“colX”分片,如果你愿意,你可以将它分成几个机器。唯一的建议是你必须足够聪明并阅读文档以使用正确的分片键,以帮助您以最佳平衡的方式分割您的收藏。 您可以使用您的收藏品,如果此类型在统计上相关,以表示收集中的良好平衡(这意味着如果您有1000万条记录和10种类型,通常每个大约有100万条),您可以使用它并按类型分类
您的方法是正确的,您只需要使用正确的分片键。
我的笔记中又添加了一条评论。错误的分片键不会过多地加速您的过程,如果您按类型查询并且您的分片键是类型,则更快地获取正确的分片以返回您的信息。在另一种情况下,如果您需要,让我们说按日期查询并且它不在您的分片键中,Mongo将需要将您的查询发送到每个分片并在最后合并结果。在某些情况下,分片可以帮助你很多,而在其他情况下也不会太多,当然你复制处理器并且它总是更好但是如果你没有正确选择分片键,你就不会看到很大的区别。