为什么查询隔离是一件好事?

时间:2015-11-30 16:51:31

标签: mongodb optimization sharding horizontal-scaling

来自MongoDB Documentation

  

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

这对我来说似乎是违反直觉的。不是整个分片的重点是将数据分散并水平处理,而不是垂直处理?如果在多个分片上进行处理以使处理并行,那么它会更快吗?

为什么在一台机器上进行所有处理比在多台机器上进行处理更好?

1 个答案:

答案 0 :(得分:0)

与所有一般性陈述一样,有很多例外情况,但在我们谈到这些之前,或许通过对措辞进行调整会更有意义:

  

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

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

  • 它将使用分片键
  • 因此,它将被索引(分片键上始终有一个索引)
  • 它将具有良好的数据位置(所有数据都在一个分片上)
  • 查询将以该分片可以响应的速度返回
  • 如果您的大多数查询都是这样的话,那么您将在索引中获得内存命中(至少)

这种类型的查询通常会更快,如果你有这种类型的查询模式(很多人这样做),那么语句基本上是正确的。

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

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

最后,这一切都取决于您的工作量,数据分布以及您选择分片密钥的程度,但作为一般性陈述,它并不正确。

相关问题