我有一个一般的架构问题,希望大家可以帮助我。所以先介绍一些基本背景。我有一个中型客户群使用我的旗舰产品,主要是crm会计软件。它是一个基于Windows的产品,它们在服务器上(通常在他们的办公室)托管数据。
我有一个clickonce应用程序,可以将其数据库的子集上传到我们的服务器。我们将所有客户的数据存储在一个数据库中。我们为每位客户及其后续记录提供数据提示。
clickonce使用清单工作,它基本上可以确定在我们的服务器上添加,删除或更新哪些记录。客户服务器和服务器之间的数据传输是通过Web服务进行的。在初始上传(数据密集)之后,后续上传只会推动差异(这要小得多)。我们的大多数客户倾向于上传一天。
我们还有一个Web应用程序,可以访问这个数据子集,向各种用户显示信息,这些用户是我们客户的客户。我们为这个网络应用程序提供了大约3000个活跃用户,该网站应用程序大约每周一次访问该网站。
问题在于,从网站以及上传服务对我们数据库的查询是超时的。每当我们进行新版本时,我们都会扩展数据子集(即添加新表或2)。因此,在发布之后,我们立即受到上传的轰炸。因此我们的网站最近很多。我认为在上传数据和网站数据检索方面,一个数据库的流量过多。
我们希望尽可能将数据子集与旗舰产品数据保持同步。
我们得到的东西包括,用于Clickonce的调度程序在凌晨上传数据。我们目前正在实施排队系统,因此一次只能上传x个人。
我可以在长期和短期内探索哪些途径?
欢呼。
答案 0 :(得分:1)
如果上传不必立即可用(可以在选择数据之前稍等一下),我强烈考虑使用MSMQ / WCF在其前面放置一个队列。这可以帮助您减少对数据的吸收。
接下来,分析数据库结构非常重要。这里没有太多关于你的架构的信息,或者行数等...但是如果你有大量的传入数据,我可以推荐几件事。
答案 1 :(得分:0)
在开始深入研究优化过程之前,我要确保你看一件事就是找出你的瓶颈。是客户端处理,客户端带宽,服务器带宽还是服务器端处理。假设你没有提供大量的数据,那很可能是服务器端的处理,但是做出这样的假设会让你在这些事情上遇到麻烦。
答案 2 :(得分:0)
你的瓶颈在哪里?是您的数据连接带宽问题,数据库服务器上的问题,还是Web服务器上的问题等?
您运行的是哪种数据库软件?如果它是访问或类似的东西,它必须去,赞成或稍微更像企业,如SQL Server或类似的东西。
所有客户都在尝试同时上传吗?你能不能以某种方式对它们进行煽动,也许是让它们在一天中的随机时间上传,或者在特定的窗口中进行randome时间。
是否会对您的Web服务器或数据库服务器进行群集帮助?
如上所述,您可以通过msmq实现某种队列,或使用biztalk或类似产品。这样客户端可以提交结果,忘记它,然后队列软件处理实际交付。