我有一个用于管理超市客户忠诚度积分的应用程序。我们有一个支持我们内部呼叫中心应用程序的数据库,该应用程序已经运行了大约 10 年左右,但最近我们还直接向数据库公开了一个 Web 服务层,以支持一个公共网站,客户可以在其中登录并更新他们的直接详细。该网站由第三方维护,这使更改更加复杂。
现在,问题是有一些夜间批处理作业可能需要数小时才能运行并长时间锁定数据库。我的任务是确保 Web 服务不受这些批处理作业的影响。主要工作是从商店导入客户交易并计算忠诚度积分。
我们的环境是 sql server 2008/ .Net 4
我正在寻找一些关于可能的解决方案和利弊的建议
到目前为止我的想法:
创建数据库的副本并使用 SQL 复制使数据库保持同步。Web 服务对数据库的副本起作用。
优点
- 源数据库上发生的事情之间没有冲突
缺点
- 将不得不同步回通过 Web 服务发生的更改。
- 架构更改将导致复制中断
- 主数据库上发生的任何更新都必须被推出,因此仍然可以锁定数据库
允许 Web 服务使用 (Nolock) 读取数据。来自 Web 服务的更新可以通过 sql 代理异步调度
优点
- 不太复杂的设置,
缺点
- 没有设置 sql broker 的经验,不确定它有多强大。
- 意外事件仍然可以锁定数据库并关闭网站
调整长时间运行的进程以确保它们没有锁定数据库
优点
- 将是风险最小的选择。其中一张表有数亿行数据和一个复合主键,所以我觉得输入一个身份,因为 PK 应该可以减少锁升级等。
缺点 - 在这些特定作业运行时,可能总是会有某种程度的锁定
拆分 Web 服务以分离可能受批处理作业影响的服务。以不同的方式对待这些。
- 听起来像是要走的路,我只需要确定处理这些受影响的 Web 服务的最佳方法,用于读取和写入。