我正在将django 1.10与MySQL 5.7一起使用。
我有一个表,该表在多列上具有unique_together约束。但是这些列中很少有可为空的。因此,对于任何这些字段中的空条目,都不能确保数据库级别的唯一性。
我正在使用create_or_update方法来确保应用程序级别的行的唯一性。但是在竞争条件下,即使这样也不能确保唯一性,因为系统是水平缩放的,并且多个进程正在同时尝试调用create_or_update函数。
我认为对于大多数高级服务来说,这应该是非常正常的用例。我们如何处理这个问题?
根据我的想法,我的选择可以是:
我认为这两个选项都不合常理。这里通常遵循的最佳做法是什么?
您的选择不可行:
在某些情况下,django中的文本字段不为NULL,除非您指定null=True
,否则为空字符串,无论如何,您应该这样做:)
我认为您应该分析模型的商务规则,可能您选择的错误字段是唯一的。
如果您在应用程序级别中进行功能检查,则需要指定它是事务,因为它可能引发错误