PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Scenariusze współbieżności z wkładkami

Twój problem sprowadza się do pytania „jaka powinna być blokada synchronizacji” . Z twojego pytania wynika, że ​​rezerwacja nie jest rezerwacją konkretnego przedmiotu. Załóżmy jednak, że użytkownik rezerwuje konkretny pokój hotelowy, więc musisz rozwiązać dwa problemy:

  • zapobiegaj overbookingowi (np. rezerwacja tego samego dla dwóch osób)
  • zapobiegaj błędnym obliczeniom stanu konta równoległego

Kiedy więc użytkownik dojdzie do momentu, w którym ma zamiar nacisnąć potwierdź przycisk, to możliwy scenariusz, który możesz wdrożyć:

  1. rozpocznij transakcję

  2. zablokuj wpis użytkownika, aby równoległe procesy były blokowane

    SELECT * FROM user FOR UPDATE WHERE id = :id

  3. ponownie sprawdź saldo konta i zrzuć wyjątek / wycofanie, jeśli nie ma wystarczających środków

  4. zablokuj przedmiot do zarezerwowania, aby zapobiec przepełnieniu

    SELECT * FROM room FOR UPDATE WHERE id = :id

  5. ponownie sprawdź dostępność rezerwacji i zrzuć wyjątek / wycofanie, jeśli pozycja jest już zarezerwowana

  6. utwórz wpis rezerwacji i odejmij środki z konta użytkownika

  7. zatwierdź transakcję (wszystkie blokady zostaną zwolnione)

Jeśli w Twoim przypadku nie musisz sprawdzać, czy nie ma overbookingu, po prostu pomiń / zignoruj ​​kroki 4 i 5.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę wstawić komentarze kolumn w PostgreSQL za pomocą Pythona?

  2. Czy mogę użyć polecenia \copy do funkcji postgresql?

  3. Używanie symfony z postgresql

  4. W obronie sar (i jak to skonfigurować)

  5. POSTGRESQL INSERT jeśli określona nazwa wiersza nie istnieje?