【问题标题】:How to reduce remote SQL Server loads?如何减少远程 SQL Server 负载?
【发布时间】:2011-07-12 20:13:23
【问题描述】:

我想用 C# 创建一个带有客户端和服务器端的应用程序。它将在本地网络上工作。客户端必须检查远程 SQL Server 上的更新。假设我们将更新时间间隔设置为 2 秒。如果我有 20 个客户端应用程序,那么它们会每 2 秒向远程 SQL Server 发送一次查询,并且会大量加载服务器。现在我想知道有什么方法可以减少服务器负载,或者它是检查更新的唯一方法吗?

【问题讨论】:

  • 您需要经常检查哪些数据?

标签: c# sql sql-server networking network-programming


【解决方案1】:

在我看来,没有必要让客户端直接连接数据库服务器。这里应该还有一层,它只会连接到服务器并缓存有关更新的信息。您的客户端应连接到此附加信息并使用缓存的信息。

更新 据我了解,出现问题是因为您的所有客户端每两秒 ping 一次您的数据库服务器。这个问题的解决方案是创建一个特殊的模块,它只能访问数据库服务器并要求它进行更新。例如,每两秒。如果更新准备好,它应该能够从数据库中获取它并存储。这就是我在附加层下的意思。

现在,让我们回到您的客户身上。他们应该能够与此模块通信并从中获取有关准备更新的信息(此信息已缓存,因此获取它非常快。而且您无需在每次客户端请求时 ping 服务器)。如果更新准备就绪,请将其获取到客户端并在客户端工作。

至于这个附加层和客户端之间的通信。由于您正在使用 .NET,因此我建议您查看 WCF,从我的角度来看,它已成为在 .NET 中实现进程间通信的标准方法。网络上有很多关于它的信息,我会尽快发布链接。

这是我最喜欢的 WCF 书籍:

Programming WCF Services

MSDN 条目:

Windows Communication Foundation

【讨论】:

  • @user841470:换句话说,称为中间层。您可以使用诸如缓存查询或表的 SqlCacheDependency 之类的东西。这样缓存总是有最新的数据。这可以实现为进行缓存的 Web 服务或 WCF 服务。应用调用 web/WCF 服务,相关数据返回到该服务。
  • 但在这种情况下,我需要将一堆客户端 IP 地址写入服务器端 pc,我该如何自动化这个过程?
  • @Tural T。您无需使用 WCF 编写一堆 IP 地址。您需要做的就是在客户端已知的服务器端发布一个端点。客户端将连接到 WCf 服务并获取所需的信息。
  • 客户端可以使用 Publish-Subscribe 消息传递与中间层通信,因此客户端只需订阅特定的更新类型,仅此而已,pubsub 模型有效地减少了从客户端到中间层的冗余定期检查。跨度>
  • 如果我理解正确,您建议服务器通知客户端更新已准备好,然后客户端下载它们。对吗?
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多