@proGO

Страница 1563 из 1674
Anton
13.07.2018
08:29:19
ну там в доках должно быть подробное описание каждого параметра

но как я понимаю главный - это макс кол-во открытых коннектов

который в итоге будет узким местом, до того момента пока сама бд не станет

потом наверное идет max idle

Google
Anton
13.07.2018
08:31:28
если их сделать малым, то пул может начать закрывать неиспользуемые, а потом по необходимости опять открывать новые, так что будет постоянный connect/close

поправтье меня, кто в теме, если я не прав

max lifetime - время через которое пул будет обновлять коннекты, не очень в курсе как это играет на производительности

но подозреваю, что его можно выставить достаточно большим

Demian
13.07.2018
09:54:40
народ может кто сталкиался с формированием динамических запросов к БД

типа по времени в зависимости от полученных данных, для времени пришли 2 даты нужно делать Between date1 and date2, одна дата >date1 или <date2, или вообще нет выборки по дате

Anton
13.07.2018
09:59:06
так это в where можно все уложить

в виде date1 is not null and date2 is not null and ... between date1 and date2 or date1 is not null and date2 is null and ... > date1

и тд

Demian
13.07.2018
10:02:21
а может есть что то типа where(map[string]interface{}....

просто длинный запрос не очень понятный выйдет

Anton
13.07.2018
10:03:02
ну тогда надо начать с того, что за орм)

Demian
13.07.2018
10:03:12
сорри

Google
Demian
13.07.2018
10:03:17
gorm

Anton
13.07.2018
10:11:27
с gorm не работал, но судя по докам, там между парами ключ-значение для map работает как AND

Demian
13.07.2018
10:11:51
да

так вот проблема как эти условия для дат собрать

вроде как можно функцию написать которая будет разруливать эту логику, но как это все сложить в кучу

Anton
13.07.2018
10:13:01
можно что- типа b.Where("name = 'jinzhu'").Or(map[string]interface{}{"name": "jinzhu 2"}).Find(&users) попробовать

каждый отдельный случай в map обернуть попробовать

возможно прокатит, но сейчас времени нет это проверить

Demian
13.07.2018
10:18:24
ок, спс за идею

Александр
13.07.2018
12:02:43
Вопросец конечно...

лучше 1 канал для событий и в нем по структуре отдавать

или два канала, один для даты, другой для quit и других сообщений

грубо var c chan EventStruct или var cControl chan bool var cData chan string

@onokonem что больше go way ?

Kirill
13.07.2018
12:13:02
зачем для quit бул? туда же пустую структуру можно передать

часто в примерах используется вариант с quit channel

m
13.07.2018
14:40:35
лучше 1 канал для событий и в нем по структуре отдавать
если только для выхода, то можно один канал и закрывать его при выходе. А если ещё какие-то сообщения, то можно и несколько каналов. На самом деле не понятно, что значит "лучше"?

m
13.07.2018
14:43:35
как по go way правильнее
Так, как лично тебе удобнее.

Andrew
13.07.2018
14:44:21
грубо var c chan EventStruct или var cControl chan bool var cData chan string
по мне так несколько каналов использовать, один канал отвечает за выход, другой канал отвечает за данные и по этим каналам делаешь select

Google
Александр
13.07.2018
14:45:09
а если еще системные события там?

Andrew
13.07.2018
14:45:09
Так, как лично тебе удобнее.
мне удобно называть так переменные DB_Connection, но это не правильно)

Александр
13.07.2018
14:45:17
ну в смысле всякие "ендект" и прочие

не ведут к выходу но отчитаться по ним надо

Elena
13.07.2018
14:45:28
Ребята, привет! Вы люди знающие.. помогите хрупкой девушке и по совместительству рекрутеру IT-компании=) Где в телеграмме есть чат, в котором можно разместить вакансию о поиске GO-разработчика? Спасибо заранее за помощь и отзывчивость?

Andrew
13.07.2018
14:45:32
а если еще системные события там?
еще канал и селект по ним

m
13.07.2018
14:45:37
select, ждущий данных из нескольких каналов кушает больше процессора. Поэтому если производительность не критична, то делай так, как удобнее. Если критична: старайся больше одного канала не слушать.

Александр
13.07.2018
14:45:38
ну такое...

просто три канала это три парамса в функцию

у меня сейчас есть subscrive(c chan string)

внутри гоурутина крутиьтся

Andrew
13.07.2018
14:46:29
ну и ты будешь слушать по структуре, а потом парсить ее?

Александр
13.07.2018
14:46:53
ну это один из вариантов

пока не выбрали вот

Daniel
13.07.2018
14:47:17
Оптимизация без профайлера - это пионерский подход

Александр
13.07.2018
14:47:44
три канала под каждый чих

или один с структурой

Google
Александр
13.07.2018
14:48:12
(Данные, События, Выход)

три канала выходит

Elena
13.07.2018
14:48:20
https://t.me/golangjob
Спасибо!

Daniel
13.07.2018
14:48:23
m
13.07.2018
14:48:29
Спасибо!
https://t.me/golangjobfeed

Andrew
13.07.2018
14:48:50
вообще оптимизировать надо, когда в производительность упираешься, преждевременно не стоит

m
13.07.2018
14:49:04
А?!
Истинно говорю, медленее.

Александр
13.07.2018
14:49:07
ну мы больше про гоувей

Andrew
13.07.2018
14:49:27
(Данные, События, Выход)
ты можешь еще на 2 функции раскидать

Daniel
13.07.2018
14:49:35
Истинно говорю, медленее.
Сильно? В масштабах всего приложения?

m
13.07.2018
14:50:22
Сильно? В масштабах всего приложения?
Нет конечно. Ещё медленный select ожидающий, а не ожидающий - быстрый.

Daniel
13.07.2018
14:50:49
(вообще, каналы медленные, это правда. Но померять это можно только в вакууме)

m
13.07.2018
14:52:25
Сильно? В масштабах всего приложения?
Возможно, что если сортировку на каналах сделать, то будет заметно. Там ведь только копирование данных. Оно вполне будет сравнимо с ожидающим select-ом.

Daniel
13.07.2018
14:54:45
Сортировка? На каналах?

Александр
13.07.2018
14:55:05
(вообще, каналы медленные, это правда. Но померять это можно только в вакууме)
var dataChannel chan string var controlChannel chan string // ну для примера var quit chan driverOne.Subscribe(controlChannel, dataChannel, quit) driverTwo.Subscribe(controlChannel, dataChannel, quit) for { select { case data := <-dataChannel: fmt.Println("received data", data) case control := <-controlChannel: fmt.Println("received command", control) case <-quit: break default: fmt.Println("no activity") } }

я как понимаю вы про что-то типо такого

не очень конечно выглядит...

зы: опечатки

Google
Daniel
13.07.2018
14:56:14
А зачем тут дефолт?

Александр
13.07.2018
14:56:21
ну так было в примере

пофиг можно и не

Daniel
13.07.2018
14:56:44
Не пофиг

В этот дефолт нужен слип, или он будет проц жрать

Александр
13.07.2018
14:57:40
ну в дефолт я вообще с трудом понимаю когда попадает

первая итерация... он читает канал один

вторая итерация... первый канал не имеет данных, странно что он не wait сделал

по идеи он должен был заплипнуть на case data := <-dataChannel:

crxfoz
13.07.2018
15:03:36
В том то и суть, что select с default не будет лочиться. Попробует забрать данные из каждого кейса -> на данный момент времени ни с одного кейса не получилось вычитать -> выполняется default

Александр
13.07.2018
15:09:17
придет @onokonem и спасет нас ?

m
13.07.2018
15:09:32
в дефолт попадает когда ниодин из case не сработал.

Александр
13.07.2018
15:10:17
а это как?

m
13.07.2018
15:10:18
в коде выше цикл будет постоянно крутиться. Без дефолта он будет ждать, пока придут данные в один из каналов.

Александр
13.07.2018
15:10:42
по хорошему он должен залочиться же на первом кейсе

это как

for { value := <- channel }

Страница 1563 из 1674