Я был очень недоволен результатами полнотекстового поиска в MongoDB, поэтому я искал внешние решения. С относительно небольшой коллекцией из 25 миллионов документов, помещенных на 8 мясистых машинах (4 осколка с избыточностью), я вижу, что некоторые запросы занимают 10 секунд. Это ужасно. На жаворонке я попробовал 10-секундный запрос к осколкам напрямую, и кажется, что монгосы посылают запросы на черепах поочередно, а не параллельно. Через 4 осколка я видел время поиска 2,5 секунды на одном осколке, а остальные 3 осколки менее 2 секунд каждый. Это всего менее 8,5 секунд, но потребовалось 10 до монго. Facepalm.
Могут ли кто-то подтвердить эти запросы на чередование, выполняются серийно? Или предложите другое объяснение?
Каковы подводные камни для непосредственного запроса осколков?
Мы находимся на 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"}]}}
]
);
Я допустил ошибку раньше, это запрос, который имеет проблему. И я поговорил с экспертом MongoDB и был увлечен большой частью того, что происходит (я думаю), но рад видеть, что другие должны сказать, чтобы я мог заплатить щедрость и сделать ее официальной.