q4m-forward を使ってみる。

追記 2009-11-30:
「とても簡単」とか書いているが、q4m のテストが動いているのが前提だ。もし make test が通らない場合は、そちらを先に動くようにする必要あり。テストを動かすには、perlmysql 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 で書き直し、マルチプロセス、もしくはマルチスレッド化等で出来そうだけど、ウチでもとりあえずこれを使う予定は無いので、とりあえずこの辺で・・・。(奥さんがやってないのも何か理由がある気がするし)