3

我正在开发一个具有自动刷新功能的 .NET 应用程序。我数据库中的每个表都有一个 MODIFIED_DATE 列,在每次更新或插入后都会更新。目前,自动刷新功能仅适用于一张表,但将来可能会发生变化。我目前正在考虑以下可能的解决方案:

  1. 客户端应用程序在计时器上运行一次查询,例如每 10 秒一次,并带回 MODIFIED_DATE 大于存储在我的应用程序中的上次修改日期的所有行。

  2. 在每台侦听 firebird 事件的客户端计算机上保持一个专用的开放连接,然后在触发事件后运行查询。该事件显然会在每次使用 POST_EVENT 命令更新/插入后由数据库触发。

  3. 开发一个服务,该服务将位于服务器上,侦听 firebird 数据库事件,然后使用 .NET 远程处理来通知客户端应用程序。

谁能告诉我上述哪种解决方案在性能和可扩展性方面更好?

我希望解决方案对数据库工作负载的影响最小。

4

3 回答 3

2

实际上,Firebird 的一个不错的特性是能够编写用户定义函数 (UDF),您可以直接从触发器调用 UDF,而 UDF 可以反过来通知您的应用程序(使用标准进程间通信)发生了更新,这个然后成为通知模型而不是轮询模型并且更具可扩展性。

警告:UDF 需要是本机 dll(我相信)C++ 或 Delphi,Delphi 中很可能会有相当多的示例代码。

于 2009-01-15T04:08:07.353 回答
1
  1. 该解决方案在可扩展性方面是最差的。大多数情况下,客户会查询更改而一无所获。大浪费。更不用说更改出现在客户端中的 10 秒延迟。
  2. 我过去曾这样做过,并且也遇到了一些可伸缩性问题。问题是,当触发事件时,每个客户端都会立即查询服务器。不是很好。您可能需要创建一些方案来防止这种情况。
  3. 基本上与2相同,只是涉及更多的工作。;)
于 2009-01-15T09:30:26.237 回答
0

对答案 2 稍作修改:

  1. 您可以使用任何可以创建共享库的语言创建 UDF(Java 除外)
  2. 如果您正在运行 Netware,则无法从 Firebird 调用 UDF
于 2010-06-24T21:38:36.653 回答