out of memory 云々
ActiveRecordから生SQL&配列に切り替える方法、Akelos _executeSqlとRails select_all。あと、コストパフォーマンスにまつわる私的な悩み。
1000件(boys)、100件(girls) の2テーブルを has_and_belongs_to_many 関係にしたとき、
この一行だけで一撃 Out Of Memory。久々にお目にかかった。
などと調整できるけれど、なんと512Mでも足りないようだ。
ActiveRecordおそるべしっ。
さすがに共有レンタルサーバでこんなにメモリ使って良いわけないので、生SQL&配列コーディングに切り替えて、解決しました。
while ($record = $results->FetchRow()) {
print_r( $record ); //Array
}
// $modelは、AkActiveRecordの参照。
もうちょっと補足すると、$model->_db がADODBの参照だということを知ってると、なんとでもなります。
意外と知られていないようだが、生SQL&配列のメソッドは用意されていて、
ActiveRecord::Base.connection.select_all('select * from table')
#recordsはハッシュの配列。
その他、ActiveRecord::ConnectionAdapters::DatabaseStatementsに、生SQLサポートがあるので、大量のデータを捌くときには便利です。
私の商売は、
主にレンタルサーバ使って、
できるだけ高機能を、
~数十万円のオーダーで作る。
ということをシコシコとやっているわけで(ビジネスの才能皆無)、
→ マシンスペック足りない → フレームワーク外す
→ 開発効率低下 → お金がかかる(か、泣くか)
のジレンマに悩んでしまう場面が、多々あります。
フレームワークに頼りすぎてる、とも言えますが、「小規模事業向けのシステム=機能が少ない」ではナイので、フレームワークは絶対に必要。
じゃあ専用サーバにするかというと、そんな月額を払える事業者なんて、そう多くはナイのが現実だったりします。
十万単位のコストパフォーマンスって、とっても難しくて、心が折れてしまいそうになることもシバシバ・・・
・・・いや違う、
こんな計算ができるのはオレしかいない
との(過剰な)自負を固めてみる2008年。
スッカスカのマシンやCGIにあぶく銭のボロ儲けしている奴らにはいつか鉄拳おみまいしてやるっ。
などと、久々にOutOfMemoryを食らって、ワナワナの矛先(妬み半分)がそっちに向いてしまったのでありました。

