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

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

Discussion in 'Разработка плагинов для новичков' started by zenbot, Jan 11, 2017.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Share This Page