Обновить

Комментарии 2

Простите, у меня что-то не сходится. Если в базе 75 тысяч записей, записи читаются пачками, но обрабатываются строго последовательно, и задержка на обработку одной записи во внешней системе 0.01 секунд, то все записи должны обработаться минимум за 750 секунд. Как получилось 105 секунд? Точно не ошиблись в 10 раз?

Сам процесс оптимизации выглядит очень хаотичным: вместо того, чтобы сразу проверить, какая операция занимает больше всего времени, идёт игра в угадайку. Как я выше написал, я бы предположил, что задержка внешней системы является основной, но вся остальная статья написана, так, будто ускорять надо работу с базой данных. Допустим, вы опечатались, и задержка 0.001, тогда на работу с внешней системой уходит 75 секунд, на работу с базой 30 секунд, и вы, получается, начинаете оптимизировать эти 30 секунд. Так себе задумка, но для иллюстративной статьи на Java сойдёт.

Индекс на статус - очень сомнительная идея, он обычно не ускоряет выборку, но точно замедляет запись.

Все ваши многопоточные упражнения - не честная оптимизация. Запуская два параллельных потока, вы сразу же нагружаете внешнюю систему в два раза сильнее. Точно так же могли бы задержку уменьшить в два раза. Остальные многопоточные варианты также нечестно, особенно последний, где у вас фактически каждая операция сна (эмуляция работы с внешней системой) исполняется в своём виртуальном потоке, то есть одновременно.

Правильное многопоточное решение - три потока, работающие в конвейере: один поток читает пачками из базы, второй последовательно запрашивает внешнюю систему, третий сохраняет в базу, так можно максимально приблизиться к 75 секундам.

Добрый день, да ошибся в мс, исправил)
Не все хотят сразу работать с многопоточность, иногда стоит дорого, по крайней мере по моему опыту, сначала все пытаются найти решение вне нее, а потом уже приходят туда.

Про нагрузку на внешнюю систему - согласен, я это описал в статье.
То, что индекс замедляет вставку - логично, да, я с вами не спорю, но насчет того, что он не ускоряет поиск - несогласен, иначе бы не было в них никакого смысла, или вы конкретно про пример тут? Если про пример тут, немного, но он помог, как я писал выше, там в районе 6%. Конечно и их нужно вешать с умом, а не куда попало)

А вам спасибо за комментарий)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации