Предотвращение условий гонки для приложения электронной коммерции с MySQL - PullRequest
2 голосов
/ 24 февраля 2011

Я создаю приложение электронной коммерции с MySQL, но мне трудно найти решение, которое предотвращает следующие условия гонки:

Два пользователя одновременно оформляют заказ с одним и тем же предметомв их корзине.В магазине есть только один предмет, доступный для продажи.Один пользователь должен иметь возможность приобрести последний товар, а другой пользователь должен увидеть сообщение об ошибке, потому что товара нет в наличии.

Я использую счетчик товаров, чтобы отслеживать количество товаров винвентарь, поэтому я решил, что просто уменьшу элемент после обработки кредитной карты пользователя.

Я знаю о запросе SELECT...UPDATE в MySQL, но я бы хотел избежать блокировки строк или таблиц - если это действительно лучший способ для приложения электронной коммерции решить эту проблему.

Мне также интересно услышать другие решения, кроме проверки / уменьшения счетчика предметов.

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Почему беспокоятся о блокировке.Это не повредит вам, пока у вас не будет сотен одновременных клиентов одновременно, а механизмы баз данных, такие как innodb, созданы для того, чтобы справляться с этими проблемами.Вы не сможете выйти из какой-то атомарности и обходного пути.

Вам необходимо сохранить управление транзакциями на уровне приложения.

   checkout 
   reserver_the_items_in_cart
   if(reservation_succesfull){
     get_the_payments_done_via_payment_gatway
     if(payment_successful) {
        update_the_reserverd_to to sold_status      
     }else{
         make_reserved_item_to_available.      
     }
   }else{
      show_error_that_item_not_available.
   }

Другой лучший способ справиться с этим - никогда не разрешать "show_error_that_item_not_available" произойдет.Пополните инвентарь вовремя, когда он начал заканчиваться.

0 голосов
/ 08 января 2014

То, как я об этом 1. проверить наличие книг X 2. если есть книги X, сделайте заказ 3. проверьте наличие еще раз, если наличие в порядке, тогда все в порядке ... если наличие отключено, я отменяю заказ и уведомляю клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...