gpt4 book ai didi

database - Oracle 中的观察者模式

转载 作者:太空狗 更新时间:2023-10-30 01:48:05 25 4
gpt4 key购买 nike

我可以在表中更改或添加一些行时设置 Hook ,并在发生此类事件时以某种方式得到通知吗?我发现了网络,但只使用了管道。但是没有办法在发送时立即获得管道消息。只有期刊尝试接收。

最佳答案

通常应避免从数据库实现观察者模式。

为什么?它依赖于供应商专有(非标准)技术,促进了数据库供应商锁定和支持风险,并导致了一些膨胀。从企业的角度来看,如果不以受控方式完成,它可能看起来像“臭鼬工厂”——以一种不寻常的方式实现通常由应用程序和集成模式和工具涵盖的行为。如果在细粒度级别实现,它可能会导致与大量不可预测的通信和处理的微小数据变化紧密耦合,从而影响性能。机器中的一个额外齿轮可能是一个额外的断点 - 它可能对操作系统、网络和安全配置敏感,或者供应商技术中可能存在安全漏洞。

如果您正在观察由您的应用管理的交易数据:

  • 在您的应用中实现观察者模式。例如。在 Java 中,CDI 和 javabeans 规范直接支持这一点,根据四人帮书籍的 OO 自定义设计是一个完美的解决方案。
  • 可选择向其他应用程序发送消息。过滤器/拦截器、MDB 消息、CDI 事件和 Web 服务也可用于通知。

如果用户直接修改数据库中的主数据,则:

  • 在您的应用中提供一个单独的管理页面来控制主数据刷新或
  • 提供单独的主数据管理应用程序并向相关应用程序发送消息或
  • (最佳方法)在质量(审查、测试等)和时间(与代码更改相同)方面管理主数据编辑,通过环境进行推广,部署和刷新数据/将应用重新启动到托管计划

如果您正在观察由另一个应用程序(共享数据库集成)管理的事务数据,或者您使用 ETL 等数据级集成来为您的应用程序提供数据:

  • 尝试让数据实体仅由一个应用编写(其他应用只读)
  • 轮询暂存/ETL 控制表以了解发生什么/何时发生变化或
  • 使用 JDBC/ODBC 级别的专有扩展进行通知或轮询,Alex Poole 的回答中也提到了这一点,或者
  • 将 2 个应用的重叠数据操作重构为共享 SOA 服务,可以避免观察要求或将其从数据操作提升到更高级别的 SOA/应用消息
  • 使用 ESB 或数据库适配器调用您的应用程序以获取通知或使用 WS 端点进行批量数据传输(例如 Apache Camel、Apache ServiceMix、Mule ESB、Openadaptor)
  • 避免使用管道或高级队列等数据库扩展基础设施

如果您使用消息传递(发送或接收),请从您的应用程序中进行。来自数据库的消息有点反模式。作为最后的手段,可以使用调用 Web 服务的触发器 (http://www.oracle.com/technetwork/developer-tools/jdev/dbcalloutws-howto-084195.html),但需要非常小心地以非常粗略的方式执行此操作,当一组数据更改时调用业务(子)流程,而不是处理细粒度的 CRUD 类型操作。最好触发作业并让作业在事务外调用 Web 服务。

关于database - Oracle 中的观察者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16080039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com