Форум программистов, компьютерный форум, киберфорум
Go (Golang)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 11.01.2021
Сообщений: 9

Пул подключений к БД. Как работать с конкретным коннекшеном?

11.01.2021, 12:03. Показов 1564. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Например есть что-то типа sql.Open(...)
При каждом выполнении запроса используеться какое-то подключение из пула.
Но, например хочеться последовательно рабоать с запросами и временными таблицами. Ведь есть же вероятность того, что следующий запрос пойдет по другому соединению и временные талицы будут недоступны (или будут доступны "чужие").
Есть возможность использовать конкретное соединения из пула при работе?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2021, 12:03
Ответы с готовыми решениями:

Как реализовать пул подключений
Здравствуйте. Подскажите пожалуйста, как реализовать пул подключений к Базе Данных? Добавлено через 7 минут У меня есть база...

Пул подключений MySQL
Добрый день, уважаемые коллеги :senor: Наткнулся на интересный вопрос, на который не могу найти адекватный ответ в Гугле. Подскажите,...

Не отображаются пул подключений и источник данных в GlassFish
Всем приветище! Изучаю туториал https://netbeans.org/kb/docs/web/mysql-webapp_ru.html#setUpJDBC . Все шло хорошо до момента, когда...

6
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
11.01.2021, 23:53
Нельзя использовать "конкретное" соединение из пула. Не делайте так, все соединения должны быть абсолютно независимы друг от друга. Если не так - значит что-то неверно спроектировано в приложении.

Делайте все нужные запросы в рамках одного соединения (неважно настоящего, или взятого из пула).

Если по каким-то причинам невозможно сделать всю работу в одном соединении (а какие у Вас причины для этого?), то создавайте временные таблицы так, чтобы их можно было использовать между соединениями без путаницы "свой-чужой". Например, используйте одну временную таблицу для всех соединений, но строки в этой таблицы будут содержать некий внешний ключ, связанные с соединением (вероятно, это id пользователя).

Кроме этого нужно помнить, что изолируются не соединения, а транзакции. Видимость данных между транзакциями определятся установленным уровнем изолирования транзакций.
1
0 / 0 / 0
Регистрация: 11.01.2021
Сообщений: 9
12.01.2021, 10:29  [ТС]
Пока только возникли вопросы, необходимости использовать временные таблицы пока нет. Спасибо за ответ.
А есть пример работы с изолироваными транзакциями? Самый простой, для понимания принципа.
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
12.01.2021, 11:15
Транзакции по-умолчанию изолированы, это обеспечивается СУБД.

От программиста требуется две вещи - явно начинать транзакцию при выполнении нескольких связанных действий, а также установить уровень изолированности транзакций, чтобы уменьшить влияние транзакций друг на друга. Как это делается - зависит от используемой БД и используемой библиотеки для работы с БД.

Если транзакции явно не начинать, то СУБД все равно их использует - каждый отправленный запрос она рассматривает как транзакцию с одним запросом (запускает неявную транзакцию)

Ознакомьтесь с материалами:
- что такое транзакции, для чего они нужны
- что такое уровни изолированности транзакций
- как начать и закончить транзакцию в конкретной БД (какую используете?)
- какой уровень изолированности по-умолчанию в БД, как установить нужный уровень
0
0 / 0 / 0
Регистрация: 11.01.2021
Сообщений: 9
12.01.2021, 11:26  [ТС]
О работе с транзакциями с точки зрения СУБД понимание есть. Но не совсем понятна логика работы ГО.
Например в коде
Code
1
2
3
... Db.Exec("insert...")
...
Db.Exec("insert ...")
эти два инсерта будут в одной сессий подключения к СУБД или как карта ляжет?
А если первой скл-командой будет установка транзакции, то следующие скл-команды будут в текущей сесии или как?

Или в таких случаях нужно использовать что-то типа txn, err := myDb.Begin() ?
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
12.01.2021, 11:54
Цитата Сообщение от Gamerman Посмотреть сообщение
эти два инсерта будут в одной сессий подключения к СУБД или как карта ляжет?
Это зависит от реализации библиотеки. Я только сейчас осознал, что мы в разделе ГО, а с SQL-библиотекой ГО я не работал

Но я почитал http://go-database-sql.org/ и страницу http://go-database-sql.org/surprises.html в частности.

И я думаю, что эти два Exec могут быть выполнены как в одном соединении, так и в разных. Первый Exec получит соединение из пула и вернет его в пул. Второй Exec опять возьмет соединение из пула. Вероятно пул отдаст ему то же самое соединение (использованное для первого запроса). Но может вернуть и другое соединение (это зависит от реализации пула). Ну и пул точно вернет другое соединение, если первым соединением воспользуется кто-то другой (получит его из пула раньше нас).

Чтобы гарантированно выполнить эти запросы в рамках одного соединения надо выполнять их внутри транзакции, предварительно начав ее с помощью Begin или BeginTx. Да и вообще, группу связанных инсертов нужно выполнять в транзакции.

Добавлено через 2 минуты
Цитата Сообщение от Gamerman Посмотреть сообщение
А если первой скл-командой будет установка транзакции, то следующие скл-команды будут в текущей сесии или как?
Да, транзакция всегда выполняется в одной сессии. Все команды внутри транзакции будут выполнены внутри одной сессии.
0
0 / 0 / 0
Регистрация: 11.01.2021
Сообщений: 9
12.01.2021, 12:17  [ТС]
Ок, тогда более/менее логика работы в ГО понятна.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.01.2021, 12:17
Помогаю со студенческими работами здесь

Почему код начинает работать только тогда, когда число подключений равно максимальному числу подключений?
Почему данный код начинает работать только тогда, когда число подключений равно максимальному числу подключений? (Если максимум...

Как работать с конкретным сайтом, на котором есть текст, которого нет в html - коде
Пробую автоматизировать свои действия на сайте binary.com с помощью imacros. Там среди прочего есть выпадающий список с группами конкретных...

Как организовать пул потоков
Нужно реализовать многопоточную программу (+1к потоков) на C.Реализации при помощи циклов и .get слишком затруднительны.Есть массив с...

Пул проксей на виртуалке. Как?
Всем привет. Вопрос такой. Есть линукс виртуалка. И пачка ssh. Цель следующая. На виртуалке командой ssh -D 5555 user@host -f -N...

Как открыть ссылку конкретным приложением?
нужно открывать ссылку конкретно приложением "Google Карты".... пытаюсь делать так: String linkCoor =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru