最近open fastladderがやけに遅い。
MySQLのチューニングなんかを見て、少しmy.cnfをいじってみたりしたけど効果なし。
itemsテーブルから古い記事を消すと少しだけ効果があるかな?と言う感じ。
そもそもMySQLは慣れていないので、古い記事を消すとかでも苦労しちゃう。
で、RrailsのActiveRecord?はPostgreSQLに対応しているんじゃないかと思って調べて見たら、いけそうな雰囲気。
まずは、fastladder/config/database.yml を修正。
production:
  adapter: postgresql
  encoding: utf8
  database: fastladder_production
  username: fastladder
  password: password
  host: localhost
変えたのは、adapterをmysqlからpostgresqlにして、socketをhostに変えただけ。
pgsqlユーザでDB fastladder_productionとユーザfastladderを作成して、rake db:migrateしてみたら、なんかpostgresがないみたいなエラーが出たので、
# gem install postgres
としてpostgresをインストールしたら、無事にrakeでテーブルが作られた。
あとは、PlaggerのStore::Fastladderなんだけど、こちらも中身を見たら直接SQLなんて書いてなくて、DBIx::Class::Schema::Loader とか言うのを使ってORマッピングしてるっぽい。
手元の環境を見たら、p5-DBD-Pgと言うのが入っていたので、Plaggerのyamlを修正してみる。
  - module: Store::Fastladder
    config:
      connect_info:
        - dbi:Pg:dbname=fastladder_production
        - fastladder
        - password
      member_id: 1
dbi:mysqlをdbi:Pgに変更して、後は接続パラメータの指定方法が違うのを適当に修正した。
plaggerを実行してみると、membersにid=1の人なんていないってエラーになるので、MySQLからmembersテーブルだけPostgreSQLに移行。MysqlからPostgresへ移行 - かぴぶろぐを参考にしたけど、記事の通りだとデータ中の改行が消えてしまうのでsedを使った。
  1. mysqlで実行(DBの管理者ユーザでやる)
    # mysql -u root fastladder_production -p
    Enter password:
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 1604
    Server version: 5.0.77 FreeBSD port: mysql-server-5.0.77_1
    
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    
    mysql> select * from members into outfile '/tmp/members.csv' fields terminated by ',' optionally enclosed by '\"';
    Query OK, 1 row affected (0.02 sec)
    
  2. ファイルを覗くと、データ中の改行が\+改行になっているので、\を削除する。
    # sed 's/\\$//' < /tmp/members.csv > /tmp/members2.csv
    
  3. PostgreSQL側で実行(こちらもDB管理者ユーザで)
    % psql -U pgsql fastladder_production -W
    Password for user pgsql:
    Welcome to psql 8.1.17, the PostgreSQL interactive terminal.
    
    Type:  \copyright for distribution terms
           \h for help with SQL commands
           \? for help with psql commands
           \g or terminate with semicolon to execute query
           \q to quit
    
    fastladder_production=# copy members from '/tmp/members2.csv' with csv null as '\\N' escape '\\';
    
  4. 再度plaggerを実行すると、今度はDateTime/Format/Pgがないと怒られたので、portsから devel/p5-DateTime-Format-Pg をインストール。
    今度こそうまくPostgreSQLにデータが入った。
    面倒なので過去のデータはそのまま捨てる(と言うかMySQLに入れたまま)にして、これから先のデータだけPostgreSQLを使うことにする。
    しかし、あっけないほど簡単だった。今回対象にした、fastladderとPlagger::Plugin::Store::Fastladderがそれぞれ特定のDBに依存していなかったおかげだ。
    RubyとかPerlは、普通にORマッピングを使ってるのに対して、Javaだとまだまだ閾が高いような気がするのは何故だろうか。

    次は、mongrel捨ててPassengerへの移行だな。

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: fastladder を PostgreSQLで動かす

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/2127

コメントする

このブログ記事について

このページは、falseが2009年9月 9日 23:07に書いたブログ記事です。

ひとつ前のブログ記事は「fastladder の iPhone 用 UI」です。

次のブログ記事は「fastladder を Passenger で」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1