Anonymous
@unexpected_eof
Anonymous
какой?
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
какой?
какой?
Anonymous
ну кроме петушиного
Anonymous
какой еще
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
ну кроме петушиного
ну этот язык явно твои родные знают если ты так говоришь, научили тебя?
Anonymous
ахахаха
Anonymous
doter moment
Хайти🏴
Какой язык вы знали до GO?
Беш, питухон чучут
Хайти🏴
Bagasl
А как надо, Кнута штудировать?
Пробовал. Не осилил от слова совсем
Хайти🏴
Пробовал. Не осилил от слова совсем
Там же есть простые задания, за 1 балл которые, можно читать и только их решать
Хайти🏴
А как считается
Bagasl
У меня наверное какие то тараканы в голове. Если книгу читаю - должен от корки до корки прочесть и понять
Хайти🏴
Ну чтоб от корки до корки, то тут без серьёзного математического бэкграунда не обойтись, кмк
🅞leksiy
Опять я все веселье в чате пропустил?
🅞leksiy
ZeroX
О пыха самый орный язык
Alexander
Нет, петухон
SapDragon
С++, php, asm x86
А, еще петухон
ZeroX
Ты че такой агрессивный ?
SapDragon
А, еще петухон
но это ужасный язык из-за своей табуляции
Alexander
Ладно, а по теме: как замерить выполнение запросов после непосредственно получения коннекшна к базе?
ZeroX
Хм, это твои проблемы а не проблемы языка
Alexander
Может в этот раз мне ответят
Alexander
Да
SapDragon
ZeroX
Время?
time.Since?
ZeroX
2 способ тест бенчмарка
Alexander
Хорошо, а как это всё запихать внутрь квери или экзек в момент после получения свободного соединения?
ZeroX
Бенчмарк это тестирования выполнения
ZeroX
Ты функции туда пихаешь
ZeroX
И он тебе говорит
ZeroX
Время
ZeroX
Типа func BenchmarkQuery(b *testing.B) { // тут твои запросы }
Alexander
Ты не понимаешь мой вопрос. Вот есть sql.DB, есть там методы Query, Exec. Внутри сначала получается соединение из пула. Как мне исключить время получения соединения из пула, грубо говоря?
Alexander
Ну и установку нового, если нет свободных, но максимум соединений не достигнут
Alexander
Мне нужно время выполнения запроса непосредственно
Alexander
В принципе и остальные накладные расходы можно туда же
Bagasl
Кстати тоже про базу спрошу - есть однотипный тяжёлый select запрос, у которого в конце условие where in. Я на него сделал 5 prepared statements с количеством значений для in от 1 до 5 соответственно. Когда я делаю запрос - я сначала пытаюсь достать существующий statement по количеству элементов в массиве для where in. Если элементов в этом массиве к примеру 6 - я кидаю обычный запрос. Вопрос - насколько это адекватный подход?
Alexander
мне кажется, это не существенно
Alexander
ты закрываешь стейтменты после выполнения?
Bagasl
Но по бенчмаркам разница в скорости огромная
Alexander
ну тогда стейтмент это чисто абстракция в коде
Bagasl
Но я же закрываю statement
Bagasl
Откуда разница в скорости
Bagasl
А вот если их не закрывать - разницы в скорости нет
Alexander
в бенчах у тебя есть ограничение на количество коннекшнов и параллельно ли идут запросы?
Bagasl
в бенчах у тебя есть ограничение на количество коннекшнов и параллельно ли идут запросы?
неа, у пакеты базы в бенчах никаких конфигов не правил, всё по дефолту (sqlx)
Alexander
а запросы ты делаешь параллельно?
Bagasl
без горутин
Alexander
стейтмент же снаружи цикла создается?
Bagasl
стейтмент же снаружи цикла создается?
на этапе вызова конструктора пакета репозитория
Bagasl
type FooRepository struct { db *mssql.MSSQL stmts []*sqlx.Stmt }
Alexander
тогда дико странно, ибо с открытым стейтментом у тебя должно переиспользоваться соединение и сам стейтмент внутри базы, а если закрываешь в цикле, то все заново происходит по факту
Alexander
ну и + если сам селект тяжелый, то его подготовка не должна ощутимое время занимать в сравнении
Bagasl
func Benchmark() { db:= initDb(user,pass,host) repo:=newRepo(db) for i<N { stmt, args := repo.getStatement(itemIDs) rows := stmt.Query(args) defer stmt.Close() *scan rows* defer rows.Close() } }
Bagasl
в общем бенчмарк выглядит как то так
Alexander
ахаха
Alexander
дефер в цикле)
Alexander
попробуй ограничение на колво коннекшнов например поставить
Alexander
ахаха
доброе ахаха
Alexander
Эмм, дефер не отрабатывает в конце цикла, а сразу все деферы будут а конце функции
Alexander
Ну и объект у всех будет один к которому адресуется
Bagasl
дефер в цикле)
не, в цикле одна строчка с вызовом функции пакета репозитория, я просто код из неё «заинлайнил»
Alexander
а, ок
Bagasl
надо было сразу указать, мой косяк
Alexander
Черт, слишком мало данных. Мне бы пополнее, чтобы понять
Alexander
И конкретно дамп базы и конкретный запрос
🇷🇺 Vladimir
📂 Работа с файлами и директориями в Golang https://uproger.com/rabota-s-fajlami-i-direktoriyami-v-golang/ @Golang_google
я еще от криптографии не отошел, а тут уже нового подвезли