1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Ken12345, 18 ноя 2023.

  1. Автор темы
    Ken12345

    Ken12345 Участник Пользователь

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

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

    Извиняюсь, если придумал какой-то костыльный бред, в синхронизации я пока не силен.
     
  2. OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

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

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