【发布时间】:2016-01-22 10:40:36
【问题描述】:
我有一个网页,我使用 CRUD 操作在 MySQL 表中进行了一些数据操作。有很多正在运行的桌面客户端应用程序实例与同一个数据库进行通信,每次我通过网页在这个数据库中进行更改时,所有这些客户端都需要收到有关更改的通知。而且我真的不知道如何处理这个问题的最佳方法。桌面客户端应用程序是用 C# 编写的。另外我知道,至少在使用 ADO.NET 提供程序的 MySQL 中,无法异步通知桌面客户端有关数据库中发生的更改。
当客户端应用程序定期创建数据库连接并检查 MySQL 表的更改时,有一个选项。但是,如果我们有 1000 个正在运行的实例并且每个实例创建连接并每 2 秒读取同一个表,该怎么办?这不是非常消耗数据库服务器资源吗?
我们还可以在插入/更新/删除上编写触发器,它会填充另一个表关于所做的更改,然后我们将轮询这个新的“changes_made”表。
还有一个选项可以创建轮询“changes_made”表的套接字服务器,如果进行了更改,则将更改数据发送到在此上下文中作为套接字侦听器的所有桌面客户端。因此,我们将摆脱客户端的轮询,并显着减少数据库连接的总量和数据库上的负载。
在这里,我想知道解决此类任务的最正确和可扩展的方法是什么。
【问题讨论】:
-
这个问题很宽泛,很容易变成资源请求。保持它不是资源请求,我最近用原生非 3rd 方链接回答了here。