Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Метод хранения используемых данных

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

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

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

    Баллы:
    61
    Имя в Minecraft:
    ZENEGIX
    Всем доброго времени суток. Я относительно недавно пишу плагины, до недавнего времени не было вопросов про "а хватит ли мне ОЗУ, и много ли будет его использоваться", ибо считал, что плагины не такие уж и большие, а зря. Переписал все плагины свои под БД, в ОЗУ храню, разве что пару HashSet'ов и пару массивов строк. Меня все устраивает, задержки нет. Не задавал бы такой вопрос, если бы не хотел написать плагин для паба. Знакомые с другого сервера жалуются на WClans (Автор Jampire) на то, что он жрет много ОЗУ. В мыслях уже есть сделать две версии плагина, с хранением данных в ОЗУ и сохранении их в БД и полное использование БД. Насколько это вообще целесообразно? Или не стоит париться и использовать ОЗУ? Не бросайте помидорами, кх. Всем спасибо хотя бы за то, что прочли. Всем добра, жду ответов :3
     
  2. Хостинг MineCraft
    <
  3. Jampire

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

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    в моем WClans была ошибка, из за которой он накапливал ResultSet в памяти. со временем это приводило к нехватке ОЗУ

    проблема так и не была решена, ибо контакт с заказчиком был потерян. позже плагин был слит.

    так-же от себя добавлю, что хранение копии датасета в памяти является лучшим решением как минимум по причине того, что из за любого изменения не нужно долбить базу. это хорошо когда запросов 50 - 100 в секунду. а когда плагином пользуется активно 2к+ человек одновременно это может вызывать проблем и очереди в базе в случае, если она настроена не правильно.

    ну и естественно еще в зависимости от того, как осуществляется общение с базой - могут возникать лаги на самом сервере. много видел таких плагинов, которые общаются с базой в основном потоке не используя даже банальные таски
     
  4. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    При 2к онли конечно же не хватит одной таблици. Тут придется распределять.
     
  5. Автор темы
    zenbot

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

    Баллы:
    61
    Имя в Minecraft:
    ZENEGIX
    Такое дело, я взял класс MySQL с твоих сурсов bClans, и использую его во всех своих плагинах, где нужна база. К примеру, на моем сервере с 100 онли примерно, стоит плагина 2-4, которые активно юзают БД, лагов особых не вызывает, вроде как. Один из таких плагинов, кланы, основная идея взята от твоих кланов, но переписано много...
    Ладненько, насколько я понял, лучше всего использовать ОЗУ
    Спасибо за ответы :3
     
  6. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    В кланах только одно будет грузить, это когда запрос на топ делать, вот его стоит в мапе хранить. Ну и инфу о клане игроков онлайн, чтоб не лезть в базу при клан чате и тп
     
  7. Jampire

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

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    крайне не советую использовать мой старый MySQL класс как раз по причине жесткой утечки памяти. там банально нет ResultSet.close()
     
  8. Автор темы
    zenbot

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

    Баллы:
    61
    Имя в Minecraft:
    ZENEGIX
    О как. А нельзя ли у тебя попросить новый MySQL, на крайняк купить?[DOUBLEPOST=1484407595,1484407515][/DOUBLEPOST]
    У меня при любом использовании /c(clan) идет запрос к бд, как минимум запрашивается название клана, для его вывода, ну и проверка есть ли он вообще, а так же у меня ранги сделаны, а это еще запросы...
     
  9. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Ну ты делай запрос на клан и пиши его во временный хешмап. Какое то время он будет в кеше и запросов не будет.[DOUBLEPOST=1484408316][/DOUBLEPOST]Ну и обновляй маму при изменениях, удалениях кланов, пока мапа живет.[DOUBLEPOST=1484408486][/DOUBLEPOST]И не держи в озу лишнюю инфу. Ибо если ты сделаешь executeQuery("SELECT * FROM clan_list"); то сам понимаешь, писец будет если там овермиллион кланов.
     
  10. Jampire

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

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

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

    Баллы:
    46
    Ну, если записей много, то SELECT тоже неплохую погоду сделает.А на счёт фильтрации, то её лучше делать на этапе выборки, то есть при SQL запросе, это и количество получаемых данных(нагрузку) уменьшит, и дальнейшей фильтрации не нужно.
     
  12. Автор темы
    zenbot

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

    Баллы:
    61
    Имя в Minecraft:
    ZENEGIX
    Насчет овермного кланов, в планах сделать автоудаление неиспользуемых кланов
     

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