conditions?
Есть множество асинк процессов вставляющих документы в таблицу по уникальному ключу.
В разных процессах часто встречается один и тот-же документ.(Тут не избежать этого)
Перед вставкой документа проверяется наличие документа в таблице, если не находит, то создается запись.
Для того, чтобы избежать Unique violation при вставке, выборка и вставка оборачивается в транзакцию с пессимистичной блокировкой и несколькими ретраями при исключении.Такая схема работает, но просела неплохо так производительность. Htop показывает долгие idle.
Какие есть еще варианты решения?
Можно upsertы попрбовать, у мускуля это ON DUPLICATE KAY UPDATE
не, апсерт не подходит, т.к. мне нужен объект из таблицы
мьютекс
advisory locks? или на стороне редиса например?
инсерт игнор и проверяй варнинг лог, если надо проверить что инсерт провел другой конкурентный запрос
Я уверен что у него просто нету лока там где он нужен 🗿
лок стоит на выборку
Обсуждают сегодня