繁体   English   中英

使用分布式Web服务查询多个数据库

[英]Querying multiple databases using distributed web services

我对以下情况的最佳做法,尤其是预期的性能有一个快速的疑问:

如果我要从包含示意性的相同sql数据库的多台服务器中查询数据,请问让每台服务器提供一个Web方法(单个客户端应用程序可以使用)是一种合适的(相对较快)的解决方案吗?

数据只需要在客户端上进行整合,就必须串行(或并行使用)几种Web方法以将数据提供给客户端。 每个服务器也将实体框架实现为ORM。

性能是我主要关注的问题,随着我们开始扩展到越来越多的服务器,结果是否会过慢?

问题不是性能,而是可靠性。 随着您需要查询以将响应返回给客户端的服务数量增加,可靠性也会降低。 假设您的数据库具有99%的可用性(整个一年的维护,补丁和升级总停机时间少于4天)。 如果您需要查询客户看到的5个数据库,并且实际可用性只有95%,那么您的站点一年就会出现将近18天的故障。 如果有10个数据库,则可用性为90%(关闭了35天),而50台服务器则下降到60%,这意味着您的站点无法使用。

这就是为什么在这种横向扩展方案中,驱动力是可靠性的原因,而可靠性只有通过解耦数据库才能实现。 通常的技巧是为数据库实现异步消息传递总线以进行通信,并使到站点的每个请求仅在其本地分片上连接,而每个请求永远不会查询多个数据库。

有关如何大规模完成此操作的详细说明,请参见本演示文稿MySpace如何使用基于SQL Server的消息传递总线来实现可伸缩性

SIGMOD 2009主题演讲将依次介绍Facebook如何获得类似的结果: 构建Facebook:使用memcached和MySQL分区实现大规模性能

如果您的示意性相同的数据驻留在不同的数据库中,那么您是否研究过表分区并将所有数据存储在一个数据库中? 这可能会有所帮助。

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

在SQL Server 2005中, 有一些方法可以通过Web服务公开数据,但是我不建议您这样做,因为Web服务本身会跨越应用程序边界,因此会降低性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM