【发布时间】:2020-03-30 09:44:08
【问题描述】:
我正在使用 django 1.10 和 MySQL 5.7。
我有一个对多列有 unique_together 约束的表。但是这些列中很少有可以为空的。因此,对于任何这些字段中的空条目,都不能确保 DB 级别的唯一性。
我正在使用 create_or_update 方法来确保应用程序级别的行的唯一性。但是在竞争条件下,即使这样也不能确保唯一性,因为系统是水平扩展的,并且多个进程同时尝试调用 create_or_update 函数。
我认为这对于大多数大规模服务来说应该是一个非常正常的用例。我们如何解决这个问题?
根据我的想法,我的选择可以是:
- 保存字符串而不是保持条目可为空。 (但它是一个外键字段)。
- 根据唯一性列的字段保存格式化字符串并检查其唯一性。
我觉得这两个选项都不直观。这里通常遵循的最佳做法是什么?
【问题讨论】:
标签: mysql django concurrency thread-safety scalability