通常,分片环境中最快的查询是那些 mongos将路由到一个分片
这对我来说似乎是违反直觉的。不是整个分片的重点是将数据分散并水平处理,而不是垂直处理?如果在多个分片上进行处理以使处理并行,那么它会更快吗?
为什么在一台机器上进行所有处理比在多台机器上进行处理更好?
答案 0 :(得分:0)
与所有一般性陈述一样,有很多例外情况,但在我们谈到这些之前,或许通过对措辞进行调整会更有意义:
通常,分片环境中最快的查询是那些 mongos 可以轻松路由到单个分片
对于mongos
将查询路由到单个分片,它通常会满足以下条件:
这种类型的查询通常会更快,如果你有这种类型的查询模式(很多人这样做),那么语句基本上是正确的。
然而,如果你(例如)做一些计算密集的事情,它在大数据集中很好地并行化(大数据集上的复杂聚合),那么拆分你的工作肯定会有优势。
但是,也存在潜在的缺点 - mongos
必须从所有分片中获取结果并可能进行一些处理(想象一下跨分片的分类),因此结果只会与最慢的一样快碎片(可能还有mongos
)。
最后,这一切都取决于您的工作量,数据分布以及您选择分片密钥的程度,但作为一般性陈述,它并不正确。