mysql进程间通信- 外加--内存表效率问题?
请问下,当添加数据到mysql数据库中,触发触发器,mysql有什么机制通知并将数据传递给处理进程(例如这个进程是用c语言实现的处理代码)。
这个问题是这样的,我有一个数据抓取进程,抓取是动态的,可能瞬间有大量的数据包到来,可能有时候没有数据,同时另外有一个数据进程,因为处理的速率比较慢,所以需要将抓取的数据进行缓存,然后当缓冲区有数据的时候,逐条处理。使用mysql数据库并接合触发器可以不必开销一个大的内存表(因为数据比较多),但是如上面那个问题,我不知道如何用mysql实现。
我就采用了内存表的方式,抓取的数据写入内存,然后利用进程间通信(共享内存接合条件变量),开始我使用了一个队列,抓取进程不断写队列,如果满了,就覆盖比较老的数据。而处理进程当队列中有数据的时候就进行读取处理。但是老师说最好使用游标 接合 hash的方式来实现,请问大家这类问题一般如何高效的实现?
实现?我找到的很少资料。
谢谢各位。
Answers
根据你所描述的,应该不需要实时处理,异步处理的话可以这么做吧,相对来说用队列比较高效、实时性比较好。
一、把数据记录成SQL语句
1.将抓取到的数据转换成SQL语句,然后直接写入文件,文件名可以按小时或更小单位,如yyyymmddhh.log
2.写个crontab定时做mysql导入
二、把数据记录成表字段对应,按TAB键分割。跟第一种类似
1.将抓取到的数据转换成表字段对应,按TAB键分割,一条一条记录,然后直接写入文件,文件名可以按小时或更小单位,如yyyymmddhh.log
2.写个crontab定时做mysqlimport导入
三、如果每个记录内容不是很大的话,采用队列来处理是比较稳定和高效的
1.可以采用rabbitmq 、zeromq等队列服务
2.抓到数据后直接写入队列(可以有多个抓取程序同时写)
3.开启多个进程
监听队列
,读到一条,就写入MYSQL,写入完成后从队列中干掉