Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Правильная работа с базой данных MySQL

Метки:
Теги Теги
java

Cristalix

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Test
Возникла такая проблема.

Как когда/как лучше всего делать запросы в базу данных. Информация связана с игроком/игроками.

Делать запрос когда нужна именно эта информация?
Или же при входе игрока делать запрос бд и хранить в памяти информацию?

Во втором случае я вижу один минус. Я не смогу редактировать информацию игрока пока он не выйдет с сервера.

Как можно правильно работать с базой данных?
Что бы не возникало проблем с скоростью получения данных и их работой.
 
Как вариант по фасту, можешь юзать rcon. Ну и там в зависимости от онлайна игрока.
 
Запросы к базе данных - тяжелые по времени. Не прям так сильно, но довольно заметно. В любой задаче нужно использовать как можно меньше запросов и по возможности пихать в асинхронные потоки, чтобы не блокировать главный. Есть два основных варианта:
1. Подгружать игроков тогда, когда они заходят (когда нужны только при онлайне).
2. Сразу подгрузить всю базу в оперативку (в HashMap или т.п. коллекцию).

Первый вариант самый оптимальный по памяти, но расходует время. Рекомендуется если база данных будет содержать очень много записей (больше 500к) и подгружать все будет сильно затратно для памяти.
Второй вариант занимает немного памяти, но время заметно быстрее. Рекомендуется если записей немного и важна скорость доступа к информации.


Я не совсем понял, почему. Обьясни подробнее.
Когда игрок выходит с сервера те данные которые я взял из базы данных перезаписываю обратно с уже измененными значениями.
 
Проблема заключается в том что информация об игроке может быть использована(изменена) в нескольких местах одновременно. Мне же нужно что бы я мог работать с информацией игроков в любое время и хоть откуда. При этом что бы это не влияло на скорость.
 
То есть с нескольких серверов одновременно? Или в разных участках кода того же сервера? Если 2, то один поток или есть параллельные?
С нескольких серверов одновременно. При это информация должна быть всегда свежей.
 
Проблема заключается в том что информация об игроке может быть использована(изменена) в нескольких местах одновременно. Мне же нужно что бы я мог работать с информацией игроков в любое время и хоть откуда. При этом что бы это не влияло на скорость.
Редис сервер или самописный сокет сервер для мемори базы.
 

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

Назад
Верх