mysql gman do_MySQL UDFs 来管理调用 Gearman 的分布式的队列

UDF 的全名叫用户算定义函数,是使用 SQL 中一些功能来实现 SQL 本身没有的功能.

支持持久任务保持的 gearman 是 c 重写的,所以我们要先安装这个 c 重写的 gearman 的程序.

安装 gearman 的程序先要安装一些 gearman 需要的软件

boost 需要 1.39 以上的版本.

libgearman/add.cc:310: error: 'uuid' was not declared in this scope

libgearman/add.cc:310: error: 'uuid_generate' was not declared in this scope

libgearman/add.cc:311: error: 'uuid_unparse' was not declared in this scope

make[1]: *** [libgearman/libgearman_libgearman_la-add.lo] Error 1

make[1]: Leaving directory `/root/gearmand-0.29'

make: *** [all] Error 2

上面这个错就是没有安装 libuuid libuuid-devel。

这个可能在后面加 UDF 时出错,如果找不到 so 文件的话,记的给 /usr/local/lib 加到 ldconfig 加载的路径中

测试 Gearman 的功能是否正常

先使用 earmand -u root 来启动服务,来接任务分发管理,在启动源码包中的 examples 内的 reverse_worker 和 reverse_client 来测试.

这样有正常的输出就行了.说明客户端,服务器,Worker 都运行正常.“Job=…”这行输出的信息是 reverse_worker 的.“Result=…” 这行输出的信息是 reverse_client 的.

启动 Gearman 直接推到后台

安装 Gearman-mysql-udf 的 MySQL 插件

接下来配置,编译和安装

其中 with-mysql 是指配置程序到那找 mysql-config ,libdir 是指安装共享 udf 库到那个地方.centos5 默认使用我上面的这个就行了.

注册这些功能到 mysql 中,如果出错,就是 MySQL 不能找到 lib ,需要运行上面的步骤.

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";

我们可以使用下面的命令来查看加载的这些算定的功能

mysql> select * from mysql.func;

加载这些 so 文件后,我们先设置 gearman 的服务器.

这需要使用到我们先前加载给 mysql 的一个功能 gman_server_set().调用 Gearman MySQL UDF 之前必须调用这个,用来设备客户端用于 UDF 的服务器.

mysql> select gman_servers_set("127.0.0.1");

+-------------------------------+

| gman_servers_set("127.0.0.1") |

+-------------------------------+

| 127.0.0.1 |

+-------------------------------+

1 row in set (0.00 sec)

使用 Gearman-mysql-udf

设置完服务器,接下来我们可以直接对这个服务来进行任务的查询,运行操作之类,我们只要给上面加入的那几个功能,当能 MySQL 的内部函数来使用就行了.

gman_do()   将 UDF 的作业请求发送给 Gearman 的作业(worker)服务器,其中的 gman_do_high 是高优先权的作业,gman_do_background() 是指在后台作业以小优先权,只会返回主机和作业号( H:fk:23 ).

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)

以后使用程序来操作这个就行了.

正常我们实际一环境中使用时,直接在 MySQL 中做调发器,来调用这些函数,就能实现自动使用队列了.所以当修改表中的一行时,我们完全可以使用一个 UDF 来建立一个能调用外部程序的触发器.

参考:

http://oddments.org/?p=30 New Gearman Server & Library in C, MySQL UDFs

http://oddments.org/?p=31 Gearman MySQL UDFs: URL Processing

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值