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