Как работает функция rows.Nex() и на сколько быстро проходит по данным?
Всем привет, мне нужно получать большой объем данных из бд и обрабатывать, я бы хотел проходить через многопоточность. Но есть вопрос я не знаю как работает функция Next(), она уже через многопоточность работает или по очередности.
Если по очередности то думаю с начало сделать массив из структур а потом через многопоточность обрабатывать или сразу обрабатывать данные на месте
for rows.Next() {
// scan
// обрабатывать данные
}.
Надо пойти от проблемы. Если проблема - медленно идут данные из базы - то вряд-ли вы ее ускорите добавлением еще большего числа читателей. Может база слабенькая. Задыхается от других процессов. Может сетевой канал вы уже вычерпали и запуск еще большего числа соединений не улучшит ситуацию.
Просто вопрос прозвучал так - я бы хотел проходить через многопоточность ... а это не тот мотиватор который должен был бы быть.
P.S. Если база поддерживает partitioning - попробуйте читать одну большую таблицу параллельно независимыми кусками. Например разбив по датам. По годам. Если partitioning был таков.
Думаю, что наиболее правильный пусть в данном случае после Scan слать в канал то, что получили. А там уж пусть воркеры решают что делать.
Выстрелить в ногу можно только при условии, что что-то произойдет при чтении. Так что тут надо как-то отслеживать что уже отправили