AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 1570
Accepted
rem
rem
Asked: 2011-03-05 10:31:57 +0800 CST2011-03-05 10:31:57 +0800 CST 2011-03-05 10:31:57 +0800 CST

轮询是从数据库更新应用程序数据的唯一方法吗?

  • 772

应用程序需要尽可能从数据库中更新最新的数据。在这种情况下,除了基于计时器的请求(轮询)数据库之外,还有其他获取数据的方法吗?

我使用 MS SQL Server 2008(和 .NET 应用程序 + 实体框架),但我也想了解其他类型的数据库。

database-design database-recommendation
  • 7 7 个回答
  • 6844 Views

7 个回答

  • Voted
  1. Leigh Riffel
    2011-03-05T11:57:59+08:002011-03-05T11:57:59+08:00

    在 Oracle 中,您可以使用内置的DBMS_ALERT 包来促进这一点。

    DBMS_ALERT 支持数据库事件(警报)的异步通知。通过适当使用此包和数据库触发器,应用程序可以在数据库中感兴趣的值发生更改时通知自己。

    假设图形工具正在显示数据库表中某些数据的图形。图形工具可以在读取数据并将其绘制成图形后,等待覆盖刚刚读取的数据的数据库警报 (WAITONE)。当任何其他用户更改数据时,该工具会自动唤醒。所需要的只是在数据库表上放置一个触发器,该触发器在触发时执行一个信号 (SIGNAL)。

    • 10
  2. Neil McGuigan
    2013-01-23T11:07:14+08:002013-01-23T11:07:14+08:00

    听/通知 PostgreSQL

    http://www.postgresql.org/docs/current/static/sql-notify.html

    在数据库中...

    NOTIFY static_channel_name, 'static-message';
    

    或在函数/触发器中:

    perform pg_notify('dynamic-channel-name', 'dynamic-message');
    

    在数据库客户端中:

    LISTEN some_channel_name; --note the lack of quotes
    

    LISTEN 客户端将收到 PostgreSQL 进程 ID、通道名称和消息值。

    PostgreSQL 的标准 JDBC 驱动程序不喜欢通知,但是您可以为此目的使用https://github.com/impossibl/pgjdbc-ng驱动程序

    • 8
  3. Gaius
    2011-03-05T15:07:07+08:002011-03-05T15:07:07+08:00

    某些数据库供应商还提供您的应用程序可以简单地订阅的集成消息总线:

    • Oracle 高级队列
    • IBM DB2 与 MQseries(现在称为 WebSphere MQ)
    • Sybase RTMS

    另一种方法是首先通过像Tibco/RV这样的消息总线将数据路由到数据库中,然后简单地“分支”它,在流中进入 DB 并进入您的应用程序,或者使用像Coherence这样的缓存层在您的应用程序和数据库之间。

    • 7
  4. ScottCher
    2011-03-05T12:15:39+08:002011-03-05T12:15:39+08:00

    另一个 Oracle 解决方案:我们使用 Microsoft 的 dotnet 框架开发了应用程序,该框架利用了 Oracle 的数据库更改通知功能以及 ODP.Net(dotnet 的 Oracle 数据提供程序)。使用它,数据库实际上会在新数据到达时通知 dotnet 应用程序,从而避免不断轮询。我在上面引用的链接是用于执行此操作的 Oracle 教程。希望这可以帮助你。

    不知道任何其他 RDBMS。

    • 6
  5. Best Answer
    gbn
    2011-03-05T11:03:42+08:002011-03-05T11:03:42+08:00

    SQL Server 2005+ 的Service Broker可以做到这一点。

    抱歉,我不确定其他 RDBMS

    • 5
  6. Furicane
    2011-03-09T09:59:35+08:002011-03-09T09:59:35+08:00

    对于我们的一个应用程序(通过 Chrome 和仅 Chrome 访问),我们将 MySQL 与sys_exec UDF一起使用。基本上,为什么是 Chrome - 由于 WebSocket 支持。

    一旦发生关键更新/插入/删除,就会通过嵌入在某些触发器中的新添加的 sys_exec 功能调用外部程序。那时,我们已经拥有了将消息中继到每个连接的客户端所需的一切,而无需轮询或多次查询,因为一切都是实时发生的。

    • 2
  7. cpurdy
    2014-06-04T14:44:13+08:002014-06-04T14:44:13+08:00

    我们结合使用 Oracle GoldenGate 和 Java Persistence API (JPA) 来对 Oracle 数据库以及 DB2、Sybase、Microsoft SQL Server、MySQL、Teradata 等进行此操作。此处描述了该功能:http://docs .oracle.com/middleware/1212/coherence/COHIG/golden_g.htm

    GoldenGate 所做的是将数据库事务日志转换为可过滤的事件流,可以在网络的任何地方使用。我们使用它将相关事务转换为缓存更新或缓存失效,这两者都可以触发应用程序级事件,例如将数据一直推送到桌面或 HTML5 websocket 应用程序。

    (为了全面披露,我在 Oracle 工作,其中一个产品使用 GoldenGate。)

    • 2

相关问题

  • MySQL VARCHAR 和 TEXT 数据类型有什么区别?

  • 存储计算值或根据要求重新计算它们更好吗?[复制]

  • 存储与计算聚合值

  • 推荐使用哪些数据库作为嵌入式数据库?

  • 在数据仓库中实现多对多关系有哪些方法?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve