тестил вчера худенький сервер под базы данных, столкнулся с тем что операция SELECT которую как орехи щелкает текущий сервер баз данных MYSQL 5.7 очень сложно дается MYSQL 8 вкупе с слабеньким CPU
Немного данных, основная проблема с основной таблицей где хранятся слоты, MYSQL 8 очень медленноооо делает выборку слотов из-за чего время загрузки просто безумные 10-30 секунд так же и сохранение, сначала я подумал что медленный процессор просто не может работать быстрее с такими жирными таблицами, но блин после замеров и сравнения с основным сервером баз данных я понял что так быть не может, основной 0.5-1 сек а этот 6.5-15 сек это слишком много
Как вариант создать индекс для всех полей которые участвуют в условиях выборки как советуют тут https://dzone.com/articles/how-to-optimize-mysql-queries-for-speed-and-perfor
Index All Columns Used in 'where', 'order by', and 'group by' Clauses
проблему нельзя устранить путем локальной записи в снимки т.к. игрок мог оставить платное оружие из одного слота на двух серверах и более одновременно до создания снимка.
Тоже самое можно провернуть с перемещением из слота который записан в снимке, перемещаем содержимое, пересохраняем, перемещаем содержимое, пересохраняем
Основная работа над допиливанием завершена, теперь надо добавить в остальное:
MoveObjectsFromSlotInSlotByType
SendSlotToPlayer
MoveObjectInSlot
SoldObject
SaveFileEraser (тут не нужно, слишком избыточно, то что игрок очистит слот ему ничего не даст)
процесс тестирования блокировки сохранения слота завершен, если обнаружена более поздняя операция со слотом то слот не даст себя сохранить. Теперь надо внедрять это во все остальное.
внедрена запись последней активности слота перед тем как начать загрузку предметов из базы данных.
внедрена выгрузка времени последней активности слота перед тем как начать сохранение предметов в базу данных
внедрена запись последней активности слота перед тем как начать сохранение предметов в базу данных
внедрена запись кеша активности слотов в файл
внедрена загрузка кеша активности слотов из файла при запуске плагина и выгрузка кеша активности слотов в файл при выгрузке плагина
теперь это надо грамотно совместить.
прошивать в предметы данные о инкрементации версии слота я не хочу, там и так много всего, шить лучше в кеш, а кеш выгружать на диск на случай прибытия рута с апдейтами плагинов чтобы в случае чего плагин с диска обратно данные взял.