Я немного почесал голову над элегантным решением для решения этой проблемы (которая, кажется, не так уж много решена).
Мне нравится плавность паттерна Active Record , но, похоже, он очень чувствителен к условиям гонки, поскольку вы можете иметь одновременно сотни независимых "авторитетных" копий состояния (с занятым достаточно веб-приложения).
Например, что если у меня есть страница, которая дает игрокам очки с кодом, подобным этому:
$user = User::fromUsername($username);
$user->points++;
$user->save();
... и другая страница, которая вычитает баллы, например:
$user = User::fromUsername($username);
$user->points -= 100;
$user->save();
Что произойдет, если обе эти страницы будут вызваны практически одновременно? Я полагаю, что если они будут выполнены в правильном порядке (полностью последовательно), все будет работать нормально, однако, что если вторая страница считывает состояние из базы данных до того, как первая запустится, а затем сохраняет?
Возможно ли даже решить эту проблему в ActiveRecord? Каковы лучшие методы для смягчения этого (блокировки везде?)
Спасибо.