Этот код был взят из класса драгоценных камней ActiveRecord 2.3.14 ConnectionHandler
def establish_connection(name, spec)
@connection_pools[name] = ConnectionAdapters::ConnectionPool.new(spec)
end
Кажется, что каждый раз, когда ruby вызывает establish_connection
на модели, он создает новый пул соединений.
Мой вопрос:
Если у меня есть 5 моделей, использующих establish_connection
для одной и той же базы данных, достаточно ли уместен Rails, чтобы выбрать уже существующий пул, а не создать новый с такими же учетными данными? Это также происходит, если мои 5 моделей являются подклассами некоторого абстрактного класса, который использует establish_connection
? Будет ли оно всегда выбирать соединение из @connection_pools
, если оно существует?
Обновление 1
Я говорю о конкретном примере. У вас есть 5 моделей с 5 различными подключениями, каждый раз, когда Rails использует модель, которую он выполняет establish_connection
. Глядя на код в ActiveRecord, когда он выполняет establish_connection
, он создает новый пул с подключениями к этому конкретному соединению. Что меня интересует, так это то, что каждый раз, когда Rails вызывает модель establish_connection
, она создает новый пул или берет существующий.
Пример: вы заходите на мой сайт и видите список товаров. Вы только что выполнили действие, которое вызывает Product.all
, которое выполняет establish_connection
для некоторой базы данных на Amazon. Затем я прихожу к списку продуктов, что происходит? Получаю ли я установленное соединение или создаю новый пул с этим соединением?
Обновление 2
Я предполагаю, что когда Rails впервые загружает мои модели, он создает пулы с разными подключениями. После, когда я использую Model.method
, он просто захватывает соединение, связанное с моделью, и выполняет метод.
Я не уверен, что происходит, когда 2 модели имеют две равные связи (не в абстрактном классе, а в собственном классе). Создаст ли это два одинаковых пула соединений или ActiveRecord достаточно умен, чтобы поймать это дело?