Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Потеря данных в БД

Ken12345

Активный участник
Пользователь
Баллы
61
У меня есть класс PlayerInstance, в объектах которого я храню кеш онлайн игроков и обновляю их используя synchronized. При обновлении каких-то важных параметров (очки, валюты и прочая статистика), я хочу обновлять и БД, чтобы не было откатов, если сервер вдруг ляжет. Нужно ли создавать некий DBExecutor для каждого игрока и выполнять все действия через него, захватывая его synchronized, или потеря данных невозможна? Например, если игроку одновременно придет валюта с разных источников. Это же касается и оффлайн игроков, у которых нужно будет не только обновлять, но и брать информацию через select.

И ещё вопрос, как лучше обновлять мой PlayerInstance? Я не хочу, чтобы в момент set работали методы get, но поля у него в основном byte, которые не захватывает synchronized. Если захватывать весь объект, то сервер будет много ждать, думаю, ведь все завязано на PlayerInstance. Может лучше сделать для каждого поля свой класс и захватывать объекты (вместо byte)?

Извиняюсь, если придумал какой-то костыльный бред, в синхронизации я пока не силен.
 
Если боишься за потерю данных, то лучшим вариантом будет раз в 10 минут сохранять всех онлайн игроков с кэша в базу.
Естественно при выходе тоже сохраняешь. Получение данных с базы делаешь только при входе, сохраняешь их себе в кэш, там же и обновляешь, следовательно, оттуда и получаешь данные.
 

Поделиться этой страницей

Назад
Верх