🏁Александр
не внимательно глянул 🙂
Constantine️
ай яй яй
🏁Александр
ех понеслась!
🏁Александр
только надо sync.Map прикрутить щаз и кааак
🏁Александр
или через каналы сделать...
🏁Александр
у меня паук тут на парсер, в 5 потоков пока что. Что быстрее через каналы кормить в гоурутину и там сохранять в мапу или через sync.Map сразу писать в мапу...
🎉
sync.Map грят не так производительно, может я что путаю.
🏁Александр
нашел бенч
🏁Александр
https://gist.github.com/cyfdecyf/4562635
🏁Александр
но таки сделал через каналы 🙂
🏁Александр
контроля больше
🏁Александр
хотя один хрен мне надо этот мап читать, в каждом потоке. Что бы исключить дубли
Aleksandr
краулер делаешь?
🏁Александр
ага
Aleksandr
что умеет?
🏁Александр
переделал через мапы, работает вроде 🙂
🏁Александр
что умеет?
грабить корованы 🙂
🏁Александр
сайт один специализированный парсит
🎉
грабить корованы 🙂
Парсишь страницы?
🏁Александр
json
🏁Александр
стандартный http.Client + json.marchal + sync.Map
Aleksandr
сайт один специализированный парсит
а. я делал краулер, который сайт зеркалирует
🏁Александр
результаты пихаю в GOB
🎉
стандартный http.Client + json.marchal + sync.Map
Я не вовремя спросил, я думал страницы парсишь.
🏁Александр
прямо всю коллекцию в бинаре 🙂
🏁Александр
3731 запись за час
🏁Александр
медленно конечно, но на каждую сущность надо субзапрос делат
MXLTN
привет а кто подскажет почему gorm Where("smth_id in ?", []int{1,2,3}) делает такое: where smth_id in ['1', '2', '3'] ?
Andrey
Насколько увеличивается время компиляции?
оно не увеличивается, оно констатно 30 секунд.
Andrey
замени на Where("smth_id in ?", 1,2,3)
MXLTN
замени на Where("smth_id in ?", 1,2,3)
у меня переменное количество в слайсе
MXLTN
sql := "select * from foo where id=? and name in (?" + strings.Repeat(",?", len(stuff)-1) + ")" 😰
Andrey
slice...
Andrey
такое не провернёшь через prepare, я думаю
Andrey
возможно, есть другой способ
Daniel
такое не провернёшь через prepare, я думаю
на постгресе - можно, там есть функция any
Daniel
на остальных - придется сделать запрос с нужным количеством вопросиков
Andrey
https://github.com/golang/go/issues/16235
Ilia
Написал array to string функцию для таких случаев... Вообщем то не напрягает она меня, и используется во многих местах
Pawel
kv на sql не совсем верно - там kv это индексы. а индексы сами по себе не живут, там еще балласта вагон
ключи в kv, внезапно, тоже индекс. Но в том же постгресе можно выбрать тип индекса, а в монге - нет
Roman
да, с таким подходом в финансовом секторе вам не место. Идите в космическую отрасль.
куда то ходить мне уже поздно, могу только другим помогать ходить :) и да, осознание ущербности перфекционизма в лице acid приходит только с годами :))
Andrey
у любой технологии есть ограничения. Любые абстракции текут.
Pawel
ну так есть случаи когда acid не нужен. Картинки с котегами хранить например. подумаешь отрубили электичество, сервер грохнулся, пара котиков пропала, делов то. А есть опердни, для которых падение сервера - катастрофа.
Roman
не о падении говорим, а о рассогласованности данных в течение конечного отрезка данных, на котором эти данные доступны (в отличие от acid, где доступ к ним в ходе транзакции запрещен)
Roman
отрезка времени
Roman
ключи в kv, внезапно, тоже индекс. Но в том же постгресе можно выбрать тип индекса, а в монге - нет
в sql движке индексы это вспомогательная технология, в отличие от kv. между клиентом и данными sql вставляет балласт: сетевой протокол с преобразованием типов, транслятор в план запросов, интерпретатор плана запросов, кэш запросов, балансировщик и т.д. вся эта хрень жрет ресурс в то время как тебе всего то надо найти данные по ключу
Pawel
сэнкъю, кэп
Michael
sql over kv
Michael
гы
Илья
только придётся vals пересобирать в []interface{}
Anonymous
https://gist.github.com/cyfdecyf/4562635
Так и что быстрее?
Pawel
есть годный сабж для обсуждения. надо сделать SQL запросы с фильтацией по динамическому набору полей. ORMы на подобие hibernate это решают более или менее Я по религиозным соображениям ORM не использую, пишу отдельные запросы на каждую комбинацию полей. Это писец конечно. Внимание вопрос. 1) А как это вообще сделать нормально в Го без ORM? 2) Есть пример для gorm? я чет не понял из доков
Timur
Ох
Timur
Уже ничего не поможет😂
Timur
squirrel
Timur
https://github.com/Masterminds/squirrel
Pawel
спасибо, я подумаю
Pawel
https://github.com/Masterminds/squirrel
да, похоже это оно - решение
Dmitry
Подскажите, пожалуйста для чего нужна переменная окружения GOPATH. Никак не пойму из документации. Она обязательно должна быть в системе? Проекты не могут располагаться по другому пути?
Васильев Виктор
Ага. Чтобы отделить основу от твоего рабочего окружения
Салтыдык
в документации в первой же строчке написано что это такое: The GOPATH environment variable specifies the location of your workspace.
Dmitry
Ага, может вам и понятно, а я только открыл доку и это ничего не говорит новичку )
Dmitry
Понятно только, что есть какие-то воркспейсы, но на каждый проект или глобальный должен быть хз
Aleksandr
переменная окружения носит глобальный характер. и хоть ее можно и переопределять контекстно, но удобнее держать в одном месте. прописать куда следует и забыть
Andrei 🦉
Ага, может вам и понятно, а я только открыл доку и это ничего не говорит новичку )
как правило мы делаем следующим образом: GOPATH=~/golang где ~/golang/src/… папка для исходного кода ваших проектов, в идеале для своих проектов нужно придумать какой нибудь namespace, чтобы их можно было красиво импортировать import "namespace/myawesomelib/package", соответственно лежать этот проект будет в ~/golang/src/namespace/myawesomelib ~/golang/bin - папка с бинарниками, которую желательно включить в PATH системы
Andrei 🦉
и да, шорткат ~/ в GOPATH не работает, нужно прописывать абсолютный путь везде
Васильев Виктор
Это грубо говоря папка в которой ты работаешь
Andrey
Ага, может вам и понятно, а я только открыл доку и это ничего не говорит новичку )
утилиты типа go build, go run, dep и тд по переменной GOLANG определяют, где у вас исходники, где бинарники