Обидва підходи використовуються з MMORPG. Зберігати все в пам’яті та періодично перевіряти його вказівкою на диск, здається, найбільш популярним варіантом, принаймні для старих ігор. Він має перевагу в тому, що він досить простий у виконанні та масштабуванні досить добре, але зробити його надійним повністю залежить від розробника. Бази даних SQL надають властивості ACID, які спрощують надійність, але в цілому складніші для того, щоб добре реалізуватись, і можуть мати проблеми зі масштабуванням.
EVE Online - приклад MMO, де все зберігається в базі даних SQL. Я думаю, що він досяг свого максимуму близько 60 000 одночасних користувачів і мусив протягом багатьох років присвячувати дороге обладнання на сервери баз даних, щоб не відставати від навантаження. Однак EVE зберігає набагато більше даних на користувача, ніж більшість MMORPG і має набагато частіші та різноманітні транзакції. Властивості ACID бази даних дозволяють утримувати всю масивну та складну базу даних у постійному стані.
Наприклад, розглянемо випадок, коли хтось передає предмет іншому гравцеві. База даних EVE гарантує, що навіть у випадку збою або відключення електроенергії предмет потрапляє лише в інвентар одного гравця. Тобто транзакція з базою даних, яка вилучає предмет з інвентаря одного гравця та додає його до іншого гравця, є атомною. Угода або повністю завершена, або взагалі не відбувається. Ви не можете опинитися в стані, якщо предмет не існує ні в інвентарі гравців, ні в обох.
MMORPG, який зберігає дані гравця в пам'яті та періодично перевіряє їх, повинен сам реалізувати цю атомність. Одним із способів зробити це буде перевірка даних кожного гравця одночасно, гарантуючи, що новий контрольно-пропускний пункт буде повністю зафіксований на диску, перш ніж його вважати останньою контрольною точкою. Гра також повинна гарантувати, що дані гравця не можуть змінюватися під час перевірки. З великою кількістю активних гравців виклик стає робити все це, не викликаючи затримки достатньо довго, що гравці помітять.
Не варто недооцінювати, наскільки важлива консистенція. Коли ви розробляєте свою гру, її буде дуже багато. Вам не потрібно буде відслідковувати, чому елементи зникають та / або дублюються, а не тоді, коли проблема, пов’язана з непов’язаною помилкою, спричиняє гру до аварійного завершення. Більше того, коли ваша гра буде реалізовуватися, вона зазнає краху набагато більше, ніж ви очікували. Ваш сервер, який працював ідеально під час тестування, раптом виявить численні помилки під повним завантаженням, а гравці роблять те, чого ви не очікували від них.
Зауважте, що більшість MMORPG використовують бази даних SQL для інформації, пов’язаної з обліковим записом, навіть якщо вони не стосуються фактичних даних про ігри. Ще важливішим, ніж збереження ігрового стану в постійному стані, є збереження стану виставлення рахунків. Найгірший випадок пошкодження бази даних ігор - це те, що вам доведеться відновлювати базу даних із щоденної резервної копії. Найгіршим випадком пошкодження бази даних рахунків є те, що ви збанкрутуєте через усі збори.
Для вашого проекту, ймовірно, ви можете піти в будь-який бік. Наявність 1000 одночасних користувачів, ймовірно, не висуває межі того, що сервер SQL може обробляти на товарному ПК сьогодні, але багато що залежатиме від характеру транзакцій. Якщо ви знайомі з дизайном SQL і реляційними базами даних, це може допомогти вам. Ви хочете максимально мінімізувати транзакції, для чогось подібних поточних точок відтворення гравця ви можете лише періодично зберігати їх у базі даних, оскільки такі статистичні дані не обов'язково повинні бути послідовними. (У грі PvP вони можуть хоч ...) Не зберігайте в базі таких речей, як монстр HP, у більшості ігор зберігаються лише дані, пов’язані з гравцем.
З іншого боку, якщо ви не майстер SQL, ви можете зберегти всі дані в пам'яті набагато простіше, щоб надійно працювати. Бази даних SQL спрощують узгодженість та надійність, але не є автоматичними. Неправильно розроблена база даних може працювати погано і призводити до невідповідностей. Операції не будуть атомними, якщо ви їх не зробите. Якщо ви не використовуєте параметризовані висловлювання релігійно, ви відкриєтесь для атак ін'єкції SQL.