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

Помогите Оптимальный способ хранения данных

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

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

    MSArtyone Активный участник

    Баллы:
    61
    Добрый вечер, сейчас работаю над мини-игрой. Нужно каким-то образом хранить данные игроков.

    Вариантов несколько:
    1. Хранить данные всех игроков в одном файле .yml
    2. Для каждого игрока создавать отдельный файл .yml
    3. JSON
    4. SQLite

    Какой лучше выбрать? Пожалуйста, прокомментируйте свой выбор.
     
  2. TaoGunner

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

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    1. Безумие. Без комментариев;
    2. Никогда не пользовался yml, но если не требуется постоянно изменять этои конфиги, то вполне вариант хранить в файлах UUID-игрока.yml;
    3. Это подойдёт лучше, если хочешь выгружать какие-то данные игрока на страницы сайта;
    4. Опять же, только если не требуется часто менять параметры. Неизвестно что получится когда игроков 15 одновременно поменяют свои данные. Разве SQLite-база не блокируется при обращении? :confused:
    Я бы сделал хранение нативным, в NBT.
     
  3. Автор темы
    MSArtyone

    MSArtyone Активный участник

    Баллы:
    61
    Забыл уточнить, данные будут меняться каждую секунду.
     
  4. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Жестб какая) Чье мнение ты ретранслируешь то?

    А дефолтный MySQL чем не подошел?)
     
  5. Автор темы
    MSArtyone

    MSArtyone Активный участник

    Баллы:
    61
    Хотелось бы хранить данные на локальном уровне.
     
  6. NyanGuyMF

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

    Баллы:
    76
    Если нужно часто менять данные — просто кэшируй их в каком-нибудь отдельном классе и при необходимости каким-нибудь sheduler'ом и onDisable() выгружай их в файл/БД

    Я бы предпочел использование БД (любая - H2, MySQL, SQLLite) с каким-нибудь удобным фреймворком - Ebean (уже есть в Bukkit), Hibernate (слишком большой под плагин), ORMLite или какой-нибудь другой :D

    P.S. бд тоже можно использовать локально
     
  7. Автор темы
    MSArtyone

    MSArtyone Активный участник

    Баллы:
    61
    Огромное спасибо за совет, возьму на заметку))
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
  9. TaoGunner

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

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
  10. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ну удобно ему наверно для пары селектов и пары джойнов юзать ORM фрейм)

    Зачем ты еще раз свою эту чушь написал?
     
  11. NyanGuyMF

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

    Баллы:
    76
    Ну тут дело вкуса, я уже отвык писать boilerplate JDBC код :D
     
  12. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Оно и видно. Юзать MySQL для локальной базы.
     
  13. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Проблему jdbc бойлерплейта решают только через ORM?)
     
  14. NyanGuyMF

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

    Баллы:
    76
    Хочу сказать, что просто мне так удобно ;D
    Я использую H2 ¯\_(ツ)_/¯ Юзал бы Yaml да вот только через часа три плотной нагрузки сервер начал кидать FileSystemException: too much files open
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну дык не держи открытыми 90000 файлов. Прочел конфиг и все держи в памяти, сохранил когда игрок вышел.
     
  16. NyanGuyMF

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

    Баллы:
    76
    Вот тут у меня и была ключевая проблема, хотел закрыть, но не было способа — опять же использовал какой-то фреймворк, но это уже совсем другая история :D Признаюсь, там скорее я рукожоп, чем YAML — плохой вариант)
     
  17. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    В стандартном YamlConfiguration закрывает файлы после чтения. Нехрен говно юзать.
     
  18. dimkaS

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

    Баллы:
    76
    Имя в Minecraft:
    dimkaS
    Yaml/SqlLite
     
  19. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Лучше уж H2 чем SQLite (+ пулы с HikariCP). Быстрее, работает многопоточно без траблов (именно нормальная многопоточность, а не через блокировки файла, как SQLite).
     
  20. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Не согласен. Для юзеров самое лучшее это по файлу на игрока. Ибо записей может быть очень много.
    Так мы сможем одинаково быстро работать хоть с миллиардом записей юзеров.
     
    Последнее редактирование: 16 апр 2019

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