Перво-наперво: когда дело доходит до продажи товаров (электронной коммерции), вам действительно нужна поддержка транзакций. Это в основном исключает любой тип NoSQL-решений, таких как MongoDB или Cassandra.
Таким образом, вы должны использовать базу данных, которая поддерживает транзакции. MySQL делает, но не в каждом механизме хранения. Убедитесь, что вы используете InnoDB, а не MyISAM.
Конечно, многие популярные базы данных поддерживают транзакции, поэтому вам решать, какую из них выбрать.
Почему транзакции? Потому что вам нужно выполнить кучу обновлений базы данных, и вы должны быть уверены, что все они выполнены успешно как одна атомарная операция. Например:
1) убедитесь, что билет доступен.
2) Уменьшить количество доступных билетов на один
3) обработать кредитную карту, получить одобрение
4) записать детали покупки в базу данных
Если какая-либо из операций не удалась, вы должны откатить предыдущие обновления. Например, если кредитная карта отклонена, необходимо откатить уменьшение доступного билета.
И база данных заблокирует эти таблицы для вас, поэтому нет никаких изменений в том, что между шагами 1 и 2 кто-то еще пытается купить билет, но количество доступных билетов еще не уменьшилось. Таким образом, без блокировки таблицы возможна ситуация, когда останется доступным только 1 билет, но он будет продан двум людям, поскольку вторая покупка началась между этапом 1 и этапом 2 первой транзакции.
Важно, чтобы вы это поняли, прежде чем приступить к программированию проекта электронной коммерции