Maxim
Тут селект с апдейтом
Maks
но это будет не одним запросом
Maks
3 разных будет
Maks
я делаю селект в 1 таблицу
Maks
он генерирует селект во вторую
Maks
точнее не в таблицу а в бд
Maks
а потом второй селект будет генерировать скрипт апдейта для первой бд
Maks
с нужными данными
Maks
то есть апдейт будет чистый
Maks
update table as t from values() as kernel where t.guid = kernel.guid
Maks
типо так
Maxim
В общем warehouse формируете, а потом по нему идёте. Чистый update лок только записи, которые обновляет
Maks
понял
Maks
ну тогда ок
Maks
потому что эти записи уже не будут меняться факт
Emil
Тоже постгрес, но не такой навороченный, как выше) pq: ошибка синтаксиса (примерное положение: \"$3\") На место 3 встает либо ASC либо DESC На что жалуется то?
Maks
Кстати если записей дофига и тебе нужно пройтись по всем страницам, то такой запрос будет на каждую следующую страницу отрабатывать всё дольше и дольше
Maks
из за оффсета
Maks
напиши плиз сюда эту строку
Maks
лень переписывать))
Maxim
Asc и desc в sprintf перенеси
Maxim
dir которая
Emil
напиши плиз сюда эту строку
query := fmt.Sprintf(SELECT * FROM %s WHERE user_id=$1 ORDER BY '$2' $3 LIMIT $4 OFFSET $5, transactionTable) err := r.db.Get(&list, query, id, sort, dir, limit,offset)
Maxim
$ - для prepare изменяющийся параметр, направление сортировки это не изменяющейся параметр для анализа и создания плана выполнения, а конкретная команда.
Emil
Asc и desc в sprintf перенеси
пробовал, не помогло вроде, еще посмотрю
Maks
ты видимо не так сделал)
Maxim
$ - это сигнал, что значение меняется и посмотри в таблице правильное распределение, так тогда можно было вместо select и update написать $1, а бд пусть сама думает
Maks
``` fmt.Sprintf(`SELECT * FROM %s WHERE user_id=$1 ORDER BY '$2' %s LIMIT $4 OFFSET $5`, transactionTable, dir) ```
Maxim
Maks
ну мне лень)
Maxim
)
Emil
Ну, и правда, теперь новая ошибка(хотя сделал все так же) всем спасибо) он не хочет теперь сортировку по дате и нумерик полям Ыыыыыыыы ну дальше надеюсь разберусь
Maxim
Кстати если записей дофига и тебе нужно пройтись по всем страницам, то такой запрос будет на каждую следующую страницу отрабатывать всё дольше и дольше
Да, на одном проекте ввели люцену для этого, она отдавала I'd и так выцыпляли записи из постгреса. Записей более 40 млн в таблице.
𝓢𝓮𝓻𝓰𝓮𝔂
Народ, кто-нибудь с гдалом дело имел? Есть картинка, есть полигон в формате wkt, нужно вырезать часть картинки, окруженную полигоном.
Null
Go скучный. И это здорово! https://nuancesprog.ru/p/9202/ @Golang_google
Ramírez T
Hi, somebody speak English here?
Alexander
Somebody does.
Ramírez T
nice wait
Ramírez T
Hi, I've been programming in Golang for a while, but I still don't fully master it. I know that Go supports "concurrency", I do not know if some way of pure "parallelism". Now, the simple problem of finding the largest element in an array, I have solved it in my head "parallel"- looking at the same time for the largest element in each row of the array, and then comparing it. This can be done in Golang?. Thank you in advance.
Alexander
1. Decide how many workers do you need(numWorkers). E.g., number of CPUs. 2. Start nunWorker goroutines and give them a sub slice your slice with numbers and a channel to return result. 3. They find the greatest number in their slices and send them via channel to your main goroutine. 4. In main goroutine read from channel numWorker times. 5. Find the greatest number of what you got from channel.
Alexander
There could be other ways. That's just one them.
Null
Конкурентность на Go: объяснение шаблона Worker Pool https://nuancesprog.ru/p/13793/ @Golang_google
Null
🏃 Пишем мессенджер на Go за час: 7 простых шагов от эхо-сервера к асинхронному обмену сообщениями https://proglib.io/p/pishem-messendzher-na-go-za-chas-7-prostyh-shagov-ot-eho-servera-k-asinhronnomu-obmenu-soobshcheniyami-2021-09-07 @Golang_google
Несин Данила
Приветствую! Подскажите пожалуйста, возможно ли реализовать множественное подключение к устройствам в сети с помощью горутин, чтобы не появлялась ошибка Error: read tcp х.х.х.х:43048->х.х.х.х:23: i/o timeout Автоматизирую поиск MAC-адресов на коммутаторах, при запуске функции в цикле "по очереди" для каждого коммутатора данные приходят успешно, но если запускать их в горутинах, появляется ошибка выше. В сети пишут про установку timeout для net.Conn, но оно у меня и так высокое, не совсем понимаю что требуется сделать. Код: https://pastebin.com/A3020FTH
Несин Данила
SetWriteDeadline SetReadDeadline Вот тут у тебя таймаут срабатывает вроде
Я прошелся по статьям в интернете, в среднем, вроде бы пишут следующее - если поставить слишком мало, то будет разрыв соединения и ошибка, но даже поставив минуту (см. константу) - оно прерывается. Если пустить все по очереди, каждое подключение обрабатывается за доли секунды, но если оптом - на ком-то и умирает
🔥
10к?
🔥
1м?
Несин Данила
Если бы) Успешно обрабатываются около 4-5 горутин и появляется ошибка. Если посмотришь, я после запуска горутины поставил задержку в 500 милисекунд - тогда все подключения проходят успешно. Теститую на 15 коммутаторах. В идеале будет около 40. Было бы смешно, не будь грустно GO 1.16.6/1.17-alpine docker
🔥
Я просто не думаю что проблема тут в го
🔥
Там какие то приколы на стороне могут быть
🔥
Только что сделал примерно тоже самое но вместо телнета просто 500 запросов к гуглу, все гуд сработало
Несин Данила
Сейчас я удаленно и конечно могут быть нюансы в vpn, соединении. Дай минутку, проверю на офисном пк c Debian 10 1.16.6
Несин Данила
Только что сделал примерно тоже самое но вместо телнета просто 500 запросов к гуглу, все гуд сработало
К сожалению "Error: read tcp x.x.x.x:58408->x.x.x.x:23: i/o timeout" Да, когда только начинал составлять модуль, простое подключение вида net.conn.Dial с последующим conn.Close() было успешно. Но тут похоже идет проблема во время чтения данных от коммутаторов
Несин Данила
Тупой вопрос, но он дожидается ту минуту дедлайна? или плюет ошибку раньше?
Запустил без задержки (time.Sleep) -> Соединение подождало const timeout и закрылось с ошибкой. Если предположение, что может быть после создания соединения в горутине, оно как-то умирает и не может прочитать данные, потому и ошибка error read i/o timeout
Null
Как стать разработчиком на Go: 10 шагов https://tproger.ru/articles/kak-stat-razrabotchikom-na-go-10-shagov/ @Golang_google
Alexander
может быть такое, что один девайс имеет несколько ip и там в нем какой-то косяк в софте допустим?
Несин Данила
может быть такое, что один девайс имеет несколько ip и там в нем какой-то косяк в софте допустим?
Они конечно у меня тормознутые, но не настолько. Прикол все-таки на стороне го, поскольку если запустить их без горутин (стереть go) то все отвечают, но на это тратится время. Если же запустить с горутинами, то кто-то может умереть. Сейчас я дошел до такого состояния, что сижу и изобретаю велосипед на примитивах и уже с ними буду проверять многопоточность.
Maxim
Приветствую! Подскажите пожалуйста, возможно ли реализовать множественное подключение к устройствам в сети с помощью горутин, чтобы не появлялась ошибка Error: read tcp х.х.х.х:43048->х.х.х.х:23: i/o timeout Автоматизирую поиск MAC-адресов на коммутаторах, при запуске функции в цикле "по очереди" для каждого коммутатора данные приходят успешно, но если запускать их в горутинах, появляется ошибка выше. В сети пишут про установку timeout для net.Conn, но оно у меня и так высокое, не совсем понимаю что требуется сделать. Код: https://pastebin.com/A3020FTH
Так начнем. У Вас ошибка в алгоритме. Разбираю по шагам: 1. строка 27 - формирует канал с буфером в 3*на количество коммутаторов 2. строка 35 - вы ждете, пока закончат работу все го рутины, т.е. все все считают, но 3 пункт 3. в строке 71 вы пишете в канал все мак адреса, но мак адресов может быть больше, чем 3*на количество коммутаторов. У Вас в 71 строке встает выполнение, т.к. буфер канала переполняется, а считываете вы его только после всех данных. Самое простое решение убрать waitGroup, но вопрос возникнет проблема, если коммутаторов много. Я бы лучше запустил пул из 10 воркеров, им бы скармливал список коммутаторов по одному, а они возвращали бы данные, тогда waitGroup вообщне не нужен и вы сможете прогнозировать количество соединений и трату ресурсов.
Maxim
Где порекомендуете починать на счет воркеров?
https://medium.com/@j.d.livni/write-a-go-worker-pool-in-15-minutes-c9b42f640923
Maxim
Где порекомендуете починать на счет воркеров?
Я не знаю, где вы взяли telnet библиотеку или сами писали?
Несин Данила
В интернетах. Основная задача была - 1) ходить по коммутаторам 2) авторизовываться 3) Запрашивать sh fdb mac Опробованы https://github.com/google/goexpect, https://github.com/reiver/go-telnet, https://github.com/ziutek/telnet. По всех трех при создании множества горутин возникала ошибка error read i/o timeout. Либо это какая то ошибка системы/кода, либо способа, которым я это делаю.
Несин Данила
Сейчас думаю, что причина может быть в способе, потому читаю информацию по воркерам
Maxim
Просто решали задачу сборки конфигов и инвентаризации, как раз goexpect и работал, с ним не было проблем.
Несин Данила
Просто решали задачу сборки конфигов и инвентаризации, как раз goexpect и работал, с ним не было проблем.
полагаю тоже были множественные запросы куда возможно? Как у вас это было реализовано?
Maxim
Пулы(worker)
Несин Данила
Пулы(worker)
хорошо, тогда как освоюсь с ними, напишу о результатах)
Maxim
func CallToSwitch(switchName, user, pass, mac string, regexp *regexp.Regexp, wg *sync.WaitGroup, messChan chan<- [][]string) {
Maxim
хорошо, тогда как освоюсь с ними, напишу о результатах)
Накидал примерно, лучше конечно причесать. На скорую руку: https://pastebin.com/cadnPDzN
Maxim
И Fatal лучше не использовать, а обработать самому и решать, что делать, коммутаторы тоже часто не отвечают, чтобы код не ломался.