有没有什么方法可以实时检测 mysql 数据库中某个值是否发生改变?

2021-08-22 23:59:54 +08:00
 Ackvincent

我现在是用一个 while 循环每隔一秒钟查询一次来判断的,有没有什么其他方法可以实现这个需求? 谢谢

3456 次点击
所在节点    MySQL
27 条回复
lishunan246
2021-08-23 00:04:08 +08:00
canal
mtrec
2021-08-23 00:28:07 +08:00
不如说说你想干什么以及你现在的做法有什么让你不满的地方
qiyuey
2021-08-23 00:30:07 +08:00
监听 binlog
dorothyREN
2021-08-23 00:32:20 +08:00
设置个更新操作的触发器,然后触发器里面判断有没有更新这个值。
Ackvincent
2021-08-23 00:57:13 +08:00
@lishunan246
@mtrec
@qiyuey
@dorothyREN
我现在代码是这样 感觉很蠢得样子
```python
while True:
print('start check')
action = mysql.get_action()
if action == 'turn_on':
turn_on_the_light()
elif action == ''turn_off':
turn_off_the_light()
else:
time.sleep(1)
continue

```
dangyuluo
2021-08-23 01:00:57 +08:00
自己写个插件
MySQL UDF
0576coder
2021-08-23 01:11:25 +08:00
@qiyuey +10086
dustynight
2021-08-23 01:59:19 +08:00
看起来你这个值就不该放到数据库,也许你可以试试配置中心?
ericls
2021-08-23 02:11:27 +08:00
Trigger
imycc
2021-08-23 03:30:29 +08:00
我们之前搞了个 trigger,当插入值的时候自动触发其他关联表的更新。
但是后面负载高的时候操作偶尔会丢失,找了 DBA 查了 binlog,貌似是出错了还是怎么的,反正排查特别麻烦。查错误的时间快够我重构接口了。

如果你有数据库的权限去监听变更,那一般来说 Model 层代码也是自己维护的,这种事情最好在业务逻辑里面做。
当更新字段值的时候,自己写逻辑,想直接改关联数据,还是用消息队列,都可以比较直观地执行,后期查日志也方便。
qiyuey
2021-08-23 03:38:36 +08:00
@Ackvincent 搜索配置中心
CEBBCAT
2021-08-23 04:11:10 +08:00
看起来是 IoT 应用,为什么没有采用基于订阅 /回调之类的架构呢? MySQL 连接还是比较重的吧
ila
2021-08-23 06:42:33 +08:00
trigger+scheduler event
darkengine
2021-08-23 08:10:37 +08:00
@Ackvincent action 就不应该存到数据库里,放队列里更合适
bthulu
2021-08-23 08:45:38 +08:00
订阅并解析 binlog 就行了
update
2021-08-23 08:55:11 +08:00
1,数据库触发器
2,binlog 监听
3,业务代码层监听
inhzus
2021-08-23 08:58:00 +08:00
觉得这种业务形式不太适合数据库,可以看看类似于阿里云 configserver 的产品
cheng6563
2021-08-23 09:24:51 +08:00
如果懒得改,就给这数据加个版本号然后继续凑合用即可。
mtrec
2021-08-23 09:29:55 +08:00
@Ackvincent 除了感觉很蠢有没有别的问题 如果能满足现在的需求 没有必要增加别的依赖
PiersSoCool
2021-08-23 10:16:08 +08:00
x s 轮询一次

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/797361

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX