【问题标题】:Implement MySQL event notification back to a Delphi application将 MySQL 事件通知实现回 Delphi 应用程序
【发布时间】:2010-10-21 03:06:12
【问题描述】:

节日,

是否有人能够提供一些关于如何通知我的 Delphi 应用程序我的 MySQL 数据库中的特定记录已更改的指示?类似于 Interbase 的事件系统?

我看过的想法:

.: Q4M :. (http://q4m.31tools.com/)

优点:不需要外部守护程序的原生 MySQL 解决方案 缺点:不存在 Win32 版本,因为它使用特定于 Linux 的 Posix 调用

.: MySQL 消息 API :. (http://messagequeue.lenoxway.net/)

优点:稳健(使用 spread.org) 缺点:没有 Win32 二进制文件。需要 spread.org 的额外配置和守护进程

.: 自定义用户定义函数 :.

我正在尝试编写一个可以使用 Win32 API PostMessage() 的 UDF,以便将 Windows 消息发送到一个简单的套接字服务器。

优点:与 MySQL 集成(尽管有外部 DLL 依赖项)。可以根据我的需要定制 缺点:我无法让它工作(见帖子MySQL User Defined Function to send a windows message)。这可能是因为 MySQL 作为服务运行

非常感谢任何指针、想法等。

--D

【问题讨论】:

  • 您是否考虑过使用独立于 SQL 服务器的通知系统?
  • 是的,我做到了。但是,在应用程序中没有发生 DB 更改的中心点。 ie 有时它是通过直接TTable 访问来完成的,有时是通过查询或存储过程来完成的。因此,在数据库服务器上执行此操作为我提供了很好的中心位置。

标签: mysql delphi notifications


【解决方案1】:

作为一种选择,您可以考虑使用 RemObject DataAbstract 或 kbmMW 等中间层解决方案。 AFAIK,它们允许跟踪中间层的更改并提供通知客户端的机制。

【讨论】:

  • 我希望避免中间层的复杂性。如果我真的走那条路,那么我希望Spread 和MySQL Message Queue API 会成为首选。
【解决方案2】:

我最终实现如下:

  • 创建了侦听 TCP 端口和 Windows Pipe 的 Windows 应用
  • 创建了一个 mySQL 用户定义函数 (UDF),它将连接到上述 Windows 管道并发送一些信息
  • 向数据库中的表添加了触发器,以调用 UDF,其中包含有关哪个表、什么操作(插入、删除、更新)、主键值的信息
  • TCP 客户端现在可以连接到 Windows 应用以接收从 UDF 传递的信息
  • 然后 TCP 客户端可以根据需要使用检索到的信息进行刷新

效果很好,并且在带宽方面很轻(因为客户端只刷新他们需要的内容)。此外,将 TCP 服务器与数据库保持在同一台机器上并使用 Windows 管道意味着管道可以保持打开状态,并且通过写入管道没有 TCP 堆栈开销。意味着 mySQL 上的负载和执行 UDF 所花费的时间非常小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多