http://ourmysql.com/archives/866
看原链,我这里排版乱了
Gearman Server 使用 MySQL UDFs 来管理和保持队列
2010-09-30 16:02:26 | 才被阅读:1,294 次 | 才1条评论
分类: MySQL初级应用 | 发布: OurMySQL | 来源:扶凯
标签: Gearman, server, udfs
我们知道 Gearman 的任务是一个数组结构,只存在内存中,一断电怎么样这个信息就会不存在。所以新的 gearman 开发了一个功能,就是通过 mysql 来存储任务信息。这样可以持久的保持任务的状态。也可以直接对数据库的操作,然后就直接下发任务。下面的内容,基本照着英文译过来的。。。
支持持久任务保持的 gearman 是 c 重写的,所以我们要先安装这个 c 重写的 gearman 的程序。
安装 gearman 的程序
#yum install libevent-devel
下载地址
http://launchpad.net/gearmand/trunk/0.14/+download/gearmand-0.14.tar.gz
#./configure
#make
#make install
测试 Gearman 的功能是否正常
先使用 earmand -u root 来启动服务,来接任务分发管理,在启动源码包中的 examples 内的 reverse_worker 和 reverse_client 来测试.
[root@35B examples]#gearmand -u root
[1] 11921
[root@35B examples]# ./reverse_worker &
[2] 11981
[root@35B examples]# ./reverse_client "Hello, Gearman"
Job=H:35B:1 Workload=Hello, Gearman Result=namraeG ,olleH
Result=namraeG ,olleH
这样有正常的输出就行了。说明客户端,服务器,Worker 都运行正常。“Job=…”这行输出的信息是 reverse_worker 的。“Result=…” 这行输出的信息是 reverse_client 的.
安装 Gearman-mysql-udf 的 MySQL 插件
http://launchpad.net/gearman-mysql-udf/trunk/0.5/+download/gearman-mysql-udf-0.5.tar.gz
#./configure
#make
#make install
# vim /etc/ld.so.conf.d/gearman.conf
/usr/local/lib
# ldconfig
注册这些功能到 mysql 中,如果出错,就是 MySQL 不能找到 lib ,需要运行上面的步骤。
mysql -uroot -p
CREATE FUNCTION gman_do RETURNS STRING
SONAME "libgearman_mysql_udf.so";
CREATE FUNCTION gman_do_high RETURNS STRING
SONAME "libgearman_mysql_udf.so";
CREATE FUNCTION gman_do_low RETURNS STRING
SONAME "libgearman_mysql_udf.so";
CREATE FUNCTION gman_do_background RETURNS STRING
SONAME "libgearman_mysql_udf.so";
CREATE FUNCTION gman_do_high_background RETURNS STRING
SONAME "libgearman_mysql_udf.so";
CREATE FUNCTION gman_do_low_background RETURNS STRING
SONAME "libgearman_mysql_udf.so";
CREATE AGGREGATE FUNCTION gman_sum RETURNS INTEGER
SONAME "libgearman_mysql_udf.so";
CREATE FUNCTION gman_servers_set RETURNS STRING
SONAME "libgearman_mysql_udf.so";
加载这些 so 文件后,我们先设置 gearman 的服务器
mysql> SELECT gman_servers_set("123.125.12.72");
+------------------------------------+
| gman_servers_set("123.125.12.72") |
+------------------------------------+
| 123.125.12.72 |
+------------------------------------+
1 row IN SET (0.00 sec)
使用 Gearman-mysql-udf
设置完服务器,接下来我们可以直接对这个服务来进行任务的查询,运行操作之类,我们只要给上面加入的那几个功能,当能 MySQL 的内部函数来使用就行了。
SELECT gman_do("reverse", input) AS test FROM mysql.user;
SELECT gman_do_high("reverse", input) AS test FROM mysql.user;
SELECT gman_do_background("reverse", input) AS test FROM mysql.user;
SELECT gman_sum("wc", input) AS test FROM mysql.user;
这时 MySQL UDF 相当于标准的 Gearman 的客户端。可以直接使用 MySQL 命令进行管理,也可以用别的程序连接 MySQL 来进行操作.
我们来测试一下
SELECT gman_do("reverse",'fukai') AS test FROM mysql.user;
+-------+
| test |
+-------+
| iakuf |
| iakuf |
| iakuf |
| iakuf |
| iakuf |
| iakuf |
+-------+
6 rows IN SET (0.00 sec)
以后使用程序来操作这个就行了。
参考:
http://oddments.org/?p=30 New Gearman Server & Library in C, MySQL UDFs
http://oddments.org/?p=31 Gearman MySQL UDFs: URL Processing
安装出错
yum install gcc-c++
报错:
configure: error: Couldn't find uuid/uuid.h. On Debian this can be found in uuid-dev. On Redhat this can be found in e2fsprogs-devel.
[root@localhost gearmand-0.9]# yum install e2fsprogs-devel