服务器端数据库(Oracle)有更新,怎样及时通知客户端应用程序

victory1024 2010-07-05 03:03:16
各位高手,请问:
当服务器的数据库(Oracle)中的某一个表有插入,更新,删除时,怎样及时的通知客户端的应用程序。我知道Java方面有一个JMS之类可以实现的,请问C#中有没有类似的方法可以实现。麻烦提供点思路也行。
...全文
269 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
whslovexyp 2010-07-05
  • 打赏
  • 举报
回复
学习了
victory1024 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 computerfox 的回复:]
Database Change Notification可以实现:
在现在的程序开发过程中,我们经常考虑的一个提高性能的方法就是用data cache。Data cache 避免了我们每次需要数据的时候都去访问数据库,这样节省了大量的时间。但是这样就出现了一个问题,当我们用data cache的时候,如果在数据库中的数据发生了改变,那么我们data cache 中的数据就和数据库的数据不一致了,……
[/Quote]
谢谢,我调查一下。
kinglshadow 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 computerfox 的回复:]
Database Change Notification可以实现:
在现在的程序开发过程中,我们经常考虑的一个提高性能的方法就是用data cache。Data cache 避免了我们每次需要数据的时候都去访问数据库,这样节省了大量的时间。但是这样就出现了一个问题,当我们用data cache的时候,如果在数据库中的数据发生了改变,那么我们data cache 中的数据就和数据库的数据不一致了,……
[/Quote]

对啊,SQL dependency 查询通知机制 应该解决你的问题
捷哥1999 2010-07-05
  • 打赏
  • 举报
回复
Database Change Notification可以实现:
在现在的程序开发过程中,我们经常考虑的一个提高性能的方法就是用data cache。Data cache 避免了我们每次需要数据的时候都去访问数据库,这样节省了大量的时间。但是这样就出现了一个问题,当我们用data cache的时候,如果在数据库中的数据发生了改变,那么我们data cache 中的数据就和数据库的数据不一致了,这样将会导致错误。为了解决这个问题,我们一般常用两种方法。

  1. 让用户手动的更新data cache的内容,例如提供一个更新按钮。

  2. 让我们的程序间隔一定的时间自动去更新data cache的内容。

  不难看出,这两种方法都有相当的局限性。

  第一种方法用户必须记住经常的去更新数据,如果数据库中的数据改了但是用户并没有去更新数据,这样将导致错误。第二种方法的局限性是我们没有办法设置一个恰好的时间间隔使数据库数据变化的时候保证data cache的数据也发生变化。

  Database Change Notification就是为了解决这个难题。

  Database Change Notification 的基本概念

  Database Change Notification的作用就是当数据库中的数据发生变化的时候,自动发出一个通知。

  用Database Change Notification有三个步骤:

  1. 注册: 指定数据库要监听的查询。ODP.NET自动注册基于这个查询的监听事件。数据库可以监听DML(Data Manipulation Language)事件,DDL(Data Definition Language)事件,和global 事件(例如关闭数据库)。

  2. 通知:一旦数据库中的数据发生变化,数据库将自动发出通知,我们要在我们的程序中定义事件处理操作。

  3. 响应:在我们的程序中,一旦收到通知,我们一般情况下会自动更新data cache,当然我们可以通知用户数据发生改变,由他来决定是否进行更新。
victory1024 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kevin_cheung 的回复:]
1.要是客户端做的 可以直接从客户端获取
2.要是服务器端做的

可以
(a)采用服务器端通知客户端的方式
(b)写一个触发器 触发后就把数据写到一个log表中 客户端去读取log 查看上次读取时间以后的数据就可以了
[/Quote]
这个表的变更时在服务器端做的。现在是想采用服务器端通知客户端的方式,可不知道采取什么样的通知方式,麻烦给提供一下。
其实整个要做的事情就是首先客户端先取一次这个表的数据,然后只有当这个表有变更的时候,客户端才去重新取一次这个表的数据。
LovingAlison 2010-07-05
  • 打赏
  • 举报
回复
1.要是客户端做的 可以直接从客户端获取
2.要是服务器端做的

可以
(a)采用服务器端通知客户端的方式
(b)写一个触发器 触发后就把数据写到一个log表中 客户端去读取log 查看上次读取时间以后的数据就可以了
LovingAlison 2010-07-05
  • 打赏
  • 举报
回复
这个表的变更(增删改)是客户端做的还是什么做的?

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧