Помогите База данных синхронизация

Cristalix

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Test
У меня есть плагин который использует базу данных. Допустим игрок убил игрока мне нужно в таблице добавить к столбцу значение +1. И так же при вводе команды kills нужно выводить количиство его убийств. Столкнулся с такой проблемой что после ввода команды /kills сервер зависает на пару секунд. Я так понял это связано с тем что отправляется запрос в бд и ожидается ответ от нее. Тут мне рассказали что есть такая замечательная вещь как синхронизация. Это когда данные из бд и сервер автоматические синхронизируются. К сожалению я мало чего понял из этого решил обратиться сюда. Подскажите пожалуйста как можно синхронизировать сервер и базу данных? Что бы брались свежие результаты из базы данных.
 
placeholderAPI? (твой сервер пишет кол-во килов даже без плагинов, этот плагин отображает кол-во убийств выгружая инфу с сервера)
LeaderHeads? (пишет свою базу в MYSQL, лагов нет даже при онлайне 300+)

зачем пихать на сервер парашные самописы если есть уже готовое
 
placeholderAPI? (твой сервер пишет кол-во килов даже без плагинов, этот плагин отображает кол-во убийств выгружая инфу с сервера)
LeaderHeads? (пишет свою базу в MYSQL, лагов нет даже при онлайне 300+)

зачем пихать на сервер парашные самописы если есть уже готовое
Ты бесполезен. Автор, юзай completablefuture
 
Как вариант, обмениваться данными с базой в отдельном потоке.
 
Для начала создай отдельный поток, который будет выполнять твои запросы. То, есть создаешь потоко-безопасную очередь, и суешь туда запросы.(Запрос - объект, в котором строка queue - запрос, флаг rs - должна ли бд что то вернуть и Consumer<ResultSet> с названием callback, который ты должен выполнять, после получения результата) Далее тебе необходимо создать кеш(может подойти обычная хешмапа), и при заходе игрока, засовывать в очередь задачу на нахождения данных о игроке и записи в кеш. Потом, раз в 5 минут, тебе надо будет сделать сохранение данных всех игроков в кеше и потом удаления оффлайн игроков.(Для этого тебе надо будет делать один большой запрос, с данными всех пользователей).
Автор, если что извини за непонятное объяснение☹️
 
Думаю, при каждом запросе, т.е. вводе команды. Главное основной поток не забивать и сервер фризить не будет. А то, насколько быстро вернется результат уже от много зависит.
 
Для начала создай отдельный поток, который будет выполнять твои запросы. То, есть создаешь потоко-безопасную очередь, и суешь туда запросы.(Запрос - объект, в котором строка queue - запрос, флаг rs - должна ли бд что то вернуть и Consumer<ResultSet> с названием callback, который ты должен выполнять, после получения результата) Далее тебе необходимо создать кеш(может подойти обычная хешмапа), и при заходе игрока, засовывать в очередь задачу на нахождения данных о игроке и записи в кеш. Потом, раз в 5 минут, тебе надо будет сделать сохранение данных всех игроков в кеше и потом удаления оффлайн игроков.(Для этого тебе надо будет делать один большой запрос, с данными всех пользователей).
Автор, если что извини за непонятное объяснение☹️
Ля такое нагородил ужз, притом что оно не будет нормально работать даже)) Обычная хеш мапа то для кеша не подойдет если она будет шарится между несколькими потоками. А на самом деле все делается намного проще с CompletableFuture. Тип того CompletableFuture.supplyAsync(() -> player.sendMessage(getInfoFromDb)). Желательно вторым аргументом указать свой тред пул, чтоб не забивать форк джойновский
 
Ля такое нагородил ужз, притом что оно не будет нормально работать даже)) Обычная хеш мапа то для кеша не подойдет если она будет шарится между несколькими потоками. А на самом деле все делается намного проще с CompletableFuture. Тип того CompletableFuture.supplyAsync(() -> player.sendMessage(getInfoFromDb)). Желательно вторым аргументом указать свой тред пул, чтоб не забивать форк джойновский
При каждом выполнении команды отправлять запрос к БД... Ты же понимаешь что на большом сервере, она просто ляжет.
 
Ты какую-то хрень придумал с кол беками когда уже давно есть адекватные решения в виде ListenableFuture и CompletableFuture
Эта хрень называется программирование на callbackах. Используется не только в джаве
 
Если база правильно настроена и запросы идут в асинс, можно и без кеша. К примеру юзать oracle db, если нужна скорость.
 
Последнее редактирование:
Эта хрень называется программирование на callbackах. Используется не только в джаве
Ты походу вообще не вдупляешь о чем я... Может посмотришь реализацию CompletableFuture и listenable?
Если база правильно настроена и запросы идут в асинс, можно и без кеша.
В майне как всегда говно какое-то набирает популярность
 
Ты походу вообще не вдупляешь о чем я... Может посмотришь реализацию CompletableFuture и listenable?

В майне как всегда говно какое-то набирает популярность
CompetableFuture - самая обертка над потоками. ListenableFuture - ..что-то из спринга или гуавы. Ты думаешь слишком узко, если хочешь под каждый запрос пилить CombetableFuture
 
CompetableFuture - самая обертка над потоками. ListenableFuture - ..что-то из спринга или гуавы. Ты думаешь слишком узко, если хочешь под каждый запрос пилить CombetableFuture
Чем тебе не нравится в каждом запросе возвращать CompletableFuture?
 
Назад
Верх