Проблема — дублирование не уникального id при асинхронных операциях; Контекст — работа с реляционной базой данных и столбцами tid (уникальное оборудование), id (уникальный id), cmdid (не уникальный id в рамках оборудования); Цель — обеспечение уникальности значения cmdid в пределах tid (уникальное оборудование). Чтобы гарантированно избежать дублирования не уникального id (cmdid) при асинхронных операциях, нужно использовать механизмы синхронизации и атомарного генерирования значений на уровне СУБД. Ниже — основные подходы. Рекомендуемые решения Используйте встроенную функциональность СУБД для генерации уникальных значений. Но автоинкрементное значение в рамках данной архитектуры не подойдет Для PostgreSQL: CREATE SEQUENCE {tid}_cmdid_seq; INSERT INTO table_name (tid, cmdid) VALUES (605009, nextval('{tid}_{tid}_cmdid_seq')); Для MySQL/MariaDB: ALTER TABLE table_name MODIFY cmdid INT AUTO_INCREMENT; Для SQL Server: ALTER TABLE table_name ADD CONSTRAINT DF_cmdid DEFAULT NEXT VALUE FOR c
Предотвращение коллизий не уникального id при параллельных транзакциях: практики БД
2 дня назад2 дня назад
1
2 мин