Стоит ли использовать базу данных для хранения игрового контента? [закрыто]

16

У меня есть 2D-игра, написанная на C ++ с использованием SFML. Я хочу сделать игру расширяемой таким образом, чтобы контент, такой как элементы или объекты, можно было легко добавить, добавив строку / запись / строку в файл или базу данных.

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

SinisterSloth
источник
1
Пожалуйста, уточните ваши потребности больше. Базы данных довольно быстрые, но очень сложные. Вам действительно нужна скорость? Почему бы просто не использовать текстовый файл? Вы провели тест?
Анко
Сколько предметов вы собираетесь иметь? Это больше миллиона? Это примерно тот порог, в котором я хотел бы рассмотреть возможность использования базы данных поверх текстовых файлов.
Филипп
Я бы сказал, что база данных для этого излишня, просто используйте какой-то список определений. Возможно, просто текст. Рассмотрим XML или JSON.
Хьюго Цинк
1
Я также рекомендую XML или JSON. Я предпочитаю XML, потому что он более читабелен для меня, как человека, но JSON также является хорошим выбором.
Draco18s больше не доверяет SE
Я не буду утверждать, что у меня много знаний о системах данных или о том, как они реализованы в играх, но я скажу, что Microsoft склонна использовать реализации микро-баз данных для многих своих простых приложений (которые не имеют большого количества данные или потребности вне базы данных, но, как правило, имеют «отношения» и т. д.). Если вы помните об удобстве использования, это может иметь смысл. (Плохая идея: использование
суперформализованного

Ответы:

26

Используйте базу данных, только если вам нужна база данных. То есть:

  • Если вам нужно часто выполнять сложные запросы.
  • Если у вас сложные отношения с данными.
  • Если ваши данные огромны и вряд ли поместятся в памяти.

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

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

Также отмечу , что, если вы делаете использовать базу данных, это может принести пользу и вам , и разработчики модов по - прежнему использовать файлы для чтения исходных данных и построить базу данных только когда игра нагрузки. Если потенциальный размер этой базы данных не огромен (т. Е. Превышает несколько десятков МБ), вы можете использовать базу данных в памяти, что возможно в SQLite, указав :memory:в качестве пути к базе данных .

Darkhogg
источник
3
Я бы очень подумал SQLite, даже если ваши потребности НЕ "сложны" или "огромны". На самом деле существует множество причин, по которым при наличии чего-то маленького и такого встроенного вы можете получить большую выгоду, имея базу данных под рукой.
WJL
Кроме того, мобильные платформы используют базы данных для хранения некоторой информации. Android использует SQLite. Это означает, что большая часть вашей работы для мобильных платформ уже выполнена (с точки зрения обработки данных). Кроме того, действительно легко настроить SQLite и редактировать данные SQLite (с помощью таких программ, как SQLite Studio или аналогичных). Если это будет использовать SQLite, лучше всего будет использовать V3. Но кроме этого, на месте!
Исмаэль Мигель
@wjl: Согласен, преимущества нормализации и ограничений ссылочной целостности того стоят даже для небольших наборов игровых данных. (Теперь, если бы не было такой боли, чтобы заставить SQLite делать правильные ограничения ссылочной целостности ...)
Мейсон Уилер
Это аргумент против использования реляционной базы данных. Простое хранилище с индексированными значениями ключей все еще может быть полезным.
Марк
1
@Mark Если вы собираетесь использовать хранилище значений ключей в игре, у вас может быть просто хэш-карта или что-то подобное в памяти.
Даркхогг
5

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

Вы можете просто добавить любое поле, которое вам нужно, в любую коллекцию, потому что это NoSQL Arch, так что он очень хорошо вписывается в любую «динамическую» среду, такую ​​как игры.

Дайте ему взглянуть .

Если вы разрабатываете какую-то стратегическую игру, основанную на MMO Turn, возможно, вам следует прочитать о CouchDB , это база данных NoSQL с действительно хорошей системой управления версиями.

PRDeving
источник
Не очень хороший ответ. Вопрос был не в том, «какую базу данных использовать», а в том, «использовать ли вообще базу данных».
Uliwitness
1

CastleDB - хороший вариант, потому что это просто редактор, который впоследствии преобразует базу данных в файл JSON. Я видел много ответов, в которых говорится, что файл с открытым текстом лучше, так что CastleDB, вероятно, лучший из обоих миров.

hjk231
источник
Not a bad answer, but misses the question. The question wasn't "which database should I use" but rather "should I use a database at all".
uliwitness