84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
如题,数据库用的是MySQL。其中某个表一直以周期性添加一条数据。 目前用的是轮询的方式。 题主想知道数据库是否支持类似于Java中观察者模式,当数据库添加记录后,就会自动触发某个自定义函数?
人生最曼妙的风景,竟是内心的淡定与从容!
以下,回答都是建立在主表数据量超大的基础上。
(1) 使用mysql触发器 (2) mysql是可以运行外部脚本(可能跟用户权限和平台有关),通过脚本触发后端程序
(1) 使用mysql触发器 (2) 触发到数据后,将数据写入到内存表 (3) 后端程序轮询内存表,处理完成后,删除已经轮询的数据,防止内存表爆掉
你的思路最好的解决办法应该是Hook,做个钩子给MySQL,当数据库改变了就执行钩子程序。不过我搜了下对于给数据库直接增加Hook好像没什么好的思路。 唯一看到可行的办法是:使用Git管理你的MySQL数据库,当数据库文件发生更改的时候通过Git调用Hook。虽然可行,不过感觉略Geek了一点。
Hook
所以感觉比较简单的思路还是从你的程序上思考,当程序执行了数据库操作类中的insert()函数后执行某个Hook函数。也就是说不给数据库加钩子,而给程序的数据库操作类加钩子。
insert()
Hook函数
触发器能不能达到你的需求呢??
触发器
当执行insert的时候,就触发。。
以下,回答都是建立在主表数据量超大的基础上。
方法1
(1) 使用mysql触发器
(2) mysql是可以运行外部脚本(可能跟用户权限和平台有关),通过脚本触发后端程序
方法2
(1) 使用mysql触发器
(2) 触发到数据后,将数据写入到内存表
(3) 后端程序轮询内存表,处理完成后,删除已经轮询的数据,防止内存表爆掉
你的思路最好的解决办法应该是
Hook
,做个钩子给MySQL,当数据库改变了就执行钩子程序。不过我搜了下对于给数据库直接增加Hook好像没什么好的思路。唯一看到可行的办法是:使用Git管理你的MySQL数据库,当数据库文件发生更改的时候通过Git调用Hook。虽然可行,不过感觉略Geek了一点。
所以感觉比较简单的思路还是从你的程序上思考,当程序执行了数据库操作类中的
insert()
函数后执行某个Hook函数
。也就是说不给数据库加钩子,而给程序的数据库操作类加钩子。触发器
能不能达到你的需求呢??当执行insert的时候,就触发。。