Я пытаюсь выполнить (что я думаю) довольно простая модель данных для счетчика:Атомные операции в Джанго?
class VisitorDayTypeCounter(models.Model):
visitType = models.CharField(max_length=60)
visitDate = models.DateField('Visit Date')
counter = models.IntegerField()
Когда кто-то приходит через, он будет искать строку, которая соответствует visitType и visitDate; если эта строка не существует, она будет создана с помощью счетчика = 0.
Затем мы увеличиваем счетчик и сохраняем.
Я обеспокоен тем, что этот процесс является полностью гоночным. Два запроса могли одновременно проверять, существует ли объект, и оба из них могут его создать. Между чтением счетчика и сохранением результата может пройти другой запрос и увеличить его (что приведет к потере счета).
До сих пор я не нашел хороший способ обойти это ни в документации Django, ни в учебнике (на самом деле, похоже, что у учебника есть условие гонки в части Vote).
Как это сделать безопасно?
unique_together, конечно, заставляет меня чувствовать себя немного более комфортно. Вероятно, на этом не будет достаточно трафика, чтобы заставить гонку попасть, но поскольку я изучаю Django в то же время, я решил, что хочу «сделать это правильно». Спасибо за помощь! – 2008-11-11 06:07:58
Да, я тебя слышу. Может быть, кто-то еще здесь будет знать об ORM-функции для обработки этого или может прояснить, являются ли некоторые из встроенных модулей безопасными для этого сценария. – 2008-11-11 06:35:07