【问题标题】:How to write in DB without racing condition using a web service?如何使用 Web 服务在没有赛车条件的情况下写入数据库?
【发布时间】:2012-11-26 03:15:21
【问题描述】:

我用c#写了一个简单的web服务(asmx)

客户端使用 post 和 title 参数访问 web 服务,并期望服务返回一个对象,其中包含有关该 title 键的更多详细信息。

我面临的问题是,在开始执行我的 web 服务时,我会检查提供给我的标题是否存在于我的数据库中。如果不是,我构建正确的对象,我将它保存到我的数据库中以备将来搜索以避免重建它(因为我使用第三方 Web 服务进行构建),然后我以 json 格式发回客户询问的对象为。

然而,这会导致竞争情况,因为 2 个客户端可能会请求相同的标题,并最终将同一对象插入数据库两次,因为其中一个客户端速度不够快,无法在另一个客户端请求之前写入该对象。

我使用 Mysql 数据库,我想弄清楚如何避免这种情况?

密钥是存储过程吗?

我该如何解决这个问题?

注意:我的数据库中的关键是标题列和年份列。

提前致谢

【问题讨论】:

  • 第 3 方是否提供了一个您也可以在数据库中使用的唯一 ID?

标签: c# mysql web-services web


【解决方案1】:

您可以在列上添加 SQL Server UNIQUE 约束以强制唯一性。如果出现竞争条件,您可以通过捕获服务代码中的错误(来自约束)并简单地再次查询标题来处理它。

【讨论】:

    【解决方案2】:

    在数据库中的标题上放置一个唯一键(或者标题的哈希可能更快)。 即使第一次尝试选择该行时该行不存在,第二次调用也会得到一个 DUPLICATE KEY 异常。

    【讨论】:

      猜你喜欢
      • 2017-07-31
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      相关资源
      最近更新 更多