Перейти к содержанию
  • UUID для предметов


    В рамках обсуждения того что нужно для реализации: 

     

    Поднялся вопрос об идентификации предметов как в базе, так и на сервере одним ID.

     

    Нельзя создать отдельное поле с auto_increment параметром, в таком случае главный вопрос как это сделать?, obj_id как ид строки всегда меняется т.к. при сохранении мы удаляем предмет из базы данных и сохраняем вновь

     

    остается только вариант,  при создании предмета выдавать ему в качестве UID применять что-то похожее на стандарт UUIDv4


    Обратная связь

    Рекомендуемые комментарии

    Electr0

    Опубликовано

    в качестве UID применен UUIDv4 пример из С, посмотреть можно тут: https://onlinegdb.com/SkWPfXa5Q

    В SourcePawn аналог алгоритма сделал так:

    char szHex[17] = "0123456789abcdef", sUID[37];
    for (int i = 0; i < 36; i++)
    {
    	int r = GetRandomInt(0,15);
    	switch (i)
    	{
    		case 8,13,18,23:{ 	sUID[i] = '-'; 				}
    		case 14: 	{ 	sUID[i] = '4'; 				}
    		case 19: 	{ 	sUID[i] = szHex[r & 0x03 | 0x08]; 	}
    		default:	{ 	sUID[i] = szHex[r];			}
    	}
    }

    В самой базе буду выполнять запрос:

    UPDATE table set uid = (SELECT UUID());

    чтобы сгенерировать uuid для уже сохраненных предметов в базу данных.

    Electr0

    Опубликовано

    Значение Статус изменено на: Тестируется

    Electr0

    Опубликовано

    UUID предмета должен быть обновлен в случаях: копирование, сохранение в другой слот при этом зная что объект уже находится в каком-то слоте.

    Electr0

    Опубликовано

    UPDATE alliance_fort_system.fs_obj_storage set uuid = (SELECT UUID())
    > Affected rows: 1484011
    > Time: 10,4s


    1484011 предметов в базе получили идентификаторы

    Electr0

    Опубликовано

    в первой версии выдавало 37 символов, а нужно 36. пересгенерировал uuid для всех предметов в базе.

    Electr0

    Опубликовано

    исправлено отсутствие генерации нового UUIDv4 для предмета который скопирован.

    Electr0

    Опубликовано

    как оказалось есть куча проблем с обеспечением уникальности UUID, в самых разных вариациях, их нужно решить до запуска кнопок.

    Electr0

    Опубликовано

    Запрос теста уникальности:

    SELECT obj_id, time, uuid, slot, count(uuid) as bug FROM alliance_fort_system.fs_obj_storage
    GROUP BY uuid HAVING bug > 1

     

    Уязвимости:

    При сохранении слота в таблицу fs_obj_storage нужно рефрешить UUID загружаемых слотов игроков, и слотов игроков под курсором, при сохранении построек игрока под указанным STEAMID

    Electr0

    Опубликовано

    сделан рефреш UUID во всех случаях кроме тех в которых идет сохранение из снимков напрямую, и пересохранение.

    Electr0

    Опубликовано

    1. После рефреша нужно сделать очистку кеша от тех uuid которые больше не используются. 

    Electr0

    Опубликовано

    2. код рефрешера нужно взять из библиотеки, под нее сделан самый оптимизированный вариант.

    Electr0

    Опубликовано

    3. те предметы что не вошли сохранку не должны попасть в кеш кнопки, нужно четко проконтролировать чтобы мусор не попадал в кеш!

    Electr0

    Опубликовано

    рефрешер и очиститель от мусора объединены и выполняют все поставленые перед ними задачи, ура епта, сколько мучений.

    Electr0

    Опубликовано

    есть баг с порчей структуры кеша при попытке сохранения из снимка платных предметов с кнопками в другой слот

    Electr0

    Опубликовано

    обнаружен и уничтожен, надо оставить как можно меньше багов космосу, поскольку, тот еще жук по багам

    Electr0

    Опубликовано

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

    Electr0

    Опубликовано

    баг с проблемами дублей UUID при загрузке шаблонов более одного раза исправлен

    Electr0

    Опубликовано

    баг все еще есть, игрок как-то смог задублить один uuid на неск предметов.

    Electr0

    Опубликовано

    как оказалось игрок загрузил шаблон сохраненный в аккурат до релиза, шаблоны в старой версии не сохраняли UUID, что привело к засорению данных, т.к. в пустой ключ UUID новые UUID сохранялись два раза т.к. они все пустые были в итоге все предметы из шаблона получили один UUID, и как следствие, появление вот такого бажульки, защита от такого исключения конечно отсутствовала т.к. нет смысла в ней если по всем путям сохранения у предмета уже есть идентификатор. По сценарию перед тем как релизить кнопки я должен был выполнить полную регенерацию UUID в базе, но вот проблема, я столкнулся с тем что у меня уже было много настроенных кнопок и мне было жалко делать регенерацию и я не сделал ее, попутно забыв про шаблоны и библиотеку.

    Electr0

    Опубликовано

    Значение Статус изменено на: Сделано



    Присоединяйтесь к обсуждению

    Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

    Гость
    К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
    Добавить комментарий...

    ×   Вставлено с форматированием.   Вставить как обычный текст

      Разрешено использовать не более 75 эмодзи.

    ×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

    ×   Ваш предыдущий контент был восстановлен.   Очистить редактор

    ×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Обозначения статусов

    В обработке = Мы работаем над вашим отзывом.

    Будет сделано = Ваша идея добавлена к плану будущих изменений.

    Тестируется = Изменения внесены, но требуют тестирования.

    Сделано = Ваша идея реализована!

    Отклонено = Отзыв некорректный, бред, либо уже реализовано. Если у вас есть дополнительная информация напишите комментарий и мы снова откроем этот вопрос.

×
×
  • Создать...