我对MongoDB中的全文搜索性能非常不满,所以我一直在寻找开箱即用的解决方案.在8个强大的机器(4个冗余分片)中分享了相对较少的2500万份文档,我看到一些查询需要10秒钟.那太糟糕了.在云雀上,我直接尝试了对分片的10秒查询,似乎mongos将查询串行发送到分片,而不是并行发送.在4个分片中,我看到一个分片上的搜索时间为2.5秒,而另外3个分片的搜索时间分别为2秒.这总共不到8.5秒,但它需要10到mongos.捂脸.
有人可以确认这些查询是否正在串行运行?或者提供一些其他解释?
直接查询分片有哪些陷阱?
我们在4.0上,查询看起来像这样:
db.items.aggregate(
[
{ "$match" : {
"$text" : { "$search" : "search terms"}
}
},
{ "$project": { "type_id" : 1, "source_id": 1 } },
{ "$facet" : { "types" : [ { "$unwind" : "$type_id"} , { "$sortByCount" : "$type_id"}] , "sources" : [ { "$unwind" : "$source_id"} , { "$sortByCount" : "$source_id"}]}}
]
);
Run Code Online (Sandbox Code Playgroud)
我之前犯了一个错误,这是发送问题的查询.我与一位MongoDB专家进行了交谈,并了解了正在发生的事情的一大部分(我认为),但很高兴看到别人有什么话要说,所以我可以支付赏金并使其正式化.