Чи варто використовувати базу даних для зберігання контенту гри? [зачинено]


16

У мене 2D гра, написана на C ++ за допомогою SFML. Я хочу зробити гру розширюваною таким чином, щоб вміст на зразок предметів чи сутностей міг бути легко доданий, додавши рядок / запис / рядок у файл чи базу даних.

Я шукаю те, що не потрібно компілювати в програму, але замість цього можна читати і записувати на час виконання. Коли було б доцільно використовувати базу даних?


1
Будь ласка, уточнюйте свої потреби більше. Бази даних досить швидкі, але дуже складні. Вам справді потрібна швидкість? Чому б просто не використовувати текстовий файл? Ви виконали тест?
Анко

Скільки предметів у вас буде? Це більше мільйона? Це приблизно поріг, де я б розглядав можливість використання бази даних над текстовими файлами.
Філіп

Я б сказав, що база даних є надмірною для цього, просто використовуйте якийсь список визначень. Можливо, просто звичайний текст. Розгляньте XML або JSON.
Гюго Цинк

1
Я також рекомендую XML або JSON. Я вважаю за краще XML, тому що він читає мене як людину, але JSON також є хорошим вибором.
Draco18s більше не довіряє SE

Я не буду стверджувати, що знаю багато систем даних чи того, як вони реалізовані в іграх, але скажу, що Microsoft прагне використовувати реалізацію мікро-баз даних для багатьох своїх простих додатків (тих, у яких не багато даних або поза базами даних, але, як правило, мають "стосунки" тощо). Тільки доки ви не забудете про зручність використання, це може мати сенс. (Погана ідея. Використання
надформалізованого

Відповіді:


26

Використовуйте базу даних, лише якщо вам потрібна база даних. Тобто:

  • Якщо вам потрібно часто виконувати складні запити.
  • Якщо у вас складні відносини даних.
  • Якщо ваші дані величезні і, швидше за все, не впишуться в пам'ять.

Якщо дані вашої гри задовольняють будь-якому з цих умов, ви можете отримати користь від використання бази даних. Зауважте, що вони не дуже поширені, і ви, ймовірно , не задовольняєте жодної з них. Якщо ви це зробите, я б пішов із SQLite або з подібною ідеєю не вимагати запущеного сервера і бути лише бібліотекою.

В іншому випадку використовуйте файли та завантажуйте дані в пам'ять при запуску. Якщо ви хочете, щоб гра була модифікованою, завантажте ці дані як з каталогу вашої гри, так і з каталогів модників та визначте, як може бути об'єднана конфліктна інформація.

Також зазначу , що, якщо ви робите використовувати базу даних, це може принести користь і вам , і розробники модів по - , як і раніше використовувати файли для читання вихідних даних і побудувати базу даних тільки коли гра навантаження. Якщо потенційний розмір цієї бази даних не є величезним (тобто більше кількох десятків МіБ), ви можете використовувати базу даних в пам'яті, що можливо в SQLite, вказавши :memory:як шлях до бази даних .


3
Я б дуже задумався SQLite, навіть якщо ваші потреби НЕ "складні" чи "величезні". Насправді існує маса причин, чому, маючи щось таке маленьке та вбудоване, ви можете отримати велику користь від того, щоб мати базу даних під рукою.
wjl

Також мобільні платформи використовують бази даних для зберігання певної інформації. Android використовує SQLite. Це означає, що більша частина вашої роботи над мобільними платформами вже зроблена (з точки зору обробки даних). Крім того, налаштувати SQLite та редагувати дані SQLite (з такими програмами, як SQLite Studio чи подібні) дуже просто. Якщо це використовувати SQLite, найкращим варіантом буде використання V3. Але крім цього, пляма на!
Ісмаїл Мігель

@wjl: Погоджено, переваги нормалізації та референтних обмежень цілісності заслуговують на це навіть для менших наборів даних про ігри. (Тепер якби це не було таким болем, щоб змусити SQLite робити належні обмеження щодо цілісності ...)
Мейсон Уілер

Це аргумент проти використання реляційної бази даних. Простий магазин з індексованими ключами та цінностями може все-таки коштувати.
Марк

1
@Mark Якщо ви збираєтесь використовувати сховище ключових значень у грі, ви також можете просто мати хеш-карту або подібне в пам'яті.
Darkhogg

5

Мені дуже подобається MongoDB за розвиток гри, він має дуже хороші показники та дуже гнучкі, прості у використанні та на основі json.

Ви можете просто додати будь-яке потрібне вам поле до будь-якої колекції, оскільки це арка NoSQL, тому вона дуже добре вписується в будь-який "динамічний" оточення, як ігри.

Дайте заглянути .

Якщо ви розробляєте якусь стратегічну гру на основі MMO, напевно, ви повинні прочитати про CouchDB , це база даних NoSQL, яка має дуже гарну систему версій.


Недобра відповідь. Питання полягало не в тому, "яку базу даних я повинен використовувати", а скоріше "чи взагалі слід використовувати базу даних".
uliwitness

1

CastleDB - це хороший варіант, оскільки це просто редактор, який згодом перетворює базу даних у файл JSON. Я бачив багато відповідей, які говорять про те, що найкращий файл простого тексту, тому CastleDB - це, мабуть, найкраще в обох світі.


Непогана відповідь, але пропускає питання. Питання полягало не в тому, "яку базу даних я повинен використовувати", а скоріше "чи взагалі слід використовувати базу даних".
uliwitness
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.