具有完全相同的日期时间值的SQL记录

时间:2012-03-29 20:41:53

标签: sql-server asp.net-mvc appharbor petapoco

我在AppHarbor上运行了一个Asp.net MVC应用程序。它有日常的电子邮件订购流程:

  1. 用户输入他们的电子邮件并提交。
  2. 系统处理订单并发送带有链接的电子邮件。
  3. 用户检查电子邮件并点击该链接以执行下一步...
  4. 事情是,在步骤#2和#3之间,很多时间都可以通过。有些用户会立即查看他们的电子邮件,有些用户会在一天或更晚的时间最重要的是,有足够的时间可以通过服务器上的应用程序结束。

    因此,当用户点击链接时,可能意味着他们将不得不等待应用程序开始备份......

    问题

    当步骤#3处理时,数据库中的记录在步骤#3发生时使用时间戳(类型为datetime)进行更新。但请理解这一点:我可以看到完全相同的时间戳的记录!怎么会发生这种情况呢?

    在应用程序层生成时间戳,然后将更新推送到数据库。我正在使用PetaPoco进行数据访问。

    什么可以导致多个记录同时记录?我的应用程序流量很小,实际上有时会在白天关闭,所以我觉得很难相信多个(最多三个)用户在同一时间完成了第3步。由于这是在一个过程中运行,我认为这是不可能的......

    这可能是什么原因?

    更新代码非常简单

    using (var db = this.DataContext)
    {
        db.Execute(Sql
            .Builder
            .Append("update dbo.SteppedProcess set Step3ProcessedOn = @0", DateTime.Now)
            .Where("Step3ProcessedOn is null")
            .Where("Id = @0", id));
    }
    

1 个答案:

答案 0 :(得分:1)

ASP.NET正在运行多个线程,即使在单个CPU上也是如此。所以可以发生。我想这更像是在您的情况下发生,因为在应用程序关闭后,它需要启动。在启动阶段进入的所有请求都会排队,并在您的应用程序可用后立即同时执行。这开辟了更大的机会之窗。

由于Windows时钟的分辨率约为15毫秒,因此同步请求很可能会获得相同的时间戳。