Задать вопрос
Priest512
@Priest512
Разработчик .NET, С++

Создание нескольких соединений к бд MySQL, расточительно?

Генерирую большое кол-во данных из бд. Формирование происходит циклически. Синхронная версия работает около 6 секунд, после распараллеливания и улучшений добился всего 1 секунды. Но из-за этого для каждой итерации приходится открывать новое соединение с бд, а потом закрывать. Потому что чтение из бд несколькими потоками из одного коннектора нельзя, выдается ошибка. Следует что-то изменить или можно использовать данный вариант, который я придумал?
  • Вопрос задан
  • 2967 просмотров
Подписаться 1 Оценить 3 комментария
Решения вопроса 1
Priest512
@Priest512 Автор вопроса
Разработчик .NET, С++
Все, решил данную проблему. Оказалось, что MySQL неявно создает пул потоков и при закрытии держит коннекторы. Поэтому после закрытия и следующего открытия коннектора время не тратится и ресурсы также. Больше времени уходит на первые открытия, а потом все идет очень и очень хорошо. Затем фоновый поток в течение трех минут закрывает пул, если тот не используется. Если нужно иметь хотя бы один из потоков пула, можно указать минимальное число потоков в пуле. Подробнее есть в технической документации по MySQL. Спасибо всем, кто подсказывал, особенно тем, кто советовал смотреть в сторону пула соединений.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
opium
@opium
Просто люблю качественно работать
С учетом выполнения 1-6 секунды накладными расходами на открытие и закрытие соединений можно пренебречь.
Ответ написан
Комментировать
AxisPod
@AxisPod
Пул коннектов к БД и всё. На запрос берете коннект, выполнили запрос, вернули коннект в пул, вот и всё.
Ответ написан
SagePtr
@SagePtr
Еда - это святое
Можно сделать пул потоков (на каждый поток своё соединение). После выполнения потока не завершать его, а ожидать, пока он вновь не понадобится. Но и не забывать при этом, что сервер БД не сможет параллельно обрабатывать больше, чем у него на это есть ресурсов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы