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