使用异地数据库时避免减速

时间:2011-01-17 08:49:29

标签: c# asp.net sql

我的问题的基本布局是:

  • 在专门的托管公司(位置1)
  • 托管的网站(ASP.NET / C#)
  • 公司数据库(SQL Server),包含相关数据的记录(位置2)。
  • 位置1& 2通过VPN连接。
  • 客户访问该网站并希望从公司数据库中提取数据。
  • 无法更改服务器位置或布局(即无法将网站移至办公室服务器)。

我想要做的是找出在这种情况下处理数据访问的最佳方法,最大限度地减少通过VPN进行耗时的数据库调用的需要。我得到的第一个想法是:

  

当用户输入该部分时   需要DB数据的网站,你拉   所有需要的表来自   将数据库转换为内存数据集。所有   随后对数据的查看/更新   在此数据集上完成。当用户   离开(注销,会话超时,   浏览器关闭等)数据集得到   发送到SQL服务器。

我不确定这是否是一个现实的解决方案,它显然有一些问题。如果两个Web访问者正在对相同的数据执行更新,那么最后完成的那个将更改覆盖第一个。也没有办法知道你有最新的数据(即如果客户在他们的项目中提取som信息并且我们在他们查看时更新这些信息,他们将不会看到这些更改,并且将出现上述覆盖问题)。 / p>

另一种解决方案是以某种方式聚合数据库调用并确保它们仅在您需要时发生,例如:在数据更新期间但不在数据视图期间。但是,这些刷新的数据库调用之间的暂停时间越长,数据视图根据上述问题过时的可能性就越大。

对上述或一些新想法的任何意见都是最受欢迎的。

2 个答案:

答案 0 :(得分:1)

缓存静态数据(asp.net缓存函数)并尽可能少地创建查询。

尝试使用一些客户端回调创建数据库更新的两步流程,以使客户感觉他们拥有响应式网站。 (Ajax会在这种情况下发光)

答案 1 :(得分:1)

如果您还没有,首先我会仔细研究可用的带宽,并确保远程数据库调用确实存在问题。

我认为您的内存数据集想法很难有效实施。也许理想的解决方案是为您的数据库层编写API。这可以在位置2的数据库旁边的Web服务上实现。可能需要您重写表单,这可能不是一个选项。