代码之家  ›  专栏  ›  技术社区  ›  notnoop

监控mysql的变化

  •  5
  • notnoop  · 技术社区  · 15 年前

    我有一个通过Hibernate使用MySQL数据库的Java应用程序。数据库实际上用作持久层:在程序的初始加载时读取数据库,然后将记录保存在内存中。

    然而,我们增加了额外的复杂性,在另一个过程中也可能改变数据库,并且很好地反映了Java应用程序的变化。然而,我并不特别喜欢每隔几秒钟拉机制查询数据库,特别是很少更新数据库。

    有没有方法进行回调以侦听数据库更改?触发会有帮助吗?

    5 回复  |  直到 15 年前
        1
  •  5
  •   duffymo    15 年前

    或者更改两个应用程序,这样Java应用程序才真正是MySQL数据库的所有者,并将其公开为服务。在数据库级别,您通过执行您的建议来耦合这两个应用程序。

    如果您有数据的一个所有者,那么可以在服务接口后面隐藏模式更改等。您还可以使用发布/订阅机制来通知相关方有关数据库更改的信息。如果这些对您很重要,我会重新考虑让另一个应用程序直接访问MySQL。

        2
  •  2
  •   Community Neeleshkumar S    7 年前

    有没有方法进行回调以侦听数据库更改?触发会有帮助吗?

    据我所知,这样的事情是不存在的,我不认为触发会有帮助。你可能想检查这个类似的 question 就这样。

    因此,我会在Java应用程序级别上公开一个钩子(它可以是一个简单的servlet,在WebApp的情况下),在数据库更新之后通知它,并使它的缓存无效。

        3
  •  2
  •   Bill the Lizard Alexis MP    12 年前

    另一种方法是使用自编译的mysql服务器和这个项目中的补丁。

    ProjectPage External Language Stored Procedures

    查看此博客文章了解更详细的介绍

    Calling Java code in MySQL

        4
  •  0
  •   brian-brazil    15 年前

    一个选择是跟踪 binary logs (或设置一个复制从属)并查找与应用程序相关的更改。这可能是一个非常复杂的解决方案。

    另一种方法是在相关表中添加一个“Last_updated”索引列(甚至可以让MySQL自动更新),并对自上次检查以来所做的更改进行轮询。查询应该很便宜。

        5
  •  0
  •   duffymo    15 年前

    代替缓存Java应用程序内存空间内的数据库内容,可以使用外部缓存 memcached Ehcache . 当进程从数据库中更新(或读取)时,也让它更新memcached。

    这样,每当任一进程更新数据库时,其更新都将位于另一进程读取的缓存中。