Как спроектировать одновременный дисконтный движок? - PullRequest
0 голосов
/ 23 июля 2011

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

В моей системе пользователям могут быть выделены кредиты на покупку, которые позволяют им покупать вещи бесплатно. Так, например, пользователь выберет корзину продуктов, которая передается в систему скидок, где правила будут применяться на основе кредитов, назначенных учетной записи пользователя. Скажем, у пользователя есть 5 кредитов, как я могу гарантировать, что кредит можно использовать один раз и только один раз? Нужно ли вводить какую-либо форму блокировки базы данных? Буду ли я хранить количество кредитов в одной таблице или создать отдельные записи для моделирования каждого кредита?

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

Надеюсь, у меня есть хоть какой-то смысл!

1 Ответ

0 голосов
/ 23 июля 2011

Просто мы используем базу данных SQL, которая не сосет транзакции, вставим операцию использования кредита в одну транзакцию (возможно, если БД ограничит число кредитов до неотрицательного или чего-то подобного), и это должно невозможно для двух одновременных транзакций использовать один и тот же кредит. Базы данных действительно хороши в таких вещах, это как раз то, для чего они нужны.

По сути, просто добавьте все данные в базу данных и операции переноса, которые выполняются вместе в транзакции, и ваш интерфейсный код может просто притвориться, что параллелизма нет вообще. Что, конечно, и есть единственная причина, по которой СУБД существуют.

РЕДАКТИРОВАТЬ: Ваша схема не повлияет на правильность этого подхода (хотя там, где вы начнете / закончите транзакции), это повлияет на вашу производительность, а также как будет реализована БД. Я поднял этот вопрос только потому, что вы пометили вопрос «базой данных» и, похоже, не знаете, что БД ACID просто сделает то, что вы хотите, если вы правильно напишите свои запросы.

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