月曜日 9 08, 2008

Rails 2.2 and Connection Pooling

C・ナッターのスレッドセーフRailsに関するブログ記事が大きな話題になっていますが、まもなくそのスレッドセーフであるRails2.2が登場します。

この2.2からスレッドセーフになることにより、以前取り上げた通り、従来まではActiveRecordではデータベース接続が1つで使い回していたものが、コネクションプーリングを行うことができるようになるようです。

2.2からはdatabase.ymlにpoolパラメータが追加され、以下のような設定でプール数を設定可能になります。

development:
adapter: mysql
username: root
database: myapp_dev
pool: 10


ナッターの文章にもありますが、スレッドセーフになることにより、JRubyを使えば、RubyのスレッドはJavaを経由してカーネルネイティブスレッドへと展開されるため、従来よりはるかに高いスケーラビリティを得ることができるようになるはずです。またJDBCのコネクションプールをJRubyから使うことにも意味が出てきて、より信頼性が高く、効率的になるはずです。

水曜日 4 30, 2008

Connection Pooling in AR

前記事の補足です。
ActiveRecordは、現状データベースに対して1接続しかキャッシュできないようです。
そのため現状のJRoRでは、データソースを使ってもほぼ何の効果もない状況になっているようです。
それを改善すべく、Nick Siegerが取り組んでいるようで、ActiveRecord自体に手を入れ、Rails2.1のリリース後にRailsのtrunkにマージされるようです(まだ未定)。
Nickが行っているActiveRecordのコネクションプーリングの実装は、

  • AR::Base.establish_connection が呼ばれると、コネクションプールオブジェクトが生成され、キャッシュされる。
  • コネクションプールがそれぞれの接続を管理する
  • Connection APIは大幅には変更しない
  • JRoRから透過的にJNDIのデータソースを使えるようにする
などなどです。
詳細は、こちら。改良版ARのソースはこちら
Connection Poolを有効に使えるRailsが登場するのはもう少しかかりそうですが、透過的にJRoRから使えるようになれば、大規模システム等でもRoRがより有効になるかもしれません。


About

Tomo

Search

Archives
« 4月 2014
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
今日