Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вопрос на собеседовании, на которое я не смог ответить

Viksul Ur Shasta Ученик (137), на голосовании 3 года назад
Имеется интернет магазин, одного товара есть в наличии, но в единичном экземпляре, что будет если два покупателя ОДНОВРЕМЕННО (с точностью иоктосекунды ( 10^(-24)с. ) попробуют сделать заказ на этот товар. Предположим база данных mysql(innodb), магазин на php.
Как бы вы реализовали функционал, который решил бы эту задачу?
Голосование за лучший ответ
viv2537 Оракул (88409) 3 года назад
запросам выдавать номер и всё. какой первый обработает, тот и пройдёт
Максим Искусственный Интеллект (213336) 3 года назад
Транзакции.
Viksul Ur ShastaУченик (137) 3 года назад
А точнее?
Максим Искусственный Интеллект (213336) Viksul Ur Shasta, а точнее изолированность транзакций. Но у каждой базы данных свои механизмы и уровни изолированности. Нужно смотреть возможности mysql.
Редис Александрович Оракул (79331) 3 года назад
Мы бы так решили этот вопрос. Встали, дали подзатыльник экзаменатору и пошли пить кофе посмеявшись с иоктосекунды.
Viksul Ur ShastaУченик (137) 3 года назад
иоктосекунду это я уже добавил для зрелищности)))
Редис Александрович Оракул (79331) Viksul Ur Shasta, там вроде на такой случай у базы должна быть что то вроде блокировки и она скорей всего реализуется на уровне самой базы, но поидее можно и ручками добавит. Наверное они хотели от тебя услышать, что надо запись обернуть в транзакцию с блокировкой.
Jurijus Zaksas Искусственный Интеллект (445796) 3 года назад
Мне похрену, сколько товара на складе. Я его сначала продам, а потом буду решать проблемы дозакупок товара или отмены заказов. Именно так работают настоящие магазины.
H-p AПросветленный (47008) 3 года назад
Особенно в доставке еды :) Будете дозакупать неделю... и через неделю торжественно привезете заказ.
Jurijus Zaksas Искусственный Интеллект (445796) Все делается в разумное время. Я каждую неделю заказываю еду с доставкой на следующий день. Если с какой-то позицией какие-то проблемы, магазин пришлет альтернативный товар либо отменит позицию, не проблема.
H-p AПросветленный (47008) 3 года назад
Я, например, если услышу в звонке "Извините, тут этого товара в наличии не оказалось", могу и матом обложить.
Юрий Семыкин Искусственный Интеллект (205028) 3 года назад
Несколькими способами. Один - ввести уровень, после которого выдаётся предупреждение о "рискованности" операции - наиболее предпочтительное решение.
Второй - действительно "забить". Не может товар быть продан одновременно (запросы в очереди стоят). Но! Узнать можно будет после получения результата (связь должна быть, а её быват, что не бывает)
...
Похожие вопросы