q4m-forward を使ってみる。
追記 2009-11-30:
「とても簡単」とか書いているが、q4m のテストが動いているのが前提だ。もし make test が通らない場合は、そちらを先に動くようにする必要あり。テストを動かすには、perl の mysql DBD がインストールされている必要がある。q4m の make test が通る環境であれば以下の手順だけで動く。
トラバ頂いた下記記事に、その辺のことが記載されている。
Relayの仕組み - 4.5帖の生活
RedHat 系の OS でやられているようだ。
Debian 系の OS であれば、以下の私の記事に記載されている。
q4m を debian にインストール - kameidの備忘録 - Sharpen the Saw!
とても簡単。以下、設定と、動作確認。
# DBI='dbi:mysql:database=test;mysql_socket=/tmp/mysql.sock;user=root;password=mysql' \ export DBI # /usr/local/bin/q4m-forward "$DBI;table=q4m_t" "$DBI;table=q4m_t2" & # mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 5.1.30-log Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> use test Database changed mysql> select count(*) from q4m_t; +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from q4m_t2; +----------+ | count(*) | +----------+ | 9882 | +----------+ 1 row in set (0.00 sec) mysql> insert into q4m_t values('1234'); Query OK, 1 row affected (0.09 sec) mysql> select count(*) from q4m_t; +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from q4m_t2; +----------+ | count(*) | +----------+ | 9883 | +----------+ 1 row in set (0.00 sec)
別途数万件のデータで動作確認を行っているが、かなり遅い。作者の奥さんもそのことに言及していて、「サイボウズでは困ってないしー」みたいなことを言っているw しかし、その速度改善もあって、一括 wait 機能を実装するようだ。q4m-forward の中身を見てみたところ、単純な perl スクリプトなので、ある程度の速度改善自体は C で書き直し、マルチプロセス、もしくはマルチスレッド化等で出来そうだけど、ウチでもとりあえずこれを使う予定は無いので、とりあえずこの辺で・・・。(奥さんがやってないのも何か理由がある気がするし)