Несовместимый выход в агрегации конвейеров MongoDB - PullRequest
1 голос
/ 12 января 2020

У меня есть набор реплик в рабочей среде, где запрос агрегации конвейера выполняется для коллекции партиями. Все работало нормально. В какой-то момент основной узел был недоступен, а затем он был восстановлен. После этой точки результат агрегации конвейера будет неверным.

Пример: предположим, что у коллекции есть следующий набор данных:

{"_id":1,"group_id":1}                                                         
{"_id":2,"group_id":1}                                                         
{"_id":3,"group_id":1}                                                         
{"_id":4,"group_id":1}                                                         
{"_id":5,"group_id":1}                                                         
{"_id":6,"group_id":2}                                                         
{"_id":7,"group_id":2}                                                         
{"_id":8,"group_id":2}

Теперь мы должны вычислить число group_id для каждого одна минута и результат сохраняется отдельно. Итак, в первую минуту коллекция будет сгруппирована по полю «group_id». На второй минуте коллекция будет отфильтрована по «_id» больше 8 и сгруппирована по «group_id». Этот лог c работал нормально на производстве. Но когда узлы набора реплик были восстановлены после неожиданного завершения работы, сгруппированный результат был неверным. Например, выходные данные должны содержать количество документов для «group_id» 1 и 2, но выходные данные содержат только количество документов для «group_id» 1.

При возникновении этой проблемы я удаляю все сохраненные результаты и обработка агрегации для всех предыдущих пакетов для восстановления потерянных данных.

Это происходит в третий раз. Я думал, что это может быть проблема приложения, но это происходит только во время неожиданного выключения и восстановления узлов набора реплик. Есть идеи, почему это происходит? Это из-за патчей ОС или какого-то конфига mongodb?

...