【发布时间】:2016-06-14 04:04:56
【问题描述】:
我正在尝试提高应用程序的查询性能,但我在逻辑上卡住了。
所以应用程序是专有的,因此我们无法更改应用程序端代码。然而,我们已经获得了使用底层数据库的许可(令人惊讶的是)。应用程序调用 SQL Server 数据库,因此我们当前运行的想法是创建一个与表同名的视图并重命名基础表。当应用程序访问视图时,视图会调用两个 SQL CLR 函数之一,这两个函数都只是调用我们放在一起的 Web 服务。 Web 服务执行所有逻辑,并包含对外部专有 API 的 API 调用,该 API 执行一些额外的逻辑,然后返回结果。
这一切都有效,但是,在扩展到大型数据集(100,000+ 行)时,我们遇到了严重的性能问题。很明显的原因是我们不得不一次处理一行的 Web 服务,其中包括 API 调用,这会产生大量的延迟开销。
对此的明显解决方案是找出一种方法来限制每次查询必须命中 Web 服务的次数,但这就是我遇到的问题。我已经阅读了一些可能处理此类场景的不同方法,但作为一个数据库新手,我很难掌握在这种情况下什么是合适的。
如果有任何想法/建议,我将不胜感激。
【问题讨论】:
-
调用 Web 服务没有什么“更多”——没有什么比调用外部进程更重要了,更不用说远程进程了。如果要导入 100K 行,从其他系统导出它们,然后将它们导入数据库。如果找不到更好的方法从其他系统批量导出它们,请编写一个程序定期刷新数据,可能并行执行多个请求
标签: c# sql-server performance web-services sqlclr