mai*_*rgs 31 java database events triggers database-design
我不熟悉数据库以及它们在CRUD操作之外提供的内容.
我的研究让我有了触发因素.基本上它看起来像触发器提供这种类型的功能:
(来自维基百科)
通常有三个触发事件导致触发器"触发":
- INSERT事件(正在将新记录插入到数据库中).
- UPDATE事件(正在更改记录).
- DELETE事件(正在删除记录).
我的问题是:当使用某种触发器语义更新/删除/插入记录时,是否有某种方式可以通过数据库通知Java(最好包括更改的数据)?
什么可能是这个问题的替代解决方案?我该如何收听数据库事件?
我想这样做的主要原因是这样的场景:
我有5个客户端应用程序都在不同的进程中/存在于不同的PC上.它们共享一个共同的数据库(本例中为Postgres).
假设一个客户端更改了DB中所有5个客户端都"感兴趣"的记录.我试图想办法让客户"通知"更改(最好附加受影响的数据)而不是他们在某个时间间隔查询数据.
Jav*_*ann 15
使用Oracle,您可以在表上设置触发器,然后让触发器发送JMS消息.Oracle有两种不同的JMS实现.然后,您可以使用JDBC驱动程序"监听"该消息.我已经使用这种方法将更改推送到我的应用程序与轮询.如果您使用的是Java数据库(H2),则可以使用其他选项.在我当前的应用程序(SIEM)中,我在H2中有触发器,它使用JMX发布更改事件.
tim*_*tea 13
不要混淆数据库(包含数据)和该数据上的事件.
触发器是一种方式,但通常您的应用程序中将有一个持久层.当某些事情发生时,该层可以选择触发事件 - 比如JMS主题.
触发器是最后一件事,因为你在关系项上操作,而不是数据上的"事件".(例如,"更新",实际上可以映射到"公司更改的合法名称"事件)如果您依赖数据库,则必须将插入和更新映射回现实生活事件....你已经知道了!
然后,您可以在这些通知之上叠加其他内容(如事件流处理),以查找其他人感兴趣的事件.
詹姆士
小智 7
嗯.所以你正在使用PostgreSQL并且你想"监听"事件并在它们发生时被"通知"?
http://www.postgresql.org/docs/8.3/static/sql-listen.html http://www.postgresql.org/docs/8.3/static/sql-notify.html
希望这可以帮助!
从数据库调用外部进程是特定于供应商的.
就在我的头顶:
SQLServer可以从触发器调用CLR程序,
postgresql可以调用动态加载的任意C函数,
MySQL可以调用任意C函数,但必须编译它们,
如果设置为Sybase,Sybase可以进行系统调用.
| 归档时间: |
|
| 查看次数: |
26200 次 |
| 最近记录: |