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

Помогите Лучший способ хранения данных

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

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

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

    Баллы:
    76
    Всем привет.
    Вопрос только о файловом хранении.
    Допустим, мне надо хранить одну строку для каждого игрока.
    Код:
    Kurumi: true
    Как лучше сделаьь: на каждого игрока создавать по файлу с одной строкой или сделать один файл, где хранить одну строчку.
    Попрошу объяснить свой совет. Спасибо!
     
  2. alexandrage

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

    Баллы:
    173
    по файлу с одной строкой
     
  3. Автор темы
    Kurumi

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

    Баллы:
    76
    Чем отличается от второго способа? Почему именно этот лучше
     
  4. Jampire

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

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    Что бы изменить информацию одного игрока тебе нужно сохранить файл (предварительно, возможно, прочитав его) со всеми игроками которые когда либо были на сервере.

    Используя один файл под игрока ты читаешь и сохраняешь лишь то, что тебе в текущий момент нужно и сложность доступа не меняется в зависимости от количества игроков.
     
  5. alexandrage

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

    Баллы:
    173
    Поймешь, когда начнешь работать с лямами записей. Начнем с того, что файл нужно весь считать и потом записать обратно. Ну и все это будет загружаться в память сервера.
     
  6. Jampire

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

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    а потом он захочет написать какие нибудь топы на основе информации в миллионе файлов. на этот экшон я бы посмотрел :D
     
  7. Автор темы
    Kurumi

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

    Баллы:
    76
    А если это всё делать в асинхроне ?
     
  8. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Это едва ли поможет. Можно подумать что под "асинхроном" подразумевается суперкомпьютер. Будут использоваться те же ресурсы, только не забивая при этом основной поток. Лучшее решение в твоём случае - использовать бд: redis или h2, если хранить нужно локально, или mysql если серверов несколько. И, как уже заметили выше, в бд можно хранить только тех, у кого параметр включён.
     
  9. Автор темы
    Kurumi

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

    Баллы:
    76
    Значение boolean в моём примере было абстрактеым.
    На деле мне нужно хранить значение типа string.
    Игроков будет достаточно много, поэтому и появился вопрос производительности
     
  10. Автор темы
    Kurumi

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

    Баллы:
    76
    Еще такой вопрос...
    Разве при включении сервер не записывает себе в память содержимое файла?
    Если это так, то почему нельзя при запуске плагина подгружать инфу , шаманить с ней в коде, а при выключении сохранять обратно?
     
  11. alexandrage

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

    Баллы:
    173
    Это не практично. Как часто у тебя будут играть все лям игроков из списка? Никогда)
    Да и читать и писать километровый файл каждый раз, когда там накопится дохрена записей. Ты когда нибудь заглядывал в папку плееров? Там лежит огромный общий файл с игроками?
     
  12. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Все верно. И то, что ты написал вполне возможно сделать, но, может возникнуть ситуация, когда, например, сервер просто упадёт. И, скорее всего [я не проверял такое :D], информация не успеет сохранится.
    Другое дело, если информация будет периодически (или вообще постоянно) записываться в бд.
     
  13. alexandrage

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

    Баллы:
    173
    Это тоже не имеет смысла, писать подобные записи в sql базах. Если только их не надо где то еще получать помимо одного сервера..
     
  14. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Речь не обязательно о sql. Можно использовать redis, например. Или h2. В обоих случаях они будут эффективнее, чем использование файла(ов).
     
  15. alexandrage

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

    Баллы:
    173
    Нет) redis будет хавать для базы озу системы + файл. H2 тот же файл по сути и тоже крутится в озу сервера. Все это имеет избыточный функционал без надобности.
     
  16. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Скорость записи / чтения то совсем разная. При условии что он будет считывать и записывать сразу в файл при изменении данных, а не сохранять данные только при выключении плагина.
     
  17. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    а далеко ходить не надо. Essentials и топ по балансу
     
  18. alexandrage

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

    Баллы:
    173
    Ага ага. Что то файлики с игроками быстро работают, подозрительно.
     
  19. alexandrage

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

    Баллы:
    173
    +1 Всего то подождать немного приходится на первом запросе.
     
  20. Автор темы
    Kurumi

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

    Баллы:
    76
    Хорошо, я вас понял. Спасибо!)

    У меня есть ещё один вопрос, не касающийся этой темы. Чтобы не плодить ещё одну тему, спрошу тут...
    Я хочу добавить на сервер немного реалистики. Для этого я хочу, чтобы игрок мог пользоваться ТОЛЬКО слотами быстрого доступа (первые 9 слотов, которые предназначены для руки). То есть, хотелось бы как-то ограничить действия игроков с остальным своим инвентарём. Как это можно реализовать? Спасибо)
     

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