rem*_*rem 17 database-design query database-recommendation
应用程序需要尽可能更新数据库中的数据。在这种情况下,除了基于计时器的请求(轮询)数据库之外,还有其他获取数据的方法吗?
我使用 MS SQL Server 2008(和 .NET 应用程序 + 实体框架),但我也想了解其他类型的数据库。
Lei*_*fel 10
在 Oracle 中,您可以使用内置的DBMS_ALERT 包来简化此操作。
DBMS_ALERT 支持数据库事件(警报)的异步通知。通过适当地使用这个包和数据库触发器,应用程序可以在数据库中感兴趣的值发生变化时通知自己。
假设图形工具正在显示数据库表中某些数据的图形。图形工具可以在读取和绘制数据后,等待覆盖刚刚读取的数据的数据库警报 (WAITONE)。当任何其他用户更改数据时,该工具会自动唤醒。所需要的只是在数据库表上放置一个触发器,每当触发器被触发时,它就会执行一个信号 (SIGNAL)。
听/通知 PostgreSQL
http://www.postgresql.org/docs/current/static/sql-notify.html
在数据库...
NOTIFY static_channel_name, 'static-message';
Run Code Online (Sandbox Code Playgroud)
或在函数/触发器中:
perform pg_notify('dynamic-channel-name', 'dynamic-message');
Run Code Online (Sandbox Code Playgroud)
在数据库客户端中:
LISTEN some_channel_name; --note the lack of quotes
Run Code Online (Sandbox Code Playgroud)
LISTEN 客户端将接收 PostgreSQL 进程 ID、通道名称和消息值。
PostgreSQL 的标准 JDBC 驱动程序不喜欢通知,但是您可以为此使用https://github.com/impossibl/pgjdbc-ng驱动程序
某些数据库供应商还提供您的应用程序可以简单订阅的集成消息总线:
另一种方法是首先通过像Tibco/RV这样的消息总线将数据路由到数据库中,然后简单地“分支”它,在流中进入数据库并进入您的应用程序,或者使用像Coherence这样的缓存层在您的应用程序和数据库之间。
归档时间: |
|
查看次数: |
6552 次 |
最近记录: |