Ваше запитання дійсно широке через велику кількість жанрів там, але ось точка зору професійного розробника програмного забезпечення.
Ви надали перелік критеріїв, які ви хочете використовувати, щоб визначити, який механізм збереження даних ви використовуєте. Це були:
- Розмір проекту.
- Платформа, на яку спрямована гра.
- Складність структури даних.
- Переносимість даних серед багатьох проектів.
- Як часто слід отримувати доступ до даних
- Кілька типів даних для однієї програми
- Будь-який інший момент, який, на вашу думку, представляє інтерес, коли ви вирішуєте, чим користуватися.
Для початку нам потрібно встановити, які варіанти є у нас. Оскільки ви не вказали мову чи технологію, важко точно сказати, але ви, мабуть, намагаєтесь вибрати між XML та реляційним сховищем бази даних.
Важливою відмінністю є те, що XML насправді не є механізмом зберігання настільки, як техніка серіалізації. Це спосіб представити структури пам'яті для вашої гри. Враховуючи це, ви дійсно говорите про плоский файл та реляційне сховище бази даних. Це не єдині варіанти, але вони найпоширеніші, тому я збираюся їх використовувати.
Для плоских файлів:
- XML
- JSON
- ЯМЛ
- XAML
- Простий текст
Для баз даних:
- SQL Server
- MySQL
- DB2
- Oracle
- Набагато більше
EDIT: Ви запитали про інші типи механізмів, окрім файлів та реляційних баз даних. Єдиний інший помітний тип баз даних, який я бачив регулярно, - це бази даних "у стилі Берклі", які по суті базуються на ключових значеннях. Вони, як правило, використовують B-дерева для структурування даних, так що пошуки швидко проходять. Вони чудово підходять для пошуку конфігурації / налаштування, де ви точно знаєте, що хочете (наприклад, дайте мені всі телеметричні дані для "Рівень 1").
Тепер, коли у нас всі основи не вдається, давайте торкнемося деяких ваших критеріїв.
Розмір проекту.
Деякі можуть погодитися, але розмір вашого проекту не обов'язково матиме величезний вплив на ваш механізм збереження даних. Ви хочете створити бібліотеку багаторазових функцій, які зберігають / завантажують дані з того механізму, який ви хочете. Я б навіть запропонував реалізувати шар абстракції (ознайомтеся з шаблоном адаптера ), щоб ви могли легко змінити свій механізм збереження, якщо потрібно.
Сказавши, що для невеликих проектів використання XML у файловій системі потенційно може працювати добре, але ви захочете вирішити деякі проблеми безпеки (тобто шифрування), щоб гравці не змогли змінювати дані за власним бажанням.
Платформа, на яку спрямована гра.
Платформа теж не буде великою проблемою. Вам слід більше турбуватися про свою платформу розвитку, ніж про цільову платформу. Причиною цього є те, що деякі мови обробляють певні типи розмітки або бази даних краще, ніж інші. Це не означає, що ви не могли використовувати будь-яке з перерахованих вище практично будь-якою мовою, але іноді найкраще використовувати підтримувані інструменти, доступні вам. Будь-яка платформа підтримуватиме плоскі файли та аналізує XML, але на мобільних платформах ви можете, можливо, розглянути бінарну серіалізацію або принаймні оптимізувати свій XML для зберігання.
Складність структури даних.
Це свого роду хитро. Реляційні бази даних чудово підходять саме для цього ... зберігання об'єктів та їх відносин. Ви маєте кращу здатність застосовувати структуру за допомогою реляційного сховища, ніж у файлів у файловій системі. Розгляньте типи відносин між вашими сутностями, а також те, як часто ви їх змінюєте або знаходите пов'язані сутності. Для надзвичайно складних структур я б запропонував пройти маршрут бази даних.
Переносимість даних серед багатьох проектів.
Що стосується портативності, то слід враховувати той факт, що бази даних, природно, більш важкі, ніж файли. Існують накладні установки та конфігурації, різні бази даних будуть доступні для різних платформ тощо. SQLite - це досить непоганий спосіб. Однак, якщо мова йде про портативність, вам, швидше за все, буде легше працювати з файловими рішеннями, такими як XML.
EDIT: Є кілька інших проблем, які ви згадали про переносимість в одному зі своїх коментарів. Зрештою, ви не хочете, щоб ваші дані занадто щільно поєднувалися з будь-яким продуктом чи файлом. Зрештою, найкраще, якщо ви можете зберігати дані про запаси (рівні, вороги тощо) у якомусь абстрактному форматі (файли з обмеженими вкладками, XML тощо), які ви можете легко проаналізувати та зберігати в базі даних / файловій системі при компіляції або завантаженні час. Це означає, що ви можете замінити свій механізм зберігання на примху і просто переписати фрагмент розбору.
Як часто слід отримувати доступ до даних
Багато доступу до даних означає багато вводу-виводу, якщо у вас є якийсь механізм кешування. Бази даних зберігають структури в пам'яті і чудово підходять для маніпулювання та пошуку даних. Якщо ви дійсно постійно зберігаєте дані, можливо, вам захочеться зберегти базу даних.
Кілька типів даних для однієї програми
Обсяг, безумовно, враховує, але якщо ви не говорите про збереження тисяч або мільйонів об'єктів, файлова система все одно буде прийнятною як рішення.
Тип гри
Тип гри, яку ви будуєте, може мати величезний вплив на обрану вами платформу. Так, для більшості ігор, призначених лише для клієнтів, вам все буде добре, використовуючи стиснене або зашифроване рішення на основі файлової системи. Якщо ви говорите про ігри з онлайн-складовою, це було б шалено. Перейдіть по маршруту бази даних і врятуйте собі головний біль. Нехай сервер керує всіма вашими даними за допомогою кластера зворотного зв'язку.
Сподіваюся, що деякі з цих відгуків допомагають. Це аж ніяк не цілком всебічно, і прийняти рішення, врешті-решт, залежати від вас, але мій коментар повинен дати вам щось задуматися.
РЕДАКТУВАННЯ: Є деякі випадки, коли застосування гібридного підходу має багато сенсу. Наприклад, скажімо, що ви розробляєте MMORPG. На стороні клієнта ви можете зберігати кешовані дані про інших гравців у нереляційній базі даних (як зазначено вище). На стороні сервера ви зберігаєте всі дані гри у реляційній базі даних, щоб зберегти їх. А потім знову на стороні клієнта ви, ймовірно, зберігаєте дані журналу, конфігураційні дані тощо у файлах XML / flat для легшої доступності.
Інший плакат також зазначив, що іноді приємно, навіть якщо ви зберігаєте дані для виробництва в базі даних, щоб мати можливість замість цього використовувати плоскі файли для розробки ... просто вилучити інший продукт із суміші просто .