1

MongoDB 文档

通常,分片环境中最快的查询是 mongos 将路由到单个分片的查询

这对我来说似乎违反直觉。分片的全部意义不是横向传播数据和处理,而不是纵向吗?如果在多个分片上进行处理以便并行处理,会不会更快?

在这种情况下,为什么在一台机器上进行所有处理比在多台机器上进行更好?

4

1 回答 1

0

与所有一般性陈述一样,也有很多例外,但在我们讨论这些之前,也许通过调整措辞会更有意义:

通常,分片环境中最快的查询是 mongos可以轻松路由到单个分片的查询

要将mongos查询路由到单个分片,则它通常会满足以下条件:

  • 它将使用分片键
  • 因此,它将被索引(分片键上总是有一个索引)
  • 它将具有良好的数据局部性(所有数据都在一个分片上)
  • 查询将尽快返回该分片可以响应
  • 如果您的大多数查询看起来像这样,您将有一个很好的索引内存命中(至少)

这种类型的查询一般会比较快,如果你有这种类型的查询模式(很多人都这样做),那么这个说法基本是正确的。

但是,如果您(例如)正在做一些计算密集型的事情,并且在大型数据集上很好地并行化(大型数据集上的复杂聚合),那么拆分您的工作肯定会有优势。

但是,也有潜在的缺点 -mongos必须从所有分片中获取结果并可能进行一些处理(想象在分片之间进行排序),因此结果只会与最慢的分片(可能还有mongos)一样快。

最后,这一切都取决于您的工作量、数据分布以及您选择分片键的程度,但作为一般性陈述,这并没有错。

于 2015-11-30T17:05:44.777 回答