Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавить топ плохих игроков #25

Open
mrfiveV opened this issue Aug 17, 2024 · 4 comments
Open

Добавить топ плохих игроков #25

mrfiveV opened this issue Aug 17, 2024 · 4 comments

Comments

@mrfiveV
Copy link

mrfiveV commented Aug 17, 2024

  • Добавить возможность отображать не только топ хороших игроков, но и плохих. (К сожалению моя ветка в MR неактуальна с вводом кэша)
  • Добавить время последней активности игрока в базу данных чтобы загружать в кэш только более менее активных (Добавить в конфиг настройки включения данной функции в время неактивности (Можно по умолчанию 1 неделю))
    Со временем игроков наберется огромное количество, но многие из них будут мертвые души, что скажется на производительности (Каждый раз грузить и хранить в памяти условно 10000 записей при активном среднем онлайне ~50 это расточительство)
@iBuseWinner
Copy link
Owner

Добрый день)

Первый пункт у меня записан, но когда возьмусь за реализацию пока не знаю.

Есть вопрос по второму пункту: какие цели вы преследуете в данном обновлении?
Я вижу проблему с защитой от накрутки через мультиаккаунты. Сидит какой-то игрок, выходит с сервера, его не выписывает из кэша в течение недели (так оно должно работать?), перезагружает роутер (или другими способами меняет свой ip адрес, не важно, какими), заходит под другим ником и выдаёт репутацию себе, повторяя вход под другими никами и выдачи репутации на свой основной аккаунт. Как тогда избавляться от этого способа накрутки?

@mrfiveV
Copy link
Author

mrfiveV commented Aug 17, 2024

Имеется ввиду в основной топ не будет загружаться информация об аккаунтах, если время последней активности (захода в игру) будет больше чем N дней. Сами записи остаются в БД
Можно доп условие - не загружать в кэш игроков, у которых репутация в определенном диапазоне (настраивать в конфиге) и активность была давно.
Например, диапазон репутации настроен от -5 до +5 и время последнего входа в игру 1 неделя.
Игрок qwerty имеет репутацию 1 и не заходил месяц - типичный однодневка.
Его вычеркиваем из списка пока он вдруг не зайдет.
На проекте за день может пройти условно 300 игроков которые не задержатся и хранить их в кэше однажды может стать затратным. Может быть это будет редкий случай, но кому-то да поможет сэкономить ресурсы./
Повторюсь - сделать это условие настраиваемым (может кому-то пофиг на ресурсы)

@iBuseWinner
Copy link
Owner

В топ загружается только N игроков из базы данных, N настраивается в конфиге (topAmount).
Источник - https://github.com/iBuseWinner/Reputation/blob/master/src/main/java/ru/fennec/free/reputation/handlers/players/PlayersContainer.java#L120

Топ обновляется каждые T тиков. T настраивается в конфиге (topUpdateFrequency).
Источник - https://github.com/iBuseWinner/Reputation/blob/master/src/main/java/ru/fennec/free/reputation/handlers/players/PlayersContainer.java#L137

И список игроков для топа каждый раз пересобирается с нуля.
Источник - https://github.com/iBuseWinner/Reputation/blob/master/src/main/java/ru/fennec/free/reputation/handlers/players/PlayersContainer.java#L127

В кэше топа игроки не будут храниться, если они не являются лидерами по количеству очков репутации. Так что я всё ещё не совсем понимаю, о какой утечке памяти может идти речь 🤔🤔

@mrfiveV
Copy link
Author

mrfiveV commented Aug 18, 2024

Пардон, не сразу понял T_T
Почему-то подумал что из БД извлекается список и потом отсеивается так как не увидел в SQL запросе LIMIT.
Кстати, не лучше ли брать одним запросом топ-N игроков чем делать N запросов?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants