Mysql
 sql >> база данни >  >> RDS >> Mysql

MySql логическа оптимизация

Проблемът е, че се опитвате да използвате заключване на ниво MySQL, за да гарантирате, че билетът не може да бъде присвоен на повече от един човек. По този начин няма начин да се установи дали билетът е заключен от потребител.

Бих внедрил заключване на ниво приложение, като добавя 2 свързани с заключване полета към таблицата с билети:клеймо за време, когато е приложено заключването и поле за потребителски идентификатор, което ви казва кой потребител държи заключването. Свързаните с ключалката полета могат да се държат в друга таблица (за тази цел може да се използва например пазарска количка).

Когато потребител избере билет, вие се опитвате да актуализирате тези полета за заключване с условно изявление за актуализиране:

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

Стойности на мястото на ... се предоставят от вашето приложение. lock_time is null критериите са налице, за да се гарантира, че ако билетът вече е избран от друг потребител, тогава по-късният потребител няма да отмени заключването. След изявлението за актуализиране проверете броя на засегнатите редове. Ако е един, тогава текущият потребител е получил заключването. Ако е 0, значи някой друг е заключил билета.

Ако имате данните за заключване в друга таблица, поставете уникално ограничение върху полето за идентификатор на билета в тази таблица и използвайте вмъкване, за да получите заключване. Ако вложката е успешна, тогава ключалката се придобива. Ако не успее, значи друг потребител е заключил билета.

Заключването обикновено се задържа за няколко минути, след което приложението ви трябва да освободи заключването (задайте нула на заключващите полета или да изтриете заключващия запис от другата таблица).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Алтернатива на много булеви стойности в MySQL?

  2. Неизвестна таблица в MULTI DELETE

  3. производителност на socket.io едно излъчване на ред в базата данни

  4. Как да намерите дубликати в 2 колони, а не в 1

  5. Python, Brew и MySQLdb