ᛃᛟᚺᚾ ᚠᚨcᛖᛚᛖᛊᛊ ᛞᛟᛖ
Господа кто в sqlite умеет. Хочу писать в базу одновременно из двух процессов. Для этого поставил как рекомендовано - journal=WAL cache=shared. Вопрос - этого достаточно, или ньюансы есть?
sqlite поддерживает многопоточность только если ты её явно включишь. можешь ловить ошибки что база коруптед если не включишь
ᛃᛟᚺᚾ ᚠᚨcᛖᛚᛖᛊᛊ ᛞᛟᛖ
SQLite is threadsafe. We make this concession since many users choose to ignore the advice given in the previous paragraph. But in order to be thread-safe, SQLite must be compiled with the SQLITE_THREADSAFE preprocessor macro set to 1.
саша
мне не нужна многопоточность
А чем многопоточность отличается от множества процессов? 🙃
Daniel
OMG
Daniel
коллеги, пожалуйста, не надо нести херню
саша
shared memory?
И какое это отношение имеет к SQLite? 🙃
Daniel
SQLite is threadsafe. We make this concession since many users choose to ignore the advice given in the previous paragraph. But in order to be thread-safe, SQLite must be compiled with the SQLITE_THREADSAFE preprocessor macro set to 1.
там, насколько я помню, активируется по этому ключу встроенный мутекс. используйте в go свой мутекс, это будет лучше
ᛃᛟᚺᚾ ᚠᚨcᛖᛚᛖᛊᛊ ᛞᛟᛖ
Alexander
И какое это отношение имеет к SQLite? 🙃
а, ну в контексте того вопроса конечно без разницы
Daniel
И какое это отношение имеет к SQLite? 🙃
на самом деле - мутексы бывают разные. семафоры IPC позволяют разрулить многопроцессный доступ, а семафоры в общей памяти - нет
🍁 Jaŭhien
Всем привет. Присматриваюсь к го, есть какая-нибудь библия голанга или просто полноценный ресурс по языку?
🍁 Jaŭhien
Доку уже читаю, хочется большего
Roman
Доку уже читаю, хочется большего
перестаньте много читать, начните больше писать 🙂
🍁 Jaŭhien
Хе, справедливо
Pawel
там, насколько я помню, активируется по этому ключу встроенный мутекс. используйте в go свой мутекс, это будет лучше
было обсуждение ишшуя соотв., где автор драйвера (Юкихиро Мацумото) признал, что ни каких способов сделать многопоточность на запись нет
Pawel
А чем многопоточность отличается от множества процессов? 🙃
ты не знаешь чем поток отличается от процесса О_о ??
qurabay
Можно юзать 2 языка одновременно на vps например гоу для бэкенда php для парсинга?
qurabay
Alexander
Пишите микросервисы и будет вам счастье
Anonymous
зачем PHP если можно написать всё на Go?!
У всех свои тараканы в голове
A
Например пыха уже написана, а новое пишешь на го
Alexander
зачем PHP если можно написать всё на Go?!
Могу предположить что либы или существующий функционал
Roman
Например пыха уже написана, а новое пишешь на го
не легче ли переписать на Go нежели городить гибриды? звучит данное задание не как микросервисы, честно говоря.
A
https://www.packtpub.com/networking-and-servers/mastering-go Есть мнение об этой книге?
Roman
Есть стоимость, разработки скорость, и переписывать все с нуля глупо
ну раз так то конечно пожалуйста. Я просто с трудом верю что гибрид из PHP и Go будет дешевле в долгосрочном периоде
Alexey
Смотря какой проект)))
Aleksandr
ну раз так то конечно пожалуйста. Я просто с трудом верю что гибрид из PHP и Go будет дешевле в долгосрочном периоде
он рассказал про бэкенд и парсер. это разные продукты. не гибрид. Написать бэк на языке, который знают вся команда, а критичный к скорости сервис на более подходящем языке с единственным разработм - это нормальная и обычная ситуация
Aleksandr
ну не бэкенд явно
Roman
Можно юзать 2 языка одновременно на vps например гоу для бэкенда php для парсинга?
вообще формулировка очень слабая, ибо я изначально понял "Go бэкэнд и PHP парсер". только сейчас догнал что вообще наоборот
Roman
если же весь бэкэнд уже на PHP а нужен какой-то быстрый парсер то конечно да, можно написать парсер на Go отдельно как "микросервис" (хотя не микросервис скорее всего нифига)
Daniel
вы задолбали
Dk
117-й вопрос про unmarshal (я правда посчитал, ну и пытался найти ответ). Вот скачал логи с тг, и там очень грустно со структурой type MesStruct struct { Type string `json:type` Text interface{} `json:text` From string `json:from,omitempty` } type jslogs struct { // Name string `json:name` // Type string `json:type` Messages []MesStruct `json:messages` } К такому виду хочу собрать В MesStruct.Type может быть "message" и "service" В MesStruct.Text может быть string или array Вопрос: Можно ли пропустить (не анмаршалить или не сохранять) элемент в массиве []MesStruct если в Type - service или в Text - array?
Dk
Ладно, сделаю в interface{}, а на разборе отфильтрую
Aleksandr
Как мне представляется, он подходит для получения единичных значений без создания структуры. Таким макаром полноценный парсинг будет медленным, нет разве?
Daniel
Ладно, сделаю в interface{}, а на разборе отфильтрую
не надо так. надо по-другому, с кастомным парсером, который парсит массив, но, если поле начинается с " - парсит его в строку, и из этой строки делает массив длиной 1
Daniel
или парсить в два прохода, сначала type MesStruct struct { Type string `json:type` } а потом в соответствующую структуру
Roman
зачем PHP если можно написать всё на Go?!
Php не очень быстро выводится из организма
Roman
Php не очень быстро выводится из организма
надо прописать человеку Гофамина
Olzhas
Alexey
Фух, спасибо, а то я уже подумал, что попал в чат не про пхп ❤️
Dk
У меня тут ошибка странная https://play.golang.org/p/Qi2EsosZgPA Я что-то в синтаксисе не так сделал?
Daniel
prog.go:41:56: expected type, found '}'
Daniel
вы там хотели анонимный тип?
Dk
Понял, починил https://play.golang.org/p/wbpN49CCsH- можно код ревью? (видел, что на стиль указания тегов ругается, а ещё что?)
Daniel
а почему filteredLogs - map? там не подряд индексы?
Dk
Я же сервисные сообщения пропускаю. И медиа/стикеры пропускаю. Только текст. Так что, индексы по порядку, но с пропусками. А вообще, думаю, это и правда не важно. Дата и время важнее будет.
Dk
if _, ok := mess.Text.(string); ok { filteredLogs[mess.Id] = TL{mess.Text.(string), mess.From} } поменял на if mTx, ok := mess.Text.(string); ok { filteredLogs[mess.Id] = TL{mTx, mess.From} }
Daniel
но можно, наверное, использовать его, чтобы дернуть тип
Aleksandr
да
ceiling cat
Ребята, может кто подсказать, очень часто возникают ошибки в кастомном HttpClient с такой конфигурацией: client := &http.Client{ Transport: &nethttp.Transport{ &http.Transport{ DialContext: (&net.Dialer{ Timeout: 3 * time.Second, KeepAlive: 10 * time.Second, DualStack: true, }).DialContext, MaxIdleConns: 100, IdleConnTimeout: 20 * time.Second, TLSHandshakeTimeout: 1 * time.Second, ExpectContinueTimeout: 1 * time.Second, }, }, } Такой клиент создаётся на каждый запрос к серверу и посылает запрос на другой сервер. Локально не репродюсится, значит дело в нагрузке. Кто-то сталкивался с такой проблемой ? Ошибка dial tcp: i/o timeout
ceiling cat
В какой-то момент их может просто кучу насыпать, никак не зависит от других бекендов (другие бекенды в это время отвечают нормально, если руками пинговать).
ceiling cat
Беглый гугл показал, что проблема в Диалере и ВОЗМОЖНО(!), что на каждый запрос создаётся новый клиент. Но без конкретики, пример одного комментария: The transport caches the connections and the deadline expires fairly quickly. I have instead employed the client.Timeout "nuclear option" instead of the custom dialer, and it is looking good so far.
Bogdan
драсте драсте помогите с ишью в вайпере плюсиком, пожалуйста Сильно нуждаюсь в кастомизации разделителя в конфигурации
Bogdan
https://github.com/spf13/viper/issues/170
ceiling cat
так ты сам написал, что на каждый запрос создаешь новый клиент
Да, но тот комментарий уже не могу найти. Да и не уверен во всём этом, вот и спрашиваю, может, кто-то сталкивался с такой проблемой.
Dk
Ой, а у меня ещё вопрос перед сном
Dk
А в чём разница между: type MesStruct struct { ...} type jslogs struct { Messages []MesStruct `json:messages` } и type MesStruct struct { ...} type jslogs struct { Messages []*MesStruct `json:messages` } В учебнике было со звёздочкой, я помню, что это указатель, но не понял в чем разница
Dk
Если бы я создал переменную такого типа и указал на неё, тогда понятно, но указатель на описание типа?🤔
Anonymous
В первом случае слайс из messtruct, во втором слайс указателей на messtruct. *mesStruct тоже тип в данном случае.
Dk
Спасибо
Pawel
Как мне представляется, он подходит для получения единичных значений без создания структуры. Таким макаром полноценный парсинг будет медленным, нет разве?
да, конечно. Ну у человека же речь не шла об оптимизации парсинга, вот я и исходил из самого протого решения. Уж если оптимизировать, то нужно видимо нечто с кодогенерацией. easyjson например
Pawel
Как мне представляется, он подходит для получения единичных значений без создания структуры. Таким макаром полноценный парсинг будет медленным, нет разве?
ещё у него там есть Text interface{}, которую я бы заменил на Text fastjson.Object. И ксатти совсем не факт что парсинг с десериализацией через рефлексию будет в итоге быстрей
Anonymous
Рефлексия обычно сильно медленнее, чем парсинг в заранее определенную структуру
Nik
Go выигрывает у php, если использовать в высоконагруженных сервисах?