2016-12-07 5 views
0

モデルごとにActiveRecordがデータベースにどのように接続するかを理解しようとしています。 2つのモデルと1つのデータベースがあるとします。両方のモデルで単純なModel.findを実行すると、モデルごとに新しいデータベース接続が作成されるため、独自の定義済み接続があるか、2つのモデル間で共有される初期化済みデータベースへの単一接続があります。誰でもこれをどこでやっているのかわかりますcode?ActiveRecordはモデルごとに新しいデータベース接続を行います

私はActiveRecordがこれをどのように達成しているかを理解しようとしています。

答えて

2

ActiveRecordは接続プールを使用します。データベースと対話しようとすると、プールから接続が取得され、クエリが作成され、クエリの後に接続がプールに返されます。これはバックグラウンドでActiveRecordによって処理されます。 あなたはこれを簡単にテストすることができ、あなたのデータベース構成に

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

をプール内の接続の数を調整することができます。コントローラーアクションで数分かかるクエリを実行します。アクションへの複数のリクエストを発行すると、接続エラーを確認することができます

+0

"接続プール"は実際にデータベースへの個別の接続ですか? – Peter

+1

はい、設定に基づいて一定期間オープンされています – usha

+0

私のためにそれをクリアしていただきありがとうございます。また、MongoDBを使用している場合は、内部接続プールがあり、ActiveRecordの接続プールは必要ありません。 – Peter

関連する問題