关于分布式c#应用程序的共享数据库选项的建议

时间:2013-01-30 09:43:47

标签: c# sql-server

我想了解以下情况的选项:

我有一个C#winforms应用程序(在VS 2010中开发)分发到该国的许多办事处。应用程序与位于不同位置的主服务器上的C#Web服务进行通信,并且在另一个位置有一个数据库(SQL Server 2012)。 (所有服务器都运行Windows Server 2008)

总部(我们所在地)利用相同的前端来管理数据库中的某些信息,这些信息需要随时可供所有办公室使用 - 实时。同时,他们更改的任何数据都需要在总部随时可用,因为我们有一个实时仪表板Web应用程序,可监控整个站点的统计数据。

目前,用户抱怨应用程序运行的速度。他们说这真的很慢。我们在一个关键业务环境中工作,每分钟等待都可能意味着失去一个客户。

我研究过以下选项,但不是来自数据库背景,所以不太确定我的方案的最佳路径是什么。

  • 终端服务/会话(我刚刚在总公司实施,他们说这是一个很大的改进,虽然有一个可怕的延迟 - 比如远程登录某些人的桌面,这对于工作并不好。)
  • 事务复制(听起来像我的场景非常合理,但需要所有办公室在他们各自的服务器上拥有自己的SQL服务器数据库,并且他们倾向于“摆弄”并打破他们留下的所有东西。 !)希望我们可以接管他们所有的服务器,但他们是特许经营权,所以在现场有他们自己的IT人员。)

我目前在应用程序启动时缓存了大量的查找数据,但这也需要2-3分钟才能完成,这是不可接受的!

有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

通过Web服务运行所有内容,不需要在客户端本地部署其他SQL Server。除非WS也在本地部署,否则WS将无法与这些数据库通信。

在建议任何具体改进之前,您需要对发生瓶颈的地方进行基准测试。各种客户端和Web服务之间的延迟是什么,然后是Web服务和数据库?数据库是否显示等待?一旦你知道了最糟糕的情况,那就改进一下,然后逐渐减少。

一些一般性的想法,但是:

  • 将WS移近数据库
  • 在Web服务级别缓存数据以节省数据库调用
  • 查找费用WS调用,并尝试优化吞吐量
  • 如果查找数据没有经常更改,请使用SQL CE的本地副本来缓存该数据,并使用MS Sync Framework将数据保持与SQL Server同步
  • 对客户端计算机上的所有内容使用SQL CE,并使用后台进程在客户端和WS之间进行同步

UPDATE 在你的评论之后,另外两个想法。如果您的Web服务有效负载很大,您可以尝试在Web服务上添加压缩(如果尚未实现)。

您还可以更新客户端以在线程中异步执行WS调用,或者如果您使用async / await使用.NET 4.5。这至少允许客户端使用UI,但不必修复数据加载时间的任何问题。