Есть ли причина использовать пул соединений с базой данных с ActiveRecord? - PullRequest
2 голосов
/ 29 апреля 2011

Каковы преимущества использования пула внешних подключений?

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

Единственное преимущество, о котором я могу подумать, это то, что он позволяет вам иметь 1000 внешних процессов без запуска 1000 процессов postgres.

Есть ли другие преимущества?

1 Ответ

2 голосов
/ 29 апреля 2011

В Rails есть встроенный пул соединений :

  1. Просто используйте ActiveRecord :: Base.connection, как в Active Record 2.1 и более ранних версиях (пул перед подключением),В конце концов, когда вы закончите с подключением (ями) и хотите, чтобы оно было возвращено в пул, вы вызываете ActiveRecord :: Base.clear_active_connections !.Это будет поведение по умолчанию для Active Record при использовании в сочетании с циклом обработки запросов пакета обновления.
  2. Проверка соединения из пула вручную с помощью ActiveRecord :: Base.connection_pool.checkout.Вы отвечаете за возвращение этого соединения в пул, когда закончите, вызывая ActiveRecord :: Base.connection_pool.checkin (соединение).
  3. Используйте ActiveRecord :: Base.connection_pool.with_connection (& block), который получает соединение,возвращает его в качестве единственного аргумента блока и возвращает его в пул после его завершения.

Это было доступно начиная с версии 2.2 .Вы увидите pool параметр в вашем database.yml для управления им:

pool: число, указывающее размер пула соединений (по умолчанию 5)

Я не думаю, что было бы много смысла в размещении другой системы пула под ней, и это могло бы даже спутать пул AR, если бы вы попробовали это.

...