Как происходит обмен информацией с базой данных в игре Lineage2?

Каков процесс регулярного обмена данными в игре Lineage 2, включая следующие аспекты:

1. Возникают ли запросы к базе данных при открытии инвентаря, и как это влияет на нагрузку БД?
2. Каким образом происходит запись каждого выпавшего золота в мире и как эта информация хранится в таблице мира?
3. Что происходит с записью после того, как игрок поднимает золото? Превращается ли эта запись в null или происходит что-то иное?
4. Каким образом управляется таблица, чтобы избежать ее переполнения при интенсивной активности в игре?
5. Существует ли определенный тип БД, рекомендуемый для использования в игровых приложениях Lineage 2, или подходит любая БД, например Postgres?
  • 9 января 2024 г. 15:59
Ответы на вопрос 2
Lineage 2 – это многопользовательская онлайн-игра, разработанная компанией NCSOFT. Обмен информацией с базой данных в таких онлайн-играх – это ключевой элемент архитектуры, отвечающий за хранение данных о состоянии игрового мира, персонажей, их инвентаря, предметов и прочего. Давайте обсудим обозначенные в вашем вопросе аспекты:

1. **Открытие инвентаря и база данных:**
   - В большинстве современных MMORPG, когда игрок открывает инвентарь, система может выполнить запрос к базе данных для получения актуальной информации по предметам. Это может включать состояние предметов, количество и так далее.
   - Запросы к БД при открытии инвентаря могут создавать нагрузку на сервер, особенно если онлайн большое количество игроков. Для уменьшения нагрузки могут использоваться различные оптимизации, например, кэширование данных в памяти сервера.

2. **Запись информации о выпавшем золоте:**
   - Каждый раз, когда в игре генерируется золото (например, как дроп с монстра), информация о его местоположении, количестве и других параметрах может быть записана в базу данных.
   - В зависимости от реализации, золото может записываться в общую таблицу дропа или в отдельную таблицу для денежных средств.

3. **Поднятие золота игроком:**
   - Когда игрок поднимает золото, запись о нем в базе данных обычно изменяется. Золото удаляется из мира и добавляется к внутриигровому балансу персонажа.
   - Запись о предмете в мире может быть удалена или помечена как "поднятая". В случае золота обычно происходит перемещение золота в баланс игрока, а не просто его удаление.

4. **Управление таблицами базы данных:**
   - Чтобы избежать переполнения таблиц и поддерживать производительность БД, разработчики используют масштабирование, оптимизацию запросов, индексирование и очистку устаревших или неиспользуемых данных.
   - Может применяться шардирование базы данных для распределения нагрузки по разным серверам или инстанцирования мира.

5. **Типы баз данных для Lineage 2:**
   - Официальный сервер Lineage 2 может использовать специализированные решения, адаптированные к требованиям игры.
   - Для неофициальных или частных серверов Lineage 2 могут использоваться разные СУБД в зависимости от предпочтений разработчиков; это могут быть MySQL, PostgreSQL или даже NoSQL-решения.
   - Нет специально рекомендованного типа БД для игровых приложений Lineage 2, но важно выбирать решения, поддерживающие высокий уровень транзакционной нагрузки и предоставляющие хорошие инструменты для масштабирования и управления производительностью.

Стоит от
Я не специалист в играх но обычно когда хотят гарантированное время выдачи ответа - 
используют key-value dbms, . Они очень хорошо масштабируются и таблица с 10
записями и таблица с 10 миллиардами записей дают примерно одинаковый отклик.

Далее - искусство разработчика - уложить действия с инвентарем и действия с балансом золота
в 1 едиснственную операцию put/get или атомарную операцию с key-value системой.

Из недостатков. Никакие сортировки и группировки использовать нелзя. Если сильно хочется
- создается 1 запись типа JSON и там уже заранее лежат отсортированные дочерние записи.
И такая запись подготавливается в фоновом режиме обычно.
Похожие вопросы