У мене є онлайн-гра, де гравці певним чином формують світ - наприклад. Корпус Ultima Online, де ви можете побудувати свої будинки безпосередньо на певних частинах світу. Це зміни, які мають тривати з часом як частина стійкого світу.
У той же час команда дизайнерів додає новий вміст та вносить зміни в старий контент, щоб покращити та розширити гру для нових гравців. Вони будуть робити це на сервері розробки спочатку під час тестування, а потім пізніше доведеться об'єднати свою роботу з "роботою" гравців на живому сервері.
Припустимо, що ми вирішуємо проблеми дизайну гри - наприклад. гравці можуть створювати лише на визначених ділянках, тому вони ніколи не стикаються географічно з дизайнерськими правками - які хороші способи обробки даних або упорядкування структур даних, щоб уникнути конфліктів, коли нові дані дизайнера об'єднуються з новими даними про програвач?
Приклад 1: Гравець створює новий тип предмета, і гра присвоює йому ідентифікатор 123456. Екземпляри цього елемента посилаються на 123456. Тепер уявіть, що у дизайнерів ігор є схожа система, і дизайнер створює новий елемент також під номером 123456. Як цього можна уникнути?
Приклад 2: хтось робить популярний мод, який надає всім вашим драконам французький акцент. Він включає в себе сценарій з новим об'єктом, assignFrenchAccent
який називається, який вони використовують для присвоєння нових голосових активів кожному об’єкту дракона. Але ви збираєтесь розгорнути свій DLC "Наполеон проти Смауга", який має однойменний об'єкт - як це можна зробити без великих проблем із обслуговуванням клієнтів?
Я продумав такі стратегії:
- Можна використовувати 2 окремих файли / каталоги / бази даних, але тоді ваші операції з читання значно ускладнюються. "Показати всі елементи" має виконати одне прочитане на конструкторській БД і одне прочитане на БД програвача (і все одно має розрізняти два, якось.)
- Ви можете використовувати 2 різних простору імен в одному магазині, наприклад. використовуючи рядки в якості основного ключа та префіксуючи їх "DESIGN:" або "PLAYER:", але створення цих просторів імен може бути нетривіальним, і залежності не зрозумілі. (наприклад, в RDBMS ви, можливо, не зможете ефективно використовувати рядки в якості первинних ключів. Ви можете використовувати цілі числа та виділити всі первинні ключі нижче певного числа, наприклад, 1 мільйон, щоб бути дизайнерськими даними, і все, що вище за це вказує на Дані про програвача. Але ця інформація невидима для RDBMS, і зовнішні ключові посилання перетинатимуть "розділити", тобто всі інструменти та сценарії повинні явно працювати навколо неї.)
- Ви завжди можете працювати в одній спільній базі даних в режимі реального часу, але продуктивність може бути низькою, а ризик пошкодження даних про програвач може бути підвищений. Він також не поширюється на ігри, які працюють на більш ніж 1 сервері з різними світовими даними.
- ... будь-які інші ідеї?
Мені здається, що хоча це в першу чергу проблема онлайн-ігор, ці концепції можуть стосуватися і модінгу, коли спільнота створює моди одночасно, коли розробники виправляють свою гру. Чи використовуються тут якісь стратегії, щоб зменшити ймовірність зламу мода, коли з’являться нові патчі?
Я також позначив це як "контроль версій", тому що на одному рівні це і є - 2 галузі розвитку даних, які потребують об'єднання. Можливо, з цього напрямку можуть з’явитися деякі розуміння.
EDIT - кілька прикладів, доданих вище, щоб допомогти з’ясувати проблему. Я починаю вважати, що проблема справді одна з просторів імен, яка може бути реалізована в магазині за допомогою складених ключів. Щонайменше, це спрощує стратегію злиття. Але можуть бути альтернативи, яких я не бачу.