2014-01-16 42 views
0

在MongoDB中,我想使用mongos和超过2台机器做的MongoDB分片,是常用于有一个单一的收集和添加文件到我的收藏品,如:MongoDB的,分片和水平缩放

{type:'user',name:'xxx',id:1,.........} 
{type:'userentery',userid:1.........} 
{type:'usersettings',userid:1.......} 
{type:'userevent',userid:1.......} 
{type:'SomthingNotRelated',....} 
  • 是我的理解,你应该如何使用mongodb?
  • 并且是通过 避免添加更多集合来进行水平缩放并避免垂直缩放的方法?
  • 我的方法有什么缺点?
  • 如果用户有一个非常大的阵列,将它放在 单独的文档中而不是用户文档本身更好吗?

回答

2

对于MongoDB来说,“粉碎”没有这个词。这是“分片”,因为你不能获得姓名权,我强烈建议你在这里阅读文档:http://docs.mongodb.org/manual/core/sharding/

是我的理解正确的,你应该如何使用MongoDB的?

从我理解的是。

并且是通过避免添加更多集合来进行水平缩放并避免垂直缩放的方法吗?

或多或少。有时候,包含唯一条目或总结条目的另一个集合集合对缩放也很有帮助。

我的方法有什么缺点?

你还没有真正描述过任何具体的方法,因此我无法回答。

如果用户有一个非常大的数组,将它放在单独的文档而不是用户文档本身更好吗?

取决于阵列的操作。如果阵列要持续不断地更新以便定期大幅度改变,那么是的,你最好将其分开。

这样子文档通常是在自己认为的逻辑在实际独立的实体。

+1

我做了一个错字,你不必这么粗鲁,这只是因为我是在匆忙写一个小的失误。 –

+1

@MaximilianoRios咦?我正在和OP谈话,我也没有粗鲁,我建议说,由于名字不能写正确,所以很有可能某些知识也可能有缺陷,因此可以阅读文档 – Sammaye

+0

I不要以为我们都不懂什么,有时候错字只是一个错误。这个概念在那里,很明显我们明白我们在谈论什么。 –

0

分片是Mongo将碎片(集合中的碎片)中的单个集合(任何集合)拆分成不同小型数据库(使其变得简单)的能力。对于你来说,它是完全透明的,你可以使用一个集合“colX”分片,如果你愿意的话,你可以把它分成几个机器。唯一的建议是你必须足够聪明,并阅读文档以使用适当的分片键,以帮助你以最好的平衡方式分割你的收藏。 你可以使用你的收藏,如果这种类型在统计上有相关性以代表收藏中的良好平衡(这意味着如果你有1000万条记录和10种类型,这是正常的,你有大约100万),你可以使用它和碎片类型。

你的方法是正确的,你只需要使用正确的分片键。

还有一条评论加入我的笔记。一个错误的分片键不会加速你的过程,如果你按类型查询并且你的分片键是键入的,那么得到合适的分片返回你的信息会更快。在另一种情况下,如果需要,假设按日期查询,并且它不在您的分片键中,Mongo需要将查询发送到每个分片并在结尾合并结果。 Sharding在某些情况下帮助你很多,在其他情况下不会太多,当然你会复制处理器,它总是更好,但如果你没有正确选择分片密钥,你就不会看到很大的区别。

+0

我将使用日期经常在我的查询,而且可以肯定的类型将是我的碎纸键,而是通过数据查询仅限于两种类型的那些“userevet”和用户“userentery”,是说不好,你会把每个人放在一个单独的集合? – Kanka

+0

这是**分片**,不碎。 – WiredPrairie

+0

@WiredPrairie谢谢! – Kanka