Size: a a a

Golang Developers — русскоговорящее сообщество

2021 April 14

А

Анатолий in Golang Developers — русскоговорящее сообщество
Ты сравниваешь несравнимые вещи
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
Ты обязательно должен иметь локальный пул, но баунсер можешь добавить в любой момент, если будут проблемы при масштабируемости
источник

АО

Александр Орешкин... in Golang Developers — русскоговорящее сообщество
Т.е если один апи работает только с одной базой то нет смысла ставить баунсер? Если приложение разрастается и необходимо читать и писать в разные базы, то тут уже баунсер в помощь?
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
Если приложение разрастается, ты его масштабируешь то твой локальный пул в 10 соединений превращается в 10 * кол-во инстансов, и вот тогда, тебе возможно, баунсер поможет
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
tldr; локальный пул - обязательно, баунсер возможно
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
В любом случае баунсер - внешняя тулза, значит ты его всегда сможешь добавить? Зачем тогда заранее об этом думать? Надо сперва дорасти до него
источник

A

Alexander in Golang Developers — русскоговорящее сообщество
Не на баунсере, в параметрах либы
источник

АО

Александр Орешкин... in Golang Developers — русскоговорящее сообщество
Ищу пока где эта переключалка.
источник

A

Alexander in Golang Developers — русскоговорящее сообщество
Нет, баунсер нужен для того, чтобы приложение своим пулом не держало кучу idle-коннектов к базе. При использовании баунсера оно их держит с баунсером, а с базой баунсер устанавливает только необходимое количество коннектов
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
представь что твоя база может принять максимум 100 соединений одновременно
представь что твое приложение негерит 500 запросов одновременно
логично что приложение генерит в 5 раз больше того что база способна выдержать

для этого в приложении есть пул соединений
когда приложение хочет сделать 500 запросов, они все проходят через 20 соединений
база получает всего 20 соединений и работает прекрасно, ей с запасом
приложение делает все 500 запросов в 25 подходов, и все довольны

теперь представь что твое приложение делает не 500 а 5000 запросов
и 20 соединений не хватает уже, некоторые запросы отваливаются с таймаутом, нужно что-то делать:
1. увеличить количество соединений в пуле
2. поднять еще один инстанс

увеличиваем количество соединений до 50, все работает и все довольны
но внезапно приложение уже генерит не 5000 а 50000 запросов, и все снова тупит

поднимаем 10 инстансов, каждое сново генерит по 5000 запросов, и вроде бы все довольны
но вот из всех инстансов выходит 50*10 соединений = 500, а база, как мы помним имеет лимит в 100

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

в итоге наши приложения вместо того чтоб завалить базу нахрен просто выполняют свои запросы в 10 подходов
и даже не подозревают об этом

Это если на пальцах
источник

АО

Александр Орешкин... in Golang Developers — русскоговорящее сообщество
Идеальный ответ.
источник

АО

Александр Орешкин... in Golang Developers — русскоговорящее сообщество
Спасибо)
источник

АО

Александр Орешкин... in Golang Developers — русскоговорящее сообщество
А можно так же на пальцах про разницу препаред и транзакшн?
источник

АО

Александр Орешкин... in Golang Developers — русскоговорящее сообщество
Теперь немогу понять что для чего и чем одно лучше второго и в каких случаях.
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
тут точно не скажу, там вроде прикол какой-то что одна часть уходит в одно соединение на баунсере а вторая часть в другое, и если пул приложения это как-то контролирует, то баунсер нет, он тупо распаралеливает все что у нему пришло
но это не точно, тут я могу ошибаться
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
DB client sends a prepare statement request, gets statement ID, and after that, it just makes another request with that statement ID and parameters that should replace placeholders in the request.
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
да, приложение сперва шлет шаблон в бд, а потом используя этот шаблон шлет запросы, и шаблон может уйти не в то соединение и при выполнении бд не будет о нем знать ничего когда приложение уже будет делать запросы
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
оно привязано к контексту соединения
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
источник

АО

Александр Орешкин... in Golang Developers — русскоговорящее сообщество
Пойду искать инфу. Спасибо в любом случае за разъяснение!
источник