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

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

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

Его партнер решает зайти в другой магазин и начинает покупать товары по тому же списку.

Как вы собираетесь обеспечить, чтобы они не покупали двойные данные или, что еще важнее, чтобы они не испортили данные полностью?

Простая блокировка по принципу "первый пришел - первый обслужил", дающая второму пользователю права только на чтение? Или есть более гибкий способ?

И если лучший способ - это блокировка, то насколько много postgresql делает для вас?

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

У меня есть что-то вроде таблицы 'products', в которой есть 'name' и 'quantity'.

Когда кто-то делает покупки - он/она будет видеть все товары, где 'quantity' не равно нулю. Когда он / она покупает что-то, он / она будет указывать, сколько этого продукта он купил, и мы добавим в Postgres проверку, что значение не может быть меньше нуля, когда мы вычитаем количество купленного.

Таким образом, допустим, у вас есть товар "морковь" и количество "5", когда два человека отмечают, что купили 4 морковки, у одного это получится, а другой получит ошибку, что значение не может быть меньше 0. Поэтому мы следим за тем, чтобы количество купленного никогда не превышало количество необходимого/перечисленного.

Вернуться на верх