Я не уверен в том, что именно здесь происходит, но похоже, что клиент не может подключиться к серверу, пока он «занят», а затем клиентское соединение через DDP истекает и заканчиваетсяобновление клиента. Серверный процесс, вероятно, не перезапускается.
Один из способов улучшить это - создать очередь в вашей базе данных. Один фрагмент кода обнаруживает, что нужно выполнить несколько операций по обновлению базы данных, поэтому он записывает информацию в таблицу, которая используется в качестве очереди.
Вы устанавливаете задание cron (используя, например, npm module node-cron), которое ищет вещи в очереди на регулярной основе - когда он находит необработанную запись, он выполняет требуемую работу upsert, а затем либообновляет значение состояния в записи очереди на «выполнено» или просто удаляет его из очереди. Вы можете решить, сколько записей обрабатывать за один раз, чтобы минимизировать прерывания.
Другой подход заключается в том, чтобы выполнить обработку в другом узле процесса на вашем сервере, в основном, как рабочий процесс. Если этот процесс занят, это не повлияет на ваш интерфейс. Та же самая техника очередей может быть использована, чтобы убедиться, что она не застрянет.
Таким образом, вы теряете немного реактивности, но, учитывая, что это какой-то массовый процесс, это не должно иметь значения.