进程间通信解决方案 MySQL-fifo-Plugin

BSD
C/C++
跨平台
2013-12-16
netkiller-

MySQL fifo Plugin 是数据库与其他第三方应用程序进程间通信解决方案。

1. 背景

你是否有这样的需求:

你需要监控访问网站的IP,当同一个IP地址访问次数过多需要做出处理,例如拉黑,直接丢进iptables 防火墙规则连中。你的做法只能每个一段时间查询一次数据库,并且判断是否满足拉黑需求?

你是否需要监控某些数据发生变化,并通知其他程序作出处理。例如新闻内容修改后,需要立即做新页面静态化处理,生成新的静态页面

你使用数据库做队列,例如发送邮件,短信等等。你要通知发送程序对那些手机或者短线发送数据

2. 解决思路

需要让数据库与其他进程通信,传递信号

例如,发送短信这个需求,你只要告诉发短信的机器人发送的手机号码即可,机器人永远守候那哪里,只要命令一下立即工作。

监控数据库变化的需求原理类似,我们需要有一个守护进程等待命令,一旦接到下达命令便立即生成需要的静态页面

这里所提的方案是采用 fifo(First In First Out) 方案,通过管道相互传递信号,使两个进程协同工作,这样的效率远比定时任务高许多。fifo 是用于操作系统内部进程间通信,如果跨越操作系统需要 使用Socket,还有一个新名词MQ(Message queue).

这里只做 fifo 演示, 将本程序改为 Socket 方案,或者直接集成成熟的 MQ 也是分分钟可以实现。

3. Mysql plugin

我开发了几个 UDF, 共4个 function

UDF

fifo_create(pipename)

创建管道.成功返回true,失败返回flase.

fifo_remove(pipename)

删除管道.成功返回true,失败返回flase.

fifo_read(pipename)

读操作.

fifo_write(pipename,message)

写操作 pipename管道名,message消息正文.

有了上面的function后你就可以在begin,commit,rollback 直接穿插使用,实现在事物处理期间做你爱做的事。也可以用在触发器与EVENT定时任务中。

4. plugin 的开发与使用

编译UDF你需要安装下面的软件包

sudo apt-get install pkg-config
sudo apt-get install libmysqlclient-dev
sudo apt-get install gcc gcc-c++ make automake autoconf		

https://github.com/netkiller/mysql-fifo-plugin

编译udf,最后将so文件复制到 /usr/lib/mysql/plugin/

git clone https://github.com/netkiller/mysql-image-plugin.git
cd mysql-image-plugin
gcc -O3  -g  -I/usr/include/mysql -I/usr/include  -fPIC -lm -lz -shared -o fifo.so fifo.c
sudo mv fifo.so /usr/lib/mysql/plugin/		

装载

create function fifo_create returns string soname 'fifo.so';
create function fifo_remove returns string soname 'fifo.so';
create function fifo_read returns string soname 'fifo.so';
create function fifo_write returns string soname 'fifo.so';		

卸载

drop function fifo_create;
drop function fifo_remove;
drop function fifo_read;
drop function fifo_write;		

http://netkiller.github.io/journal/mysql.plugin.fifo.html

加载中

评论(0)

暂无评论

暂无资讯

暂无问答

数据库进程间通信解决方案

你是否想过当数据库中的数据发生变化的时候出发某种操作?但因数据无法与其他进程通信(传递信号)让你放弃,而改用每隔一段时间查询一次数据变化的方法?下面的插件可以解决你的问题。

2013/12/16 15:39
244
0
数据库进程间通信解决方案之MQ

你是否想过当数据库中的数据发生变化的时候出发某种操作?但因数据无法与其他进程通信(传递信号)让你放弃,而改用每隔一段时间查询一次数据变化的方法?下面的插件可以解决你的问题。

2013/12/31 17:19
189
0
ibatis中的缓存策略

Cache Model 实现的其他配置参数通过 cacheModel的 property元素来设置。目前包括以下的 4 个实现: "MEMORY” (com.ibatis.db.sqlmap.cache.memory.MemoryCacheController) 。MEMORY cache ...

2011/06/03 14:39
308
0
kamailio安装

## 1 下载 [kamailio 源码tar包](http://www.kamailio.org/pub/kamailio/latest/src/) 依赖: git client: apt-get install git - it is recommended to have a recent version, if your Li...

2015/07/28 15:18
511
0
Mysql - Authentication plugin :ERROR 2059

mysql - ERROR 2059: Authentication plugin 'caching_sha2_password' MySQL Connection Failed Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/Volumes/Video/D...

07/04 21:41
195
0
MySQL不支持InnoDB存储引擎

工作中,不免会遇到前辈已经编译安装过的mysql,忽然发现mysql不支持innodb的存储引擎的问题,现在来看一下吧 一、先看mysql是否支持innodb存储引擎 mysql> show variables like 'ha%'; +---...

2016/10/14 10:28
32
0
InnoDB发展历史

- InnoDB引擎是由InnobaseOy公司开发。 - 2001年,Innobase公司开始与MySQL AB公司进行合作并开源InnoDB存储引擎的代码。 - Oracle公司在2005年以迅雷不及掩耳之势收购了Innobase公司。 - 20...

2015/07/10 18:52
452
0
MYSQL 启动报错!

在做测试时 我将mysql的数据库的目录给更换后 在用mysqld_safe 启动mysql时无法启动错误日志: 130711 09:56:40 mysqld_safe mysqld from pid file /home/data//lmlq.cn.gongchang.cn.pid en...

2013/07/13 09:38
147
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部