2013-08-28 54 views
5

我对这是如何工作有点困惑。在对mysql进行分片时,我们有一些表格,通常是带有参考数据的小表格,整个分片。这是为了使连接。如果我们在mongo中有小的集合,那么我们不会在分片设置中分割,它们会发生什么?他们被送到每个碎片,还是留在第一个碎片?如果一个拥有许多应用程序服务器的严重分片系统中的所有进程都击中了一台服务器,这就会成为潜在的瓶颈。Mongodb - 分片和不分片的集合

+0

您必须手动告诉(命令)哪些集合被分片。对于较小的集合,不要分割它,因此它将只保留在一个分片中。任何已完成的查询(通过该集合)将仅被发送到持有该集合的分片。请参阅:http:// docs.mongodb.org/manual/tutorial/deploy-shard-cluster /#sharding-setup-shard-collection' –

+0

你不碎片的集合将驻留在第一个碎片上,是的它可能是一个瓶颈,也有分布这些集合的讨论,但是,目前的MongoDB并不是 – Sammaye

回答

0

在具有自动分割功能的mongodb中,分割的集合将以某种方式均匀分布在您拥有的所有分片上。通过那些你不可能分割的集合(不分片),你可以指定一个primary shard它们将驻留在哪里。此主分片是特定数据库的给定分片,因此它位于每个数据库级别。可以移动,并且可以针对不同的数据库而不同。

存在shard标记的概念,可以影响sharded集合的放置位置。基本上,您可以将集合或集合的一部分约束为存储在特定的一组碎片中。 DOCS

+0

我不确定标签感知分片是否适用于非分片集合,但从来没有测试过,但是,根据事实一个非分片集合将永远不会被平衡我会说没有 – Sammaye

+0

这就是为什么我写到“你可以影响分片集合在哪里放置”,但是可以说你可能会把一个分片集合完全放在一个分片上,几乎(可能恰好)是非分片集合的行为。我相当确定你不能标记未粘贴的集合。 – attish

+0

谢谢大家。这就是我所关心的。对我而言,这是一个潜在的威胁。当然,您在Mongo中没有必要担心,这是将较小表格复制到各种分片中的主要原因之一。处理这些问题的另一种方式是建立一个不同的复制环境。我猜测,在Mongo环境中,你不会通过一个唯一的键来执行状态等操作,而是使用想要在报表中显示的实际状态等。如果要更改它,这只是一个问题状态文本。 – CargoMeister