通常,分片环境中最快的查询是 mongos 将路由到单个分片的查询
这对我来说似乎违反直觉。分片的全部意义不是横向传播数据和处理,而不是纵向吗?如果在多个分片上进行处理以便并行处理,会不会更快?
在这种情况下,为什么在一台机器上进行所有处理比在多台机器上进行更好?
通常,分片环境中最快的查询是 mongos 将路由到单个分片的查询
这对我来说似乎违反直觉。分片的全部意义不是横向传播数据和处理,而不是纵向吗?如果在多个分片上进行处理以便并行处理,会不会更快?
在这种情况下,为什么在一台机器上进行所有处理比在多台机器上进行更好?
与所有一般性陈述一样,也有很多例外,但在我们讨论这些之前,也许通过调整措辞会更有意义:
通常,分片环境中最快的查询是 mongos可以轻松路由到单个分片的查询
要将mongos
查询路由到单个分片,则它通常会满足以下条件:
这种类型的查询一般会比较快,如果你有这种类型的查询模式(很多人都这样做),那么这个说法基本是正确的。
但是,如果您(例如)正在做一些计算密集型的事情,并且在大型数据集上很好地并行化(大型数据集上的复杂聚合),那么拆分您的工作肯定会有优势。
但是,也有潜在的缺点 -mongos
必须从所有分片中获取结果并可能进行一些处理(想象在分片之间进行排序),因此结果只会与最慢的分片(可能还有mongos
)一样快。
最后,这一切都取决于您的工作量、数据分布以及您选择分片键的程度,但作为一般性陈述,这并没有错。