2011-02-05 35 views
2

我有以下情形快速的问题的最佳做法,特别是预计业绩:如果我想查询从包含示意地identital SQL数据库的多台服务器的数据查询多个数据库采用分布式Web服务

,将有各服务器提供一种单一客户端应用程序可以使用的Web方法是一种适当的(并且相对较快)的解决方案?

这些数据只需要在客户端进行整合,其中几个Web方法将不得不串行(或并行)消费,以便将数据提供给客户端。每个服务器也将实施实体框架作为一个ORM。

性能是我最关心的问题,当我们开始扩展到越来越多的服务器时,性能是否会变得过慢?

+1

在数据库中不做“数据库”工作的原因是什么?也许使用像SSIS的东西。 – 2011-02-05 04:08:31

+0

你是什么意思?对不起,我对这一切都比较陌生。数据库是在哪里镜像/复制海誓山盟,还是有某种“主”数据库来巩固所有其他数据库?如果是这样,那是一个可能的解决方案,但我很好奇这个选项。现在我必须使用有限的资源。 – Sean 2011-02-05 04:13:28

回答

1

问题不是性能,是可靠性。由于您需要查询以向客户端返回响应的服务数量增加,因此可靠性会降低。假设您有99%的数据库可用性(维护,修补程序和全年升级的总停机时间少于4天)。如果您需要查询您的客户看到的5个数据库,并且实际可用性只有95%,那么您的网站一年将近18天。在10个数据库中,可用性为90%(35天下降),50台服务器直线下降至60%,这意味着您的站点无法使用。

这就是为什么这种扩展情景的驱动力是可靠性,只有通过数据库的解耦才能实现。通常的诀窍是为数据库实现通信的异步消息传递总线,并且每个向站点发出的请求仅在其本地分片上连接,因此每次请求都从不查询多个数据库。

有关更详细的说明,请参阅this presentation how MySpace uses a SQL Server based messaging buss to achieve scalability

这个SIGMOD 2009 Keynote展示了Facebook如何实现类似结果:Building Facebook: Performance at Massive Scale,使用memcached和MySQL分区。

0

如果您的示意图中相同的数据位于不同的数据库中,那么您是否查看了表分区并将所有数据存储在一个数据库中?这可能有帮助。

在当前的情况下,我建议你获取使用ORM/ADO.Net不同的数据库服务器的数据,然后逻辑在应用程序中合并。

在SQL Server 2005中there are ways通过Web服务公开数据,但我不会建议,因为Web服务本身会给你性能损失,因为你跨越了应用程序边界。