Ber*_*hiu 7 ruby-on-rails mongodb mongoid
我有一个执行这样的事情的查询,
last_shipment_id = OrderDelivery.where(platform: 'business').desc(:shipment_id).limit(1).pluck(:shipment_id)[0]
Run Code Online (Sandbox Code Playgroud)
当我正确索引{platform:1,shipment_id:-1}而没有在分段机器中分割环境时,它只有1~5ms的效果很好
但是,我们的生产设置了4个分片mongo db,结果最终在1000~3000ms.
有谁知道这可能会如何发生或如何解决这种情况?
我已经阅读过这张幻灯片https://www.slideshare.net/mongodb/how-queries-work-with-sharding
好吧,它在幻灯片13中说,但仍然不确定它是否已经提到如何解决这个案例.
您没有提及您的分片键是什么,但此查询必须分散到所有三个分片,这意味着如果任何分片很慢,则整体结果也会很慢。在要点中,您包括对 shard1 的解释(速度很快),但省略了对 shard2 和 shard3 的解释,总体数字表明它在其中一个分片上速度很慢。
这意味着这些分片之一上不存在最佳索引,或者存在正在选择的不同索引,即使它不是最优的。前一种情况的解决方案是构建所有正确的索引,第二种情况的解决方案是使用hintwith 查询来强制使用正确的索引。
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |