2016-12-07 15 views
0

Я пытаюсь понять, как ActiveRecord соединяется с базой данных для каждой модели. Поэтому давайте предположим, что у нас есть 2 модели и одна база данных. Когда вы делаете простой Model.find на обеих моделях, это создает новое соединение с базой данных для каждой модели, поэтому у нее есть собственное определенное соединение или есть одно соединение с инициализированной базой данных, которая разделяется между двумя моделями. Кто-нибудь знает, где это делается в code?Создает ли ActiveRecord новое подключение к базе данных для каждой модели

Я пытаюсь понять, как это делает ActiveRecord.

ответ

2

ActiveRecord использует пул соединений. Когда вы пытаетесь взаимодействовать с базой данных, соединение получается из пула, выполняется запрос и соединение возвращается в пул после запроса. Все это обрабатывается ActiveRecord в фоновом режиме. Вы можете настроить количество соединений в пуле в конфигурации базы данных

http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionPool.html

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

+0

Итак, «пул соединений» на самом деле является индивидуальным подключением к базе данных? – Peter

+1

Да, и они сохраняются открытыми в течение определенного периода времени на основе конфигурации – usha

+0

Благодарим вас за это. Кроме того, если вы использовали MongoDB, у него есть собственный внутренний пул соединений, поэтому пул соединений ActiveRecord здесь не нужен, верно? – Peter