довольно частая задача, допустим, чтобы имя сущности никогда не повторялось.
Обычной проверки при обновлении сущности в рамках атомарной транзакции, конечно же, не достаточно, потому что она обламывается при состоянии гонки. Т.е. если мы посылаем два запроса с одинаковым именем на создание/обновление двух сущностей, эти входящие данные одновременно успешно валидируются, и далее так же успешно сохраняются.
Чтобы решить это проблему я могу:
а) Добавить уникальный индекс в БД на поле с именем, и обрабатывать падение на этапе сохранения сущностей.
Такое решение требует предварительного исправления существующих данных перед созданием индекса.
б) Оборачивать операцию валидации и сохранения в лок, допустим, на стороне БД get_lock()/release_lock(), со специфичным ключом типа <имя бд>_<имя таблицы>_<значение поля с именем>.
Какие ещё есть идеи из вашей практики?
https://www.php.net/manual/ru/function.uniqid.php
найпростіший спосіб - юнік індекс у бд
Так ты ж можешь индекс на несколько полей навестить
Это никак не связано с мои вопросом.
оО ти спитав якими способами користуються. Я сказав, що користуюсь найпростішим - юнік індексом у бд
Обсуждают сегодня