Size: a a a

Архитектура ИТ-решений

2020 October 05

PT

Peter Tugolukov in Архитектура ИТ-решений
Если я сделаю SELECT ... FOR UPDATE LIMIT 1, каждый клиент будет хотеть одну строку. Это уже с учетом того, что у меня индексы будут.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Но почему они будут хотеть разные строки, а не одну и ту же?
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Peter Tugolukov
Если я сделаю SELECT ... FOR UPDATE LIMIT 1, каждый клиент будет хотеть одну строку. Это уже с учетом того, что у меня индексы будут.
Они будут хотеть одну и ту же и ещё другие. Много других. И вы создаёте проблемы для тех кто хочет другие строки, а те кто хотят другие содают проблемы для тех кто вашу.
источник

BI

Boris Ibulaev in Архитектура ИТ-решений
Peter Tugolukov
Но почему они будут хотеть разные строки, а не одну и ту же?
Возможно разные товары, разные строки
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Gennadiy Kruglov
Они будут хотеть одну и ту же и ещё другие. Много других. И вы создаёте проблемы для тех кто хочет другие строки, а те кто хотят другие содают проблемы для тех кто вашу.
Если я сделаю limit 1, то клиент будет хотеть только одну строку.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Но загвоздка в том, что все клиенты хотят одну и туже строку.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Boris Ibulaev
Возможно разные товары, разные строки
Думаете?
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Вы не видите поблем, в том что блокируете больше записей чем нужно?
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Так я не блокирую больше чем нужно. У меня будет блокироваться одна запись. В этом нет проблемы.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Если есть индекс, блокируется одна.
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
И много у вас клиентов конкурируют за одну запись? Сколько времени занимает обновление флага у одной записи?
источник

Si

Sergey iscremas in Архитектура ИТ-решений
вам нужен order by random внутри группы
источник

BI

Boris Ibulaev in Архитектура ИТ-решений
Peter Tugolukov
Думаете?
Я предположил то, что имел в виду Геннадий: блочатся строки, которые касаются других товаров. Вы сейчас утверждаете, что при LIMIT 1 лочится одна строка (нюанс - так ли это?) и клиенты хотят только её.

Если одна строка за один товар отвечает и несколько клиентов пытаются его зарезервировать, то просадка логична. Нет?
Как если бы несколько рук сразу потянулось за одной булкой
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Sergey iscremas
вам нужен order by random внутри группы
Вооо. Но тут есть небольшой нюанс - может возникнуть ситуация, когда один и тотже пользователь захочет одну и туже запись.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Boris Ibulaev
Я предположил то, что имел в виду Геннадий: блочатся строки, которые касаются других товаров. Вы сейчас утверждаете, что при LIMIT 1 лочится одна строка (нюанс - так ли это?) и клиенты хотят только её.

Если одна строка за один товар отвечает и несколько клиентов пытаются его зарезервировать, то просадка логична. Нет?
Как если бы несколько рук сразу потянулось за одной булкой
Пользователь хочет один лотерейный билет из нескольких миллионов. Пользователю не важно, какой он будет. Но ему важно, что бы этот билет достался только ему.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Поскольку на сервере все это дело не в один поток обрабатывается, может возникнуть ситуация, когда сразу 100 юзеров придут и скажу - "дай билет". Так вот. SELECT FOR UPDATE очень сильно снизят пропускную способность.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Использование рэнд в группе повышает пропускную способность, но есть кейсы, когда у разных юзеров rand может выдать одну и туже строку. Но это уже что-то.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Может еще варианты есть?
источник

Si

Sergey iscremas in Архитектура ИТ-решений
Peter Tugolukov
Использование рэнд в группе повышает пропускную способность, но есть кейсы, когда у разных юзеров rand может выдать одну и туже строку. Но это уже что-то.
если товаров в группе больше, чем одновременных юзеров, мне кажется, этим уже можно пренебречь
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Возможно. Надо протестировать.
источник