Оптимизация постоянно растущег... Заметка
HackerNoon на русском

Оптимизация постоянно растущего баланса в 11-летней игре

"War Robots хранит игровые данные, известные как балансы, для своего обширного контента. Эти балансы разделены на мета- и основную механику игры, с отдельными наборами для стандартного режима и режима "Схватка". За одиннадцать лет игра накопила значительный объем контента, что привело к большим размерам файлов балансов. Изначально мета-баланс составлял 9,2 МБ, а основной баланс — 13,1 МБ, что в общей сложности составило 44,6 МБ для загрузки игроками.Для решения этой проблемы команда разработчиков проанализировала размеры файлов балансов и обнаружила, что строки составляют значительную часть. Они разработали инструменты для выявления дублирующихся строк, которые оказались очень распространенными. Решение заключалось в создании уникального хранилища строк для каждого баланса, заменяя прямые экземпляры строк индексами. Это значительно сократило количество используемых строк, повысив эффективность.Дальнейшая оптимизация включала переработку протокола данных, переход с MessagePack со строковыми ключами на двоичный массив байтов с числовыми ключами. Также были удалены пустые коллекции, что еще больше уменьшило размер данных и время обработки. Новые функции были реализованы за переключателями, что позволило одновременно поддерживать старые и оптимизированные версии балансов. Тщательное тестирование с использованием рефлексии гарантировало, что обе версии балансов дают идентичные значения.Эти оптимизации привели к существенному уменьшению размеров файлов: мета-баланс сократился до 1,28 МБ, а основной баланс — до 2,22 МБ. Время десериализации также значительно улучшилось, а объем памяти, требуемой на стороне клиента, уменьшился. Команда пришла к выводу, что тщательное управление данными и устранение избыточности, особенно в отношении строк, имеют решающее значение для эффективной передачи данных и экономии средств."
CdXz5zHNQW_McKynR1tiz.jpeg