2009-08-26 89 views
0

我有一个一般性的架构问题,希望大家可以帮助我。所以一些基本的背景首先。我有一个中型客户群,使用我的旗舰产品,主要是crm会计软件。它是一个基于Windows的产品,它们将数据存储在服务器上(通常在他们的办公室)。体系结构问题

我有一个clickonce应用程序,可以将他们的数据库的一个子集上传到我们的服务器。我们将所有客户的数据存储在一个数据库中。我们给每个客户及其后续记录一个数据集。

clickonce使用清单工作,它基本上指出要在我们的服务器上添加,删除或更新哪些记录。客户服务器和我们的服务器之间的数据传输是通过Web服务进行的。在inital上传之后(这是数据密集型),后续的上传只会将差异向上推进(这是小得多的)。我们的大多数客户倾向于每天上传一次。

我们还有一个Web应用程序访问这个数据子集,以向各种用户显示信息,这些用户是我们客户的客户。我们这个网络应用程序约有3000个活跃用户,每周一次访问该网站。

问题在于,网站对数据库的查询以及上传服务的查询超时。每次我们做一个新版本,我们扩展数据的子集(即添加一个新表格或2)。所以在发布后我们立即受到上传的轰炸。因此,我们的网站最近下降了很多。就数据上传和网站数据检索而言,我认为一个数据库发生的流量太多了。

我们希望尽可能保持数据子集与旗舰产品数据同步。

我们已经得到的东西包括调度器的clickonce清晨上传数据。我们目前正在实施排队系统,因此只有一定数量的人可以一次上传。

我有什么途径可以探索长期和短期?

干杯。

+0

您是使用Microsoft SQL Server还是其他? – Thorarin 2009-08-26 04:45:49

+0

是的。 SQL Server 2005。 – 2009-08-26 05:02:05

回答

0

在开始深入研究优化过程之前,我会确保您看到的一件事是确定您的瓶颈。它是客户端处理,客户端带宽,服务器带宽还是服务器端处理。假设你没有传输大量的数据,这可能是服务器端处理,但做出这样的假设会让你在这类事情上陷入困境。

1

如果上传不必立即可用(在选择数据之前可以稍等一会),我强烈建议使用MSMQ/WCF在其前面放置一个队列。这可以帮助您节制您的数据摄入量。

接下来,分析数据库结构非常重要。这里没有太多有关您的架构的信息,或者行数等等,但是如果您有大量传入数据,则可以推荐几件事情。

  • 确保您没有使用不符合任务的技术(如Access或Sqlite)。
  • 考虑优化数据库 插入,然后将该数据库复制到您可能用于选择的其他数据库。
  • 如果你有数据量巨大,考虑设立一个集群
  • 考虑改用像亚马逊SimpleDB的或Azure的数据服务的基于云的数据服务
0

哪里是你的bottlneck?它是数据连接带宽问题,数据库服务器还是Web服务器等问题?

你正在运行哪些数据库软件?如果它是访问或类似的东西,它必须去,赞成或稍微更多的企业,如SQL服务器或类似的。

所有的客户端都试图同时上传吗?你可以以某种方式让他们站稳脚跟,也许可以让他们在一天中的任意时间上传,或者在特定窗口期间随机播放。

集群您的Web服务器或数据库服务器的帮助?

您可以像前面提到的那样通过msmq实现某种排队,或者使用biztalk或类似的产品。这样客户可以提交他们的结果,并忘记它,然后队列软件处理实际交付。