2008-12-28 116 views
1

我正在构建一个Asp.net MVC网站,我有一个快速的专用服务器的Web应用程序,但数据库存储在很多其他应用程序使用非常繁忙的Ms Sql服务器。非常缓慢的数据库服务器的模式

另外,如果Web服务器速度非常快,则应用程序响应时间会很慢,主要是因为数据库服务器的响应速度较慢。

我无法更改数据库服务器,因为输入到Web应用程序中的所有数据都需要在最后到达(出于备份原因)。

数据库仅用于webapp,我想找到一种缓存机制,其中所有数据都缓存在Web服务器上,并且更新以异步方式发送到数据库。

读取数据库数据和插入数据之间的直接对应关系并不重要:比如在StackOverflow上阅读问题和插入后不需要立即显示的新插入问题。

我以为在慢速数据库服务器和本地数据(可能是Sqllite或SqlExpress之一)之间交换和同步数据的WCF服务之间建立了一个WCF服务。

这个问题最好的模式是什么?

回答

3

你的瓶颈是什么?读取数据或写入数据?

如果您关心的是读取数据,使用基于内存的数据缓存机制(如memcached)将成为性能提升者,因为大部分主流和最大的网站都是这样做的。 Scaling facebook hi5 with memcached是一个很好的阅读。同时实现应用程序端页面缓存会丢失由应用程序触发较低的数据库加载和更好的响应时间所做的查询。但是这对数据库服务器的负载没有太大的影响,因为你的数据库有一些其他的重量级用户。

如果写入数据是瓶颈,那么实施某种异类中间件存储服务似乎是必需的。如果你在前端服务器上有快速和慢速的响应定时数据存储,那么使用像mysql或postgresql这样的轻量级数据库存储(可能不是那么轻量级);并且使用你的真实数据库作为你的站点的从属复制服务器是一个很好的选择为你。

+0

如果瓶颈是写作,那么你需要知道DB服务器是否可以跟上Web应用程序在一天的过程中。如果不是这样,那么数据库服务器就永远不会与您一起扩展。如果可以的话,那么你有机会。但为什么数据库机器如此缓慢?担心! – 2008-12-28 23:34:43

1

我会做你正在考虑的。为应用程序使用另一个数据库,并仅将其用于备份目的。

0

有许多复制技术应该给你适当的结果。通过在配置的'web'端安装SQL Server实例,您可以选择:

  • 从Web端(发布者)向数据库服务器端(订阅者)进行快照复制。您需要在Web服务器上安装SQL Server的付费版本。我从未参与过这种配置,但它可能会在预定的同步时间使用大量Web服务器资源
  • 在数据库服务器端(发布服务器)和Web端(授权服务器)之间进行合并(或事务处理,如果请求) )。然后,您可以使用MS-SQL Server的免费版本,并根据您对网络服务器宕机后数据丢失的容忍度来计划同步过程。
0

我不知道是否可以改进它在您的Web端添加一个MDF文件,而不是处理其他IP中的Sever ...

只需添加一个SQL 2008 Server Express Edition文件并尝试,只要您不传递4Gb的数据就行了,当然还有更多的限制,但仅仅为了它的速度,为什么不尝试?

0

您还应该考虑涉及的网络交换机。如果数据库服务器正在与多个Web服务器通信,那么它可能会受到网络连接速度的限制。如果他们只通过100mb的网络交换机连接,那么你也可以考虑升级。

0

WCF服务对于这个问题将是一个非常糟糕的工程解决方案 - 为什么在您可以使用标准SQLServer连接机制来确保数据正确传输时自己创建。日志传送将以选定的时间间隔发送数据。

这样,你就可以得到本地的快速sql服务器,并且数据在慢速备份服务器中正确保存。

尽管你应该调查一下慢速sql服务器,但是性能问题可能与它的负载没有任何关系,更多的与你要求它使用的查询和索引有关。

1

我有这个问题一次,我们决定去数据仓库的组合(即每隔一段时间从数据库中提取数据并将其存储在单独的只读数据库中)以及通过Windows进行消息排队服务(更新)。

这令人惊讶的效果不错,因为MSMQ确保可靠的消息传递(更新没有丢失)和数据仓库确信,在本地数据库是可用的数据。

虽然它仍然取决于一些因素。如果您有大量数据要传输到您的Web应用程序,则重建仓库可能需要一些时间,并且您可能需要考虑数据复制或事务日志传送。此外,在仓库重建并处理消息之前,更改不可见。

另一方面,这个解决方案是可扩展的,并且可以相对容易实现。 (您可以使用集成服务将数据拉到仓库例子,用于处理变化的BL层)。