【发布时间】:2010-09-21 18:13:10
【问题描述】:
我正在尝试为计数器实现(我认为是)一个非常简单的数据模型:
class VisitorDayTypeCounter(models.Model):
visitType = models.CharField(max_length=60)
visitDate = models.DateField('Visit Date')
counter = models.IntegerField()
当有人通过时,它会寻找与 visitType 和 visitDate 匹配的行;如果该行不存在,将使用 counter=0 创建。
然后我们增加计数器并保存。
我担心这个过程完全是一场竞赛。两个请求可以同时检查实体是否存在,并且它们都可以创建它。在读取计数器和保存结果之间,可能会出现另一个请求并增加它(导致计数丢失)。
到目前为止,无论是在 Django 文档中还是在教程中,我都没有真正找到解决这个问题的好方法(实际上,看起来教程的投票部分有竞争条件)。
我如何安全地做到这一点?
【问题讨论】:
标签: database django concurrency locking race-condition