V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
Ackvincent
V2EX  ›  MySQL

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

  •  
  •   Ackvincent · 2021-08-22 23:59:54 +08:00 · 3409 次点击
    这是一个创建于 949 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    lishunan246
        1
    lishunan246  
       2021-08-23 00:04:08 +08:00 via Android
    canal
    mtrec
        2
    mtrec  
       2021-08-23 00:28:07 +08:00
    不如说说你想干什么以及你现在的做法有什么让你不满的地方
    qiyuey
        3
    qiyuey  
       2021-08-23 00:30:07 +08:00 via Android
    监听 binlog
    dorothyREN
        4
    dorothyREN  
       2021-08-23 00:32:20 +08:00   ❤️ 2
    设置个更新操作的触发器,然后触发器里面判断有没有更新这个值。
    Ackvincent
        5
    Ackvincent  
    OP
       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
        6
    dangyuluo  
       2021-08-23 01:00:57 +08:00
    自己写个插件
    MySQL UDF
    0576coder
        7
    0576coder  
       2021-08-23 01:11:25 +08:00
    @qiyuey +10086
    dustynight
        8
    dustynight  
       2021-08-23 01:59:19 +08:00 via Android   ❤️ 2
    看起来你这个值就不该放到数据库,也许你可以试试配置中心?
    ericls
        9
    ericls  
       2021-08-23 02:11:27 +08:00 via iPhone
    Trigger
    imycc
        10
    imycc  
       2021-08-23 03:30:29 +08:00   ❤️ 3
    我们之前搞了个 trigger,当插入值的时候自动触发其他关联表的更新。
    但是后面负载高的时候操作偶尔会丢失,找了 DBA 查了 binlog,貌似是出错了还是怎么的,反正排查特别麻烦。查错误的时间快够我重构接口了。

    如果你有数据库的权限去监听变更,那一般来说 Model 层代码也是自己维护的,这种事情最好在业务逻辑里面做。
    当更新字段值的时候,自己写逻辑,想直接改关联数据,还是用消息队列,都可以比较直观地执行,后期查日志也方便。
    qiyuey
        11
    qiyuey  
       2021-08-23 03:38:36 +08:00 via Android
    @Ackvincent 搜索配置中心
    CEBBCAT
        12
    CEBBCAT  
       2021-08-23 04:11:10 +08:00 via Android   ❤️ 1
    看起来是 IoT 应用,为什么没有采用基于订阅 /回调之类的架构呢? MySQL 连接还是比较重的吧
    ila
        13
    ila  
       2021-08-23 06:42:33 +08:00 via Android
    trigger+scheduler event
    darkengine
        14
    darkengine  
       2021-08-23 08:10:37 +08:00
    @Ackvincent action 就不应该存到数据库里,放队列里更合适
    bthulu
        15
    bthulu  
       2021-08-23 08:45:38 +08:00
    订阅并解析 binlog 就行了
    update
        16
    update  
       2021-08-23 08:55:11 +08:00   ❤️ 1
    1,数据库触发器
    2,binlog 监听
    3,业务代码层监听
    inhzus
        17
    inhzus  
       2021-08-23 08:58:00 +08:00 via iPhone
    觉得这种业务形式不太适合数据库,可以看看类似于阿里云 configserver 的产品
    cheng6563
        18
    cheng6563  
       2021-08-23 09:24:51 +08:00
    如果懒得改,就给这数据加个版本号然后继续凑合用即可。
    mtrec
        19
    mtrec  
       2021-08-23 09:29:55 +08:00
    @Ackvincent 除了感觉很蠢有没有别的问题 如果能满足现在的需求 没有必要增加别的依赖
    PiersSoCool
        20
    PiersSoCool  
       2021-08-23 10:16:08 +08:00
    x s 轮询一次
    fregie
        21
    fregie  
       2021-08-23 10:19:10 +08:00
    用 etcd
    Ackvincent
        22
    Ackvincent  
    OP
       2021-08-23 11:03:46 +08:00
    多谢楼上各位,看了各位的解决方案,我还是决定用自己比较蠢的方法,毕竟虽然蠢,但是没有什么坑要踩。
    ch2
        23
    ch2  
       2021-08-23 12:58:59 +08:00
    怎么方便怎么来
    razertory
        24
    razertory  
       2021-08-23 13:40:56 +08:00
    订阅 binlog
    masterclock
        25
    masterclock  
       2021-08-23 13:49:53 +08:00
    1. 又不是不能用
    2. 带持久化的 mqtt,用 retained 的消息
    XTTX
        26
    XTTX  
       2021-08-23 14:06:39 +08:00
    @imycc 我认为这是最好的方法。其他程序员读代码的时候也更容易理解业务逻辑
    chengyiqun
        27
    chengyiqun  
       2021-08-23 14:12:41 +08:00
    这种用配置中心很香啊, 比如 nacos
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5390 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 01:31 · PVG 09:31 · LAX 18:31 · JFK 21:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.