2015-12-17 8 views
1

Когда мы говорим, что у нас есть «соединение с базой данных» или «Пул соединений, который имеет несколько соединений open», на техническом уровне, что мы имеем в виду на самом деле?Что такое подключение к базе данных, технически?

Мое понимание:

соединение с базой данных является ссылка на нить работает в процессе баз данных, который блокируется и ждет входа из другого потока в другом процессе.

Это правильное определение?

Так что, когда я MySQL работает на компьютере и приложения Java работает в каком-то другом компьютере (или же компьютер, не имеет никакого значения ..), и когда я делаю что-то вроде:

conn.open(); 

открыть соединение с базой данных ..

Будет ли процесс mysql создавать для меня новый поток и блокировать этот поток и начать прослушивание ввода?

А как насчет клиентской стороны? Что произойдет, если я не закрываю соединение?

ответ

1

Знаете ли вы, что такое сокет? Это короткое, но приятное описание в tutorial.

Вы должны отличать клиентскую и серверную сторону. Я не могу сказать для MySQL, но обычно серверная часть реализована так, что для соединения новый поток обрабатывает запросы.

Пул соединений для минимизации расходов на открытие сокета. Как правило, вам все равно, используя соединение (при условии, что все подключены как к одному пользователю), вы получили результирующий набор из БД.

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

+0

Благодарим вас за ответ. Socket - это абстракция, поэтому я на самом деле прошу за нее. –

0

Что такое пул связи технически?

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

А как насчет клиентской стороны? Что произойдет, если я не закрываю соединение?

Технически мы не закрываем соединение, полученное из пула соединений. Фактически мы возвращаем его обратно в пул, когда мы закончим с ним.

conn.close вернет соединение с бассейном.

При использовании пула соединений вы всегда должны вызывать Connection.close(). Физические соединения с базой данных будут только высвобождаться, если объект java будет уничтожен.

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

+1

Ну да спасибо. Но главный вопрос: что такое соединение с базой данных в первую очередь? –

+0

@KorayTugay Соединение с базой данных - это средство, с помощью которого сервер базы данных и его клиентское программное обеспечение взаимодействуют друг с другом. –

Смежные вопросы