Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Optymalizacja logiki MySql

Problem polega na tym, że próbujesz użyć blokowania na poziomie MySQL, aby upewnić się, że bilet nie może być przypisany do więcej niż jednej osoby. W ten sposób nie ma możliwości wykrycia, czy bilet jest zablokowany przez użytkownika.

Zaimplementowałbym blokadę na poziomie aplikacji, dodając 2 pola związane z blokadą do tabeli biletów:znacznik czasu, kiedy blokada została nałożona i pole identyfikatora użytkownika informujące, który użytkownik posiada blokadę. Pola związane z blokadą mogą być przechowywane w innej tabeli (do tego celu można na przykład użyć koszyka na zakupy).

Kiedy użytkownik wybiera bilet, próbujesz zaktualizować te pola blokady za pomocą warunkowej instrukcji aktualizacji:

update tickets
set lock_time=now(), lock_user=...
where ticket_id=... and lock_time is null

Wartości zamiast ... są dostarczane przez Twoją aplikację. lock_time is null Kryteria mają na celu upewnienie się, że jeśli bilet został już wybrany przez innego użytkownika, to późniejszy użytkownik nie ominie blokady. Po oświadczeniu o aktualizacji sprawdź liczbę wierszy, których to dotyczy. Jeśli tak, to obecny użytkownik nabył blokadę. Jeśli jest 0, ktoś inny zablokował bilet.

Jeśli masz dane blokujące w innej tabeli, umieść unikalne ograniczenie w polu identyfikatora biletu w tej tabeli i użyj INSERT, aby uzyskać blokadę. Jeśli wkładka się powiedzie, zamek jest nabywany. Jeśli to się nie powiedzie, inny użytkownik zablokował bilet.

Blokada jest zwykle utrzymywana przez kilka minut, po czym aplikacja musi zwolnić blokadę (ustawić pola blokowania na puste lub usunąć rekord blokujący z innej tabeli).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP Sortowanie najbliższych współrzędnych

  2. Mysql Połącz dwie kolumny podczas wyszukiwania za pomocą LIKE

  3. MySQL - operator BETWEEN z FLOAT(10,6) zachowuje się jak> i <, zamiast>=i <=

  4. Wybierz inkrementowaną liczbę całkowitą

  5. Tabela przestawna MySQL z dynamicznymi nagłówkami na podstawie danych w jednej kolumnie