У меня есть игровой сервер, который использует базу данных SQL для хранения/получения данных игрока. Игровой сервер имеет очередь ожидающих запросов/запросов базы данных, чтобы избежать блокировки опроса сетевых потоков. Если игроков слишком много, база данных становится напряженной и начинает замедлять запросы.Состояние базы данных между несколькими приложениями
Если у меня работает несколько серверов, то я опасаюсь, что один игрок может отключиться, и до того, как его информация будет сохранена в базе данных, тот же игрок подключится к другому игровому серверу (несколько комнат) и получит старую информацию, загруженную он проигрывает в игре).
Мне было интересно, есть ли способ управлять этим типом синхронизации между несколькими экземплярами приложения (игровыми серверами).
Я думал о транзакциях, но это все равно может вызвать проблемы, если очередь не будет быстро удалена (запросы, ожидающие ответа на серверную память, а не на сервере базы данных).
Создание «сервера базы данных», в котором все серверы игр соединяются и запрашивают операции с базой данных (таким образом, избегая нескольких очередей), это не вариант.
Предположим, что база данных отлично оптимизирована и решения должны быть выполнены на самом приложении.
Какие у меня варианты?
Вы по существу спрашиваете, как достичь [согласия] (https://en.wikipedia.org/wiki/Consistency_model) в распределенной системе. – user2079303
@ user2079303 любые известные решения? – WoLfulus
Многие, я бы ожидал. Я не изучал его, но это обширный предмет. Как наивное решение, моя первая попытка состояла в том, чтобы хранить временную метку всякий раз, когда данные игрока являются модификаторами. И всякий раз, когда игрок подключается, задайте все базы данных, есть ли у них новая метка времени, и при необходимости синхронизируйте. Это значительно замедляет начальное время соединения, а также синхронизирует часы серверов. – user2079303