【问题标题】:Why would a ORM have subscribe-notify mechanism为什么 ORM 会有订阅通知机制
【发布时间】:2014-07-29 06:25:49
【问题描述】:

我最近正在研究一个遗留系统。没有很好的保留详细设计文档。

在系统内部,有一个我们多年前制作的对象-关系映射库。它有一个订阅通知机制。客户(来自不同的进程)可以订阅一个表,这样如果有任何变化,他们会得到通知。系统严重依赖于此。

由于团队中没有人可以回答这个问题,我想问问社区,这是 ORM 的常见做法吗?响应数据更改的替代方法是什么?

【问题讨论】:

  • 我认为这是一个很好的功能,因为打算通知更改的进程不需要不断地轮询数据库。一些 DBMS 甚至内置了对这类东西的支持。

标签: database orm


【解决方案1】:

为什么 ORM 有发布/订阅系统?

也许您想在表更改时清除 ORM 缓存。

也许您想在表更改时清除 Web 服务器缓存。

也许您想在表格更改时向浏览器发送 websocket 消息。

看看 Stackoverflow。如果有人在您回答问题时编辑了问题,则会收到通知。

【讨论】:

  • 但是 Hibernate 和 Entity Framework 没有内置的,对吧?如果我错了,请纠正我。列出的那些是听取表更改的好理由。但我真正想知道的是,它是 ORM 的一部分,还是系统中有更好的地方可以这样做。谢谢!
  • 是的,它没有。如果是这样就好了。 EclipseLink 可以,至少对于 Oracle 而言。您不需要在 ORM 中执行此操作,您也可以在普通的旧 JDBC 中执行此操作。
【解决方案2】:

如果您想获得数据库表更改的通知,Pub/sub 系统是很好的选择。另一种方法是不断轮询数据库以获取任何更改。但我认为这不是一个好习惯,因为它只会让资源不必要地忙碌。

【讨论】:

    【解决方案3】:

    我们可以将发布/订阅 ORM 功能与数据库触发器进行比较。在这两种情况下,我们都可以侦听表上的数据库 DML 事件,粒度细至单个列,然后针对每个事件执行操作。网络上有很多关于触发器如何以及为什么会使每个人的生活复杂化的自以为是的文本,我认为这些观点非常适用于 ORM pub/sub。

    以下是关于触发器问题的一些意见,我完全可以理解:

    https://www.red-gate.com/simple-talk/sql/oracle/the-problem-with-triggers/

    When are database triggers bad?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多