Учитывая модели Django:
class ContainerOwner(models.Model):
id = models.IntegerField()
class Container(models.Model):
owner = models.ForeignKey(ContainerOwner)
Если вы вызовите .delete () для объекта «ContainerOwner», он будет каскадно удалять все объекты «Контейнера», принадлежащие этому «ContainerOwner».
Но я обнаружил, что в моем реальном проекте django бывают случаи, когда это каскадное удаление кажется неудачным.Кажется, что это происходит спорадически и когда система находится под большим объемом.Таким образом, вы получите объекты «Container», у которых нет действительного «ContainerOwner» после удаления «ContainerOwner» (это должно быть невозможно, «Containers» всегда имеет «ContainerOwner».)
Кто-нибудь виделэтот тип отказа раньше и можете объяснить, как это происходит?Может ли каскадное удаление быть уничтожено на полпути в процессе каскадного удаления приложением или сервером БД?
Обновления вопроса на основе обратной связи:
1) Мы используем myisam с MySQL
2) Мы используем delete queryset для удаления набора запросов «ContainerOwner»objects
3) MySQL backend
4) У нас есть очень распространенное действие, когда набор запросов Django объектов «ContainerOwner» удаляется сразу и все их объекты «Контейнера» также должныбыть удаленным.Это происходит десятки раз в день, и мы просто замечаем, что есть эти потерянные объекты «Контейнер», вызывающие ошибки приложения.Похоже, что очень очень небольшой процент удалений завершается неудачно, например, 0,01% удалений приводят к появлению некоторых сирот.