Відповідь - так, це вірний варіант, але ні, це, мабуть, не чудова ідея .
Є дві основні проблеми з SQL, з якими NoSQL намагається вирішити, коли мова йде про ігри.
Перший - це затримка, або відставання. В одному сенсі бази даних SQL надзвичайно швидко обробляють тисячі транзакцій і більше за десяті частини секунди. В іншому сенсі вони неймовірно повільні, оскільки обробка всього декількох транзакцій може зайняти стільки ж часу. Для більшості застосувань баз даних це не має значення, але в іграх є компонент у режимі реального часу, тому мова йде не лише про те, скільки транзакцій ви можете зробити за секунду, а про середній час, який потрібно для відповіді на транзакцію з базою даних.
Ця затримка є головною проблемою для ігор в режимі реального часу. Багато розробників, які потребують великих баз даних (як правило, для MMO), створюють кеш-шар, який знаходиться між базою даних та ігровими серверами, щоб уникнути цих стійлових ситуацій, а потім періодично промивати кеш. Проблема? Ви просто викинули основні причини використання бази даних - атомність, послідовність, ізоляція та довговічність .
Але ця проблема не стосується веб-ігор. У вас вже є високий латентний зв’язок між програвачем та грою, тому ви можете також отримати пропускну здатність, яку надає SQL, а також переваги зрілого, добре відомого програмного забезпечення.
Однак друга проблема стосується вас, і це невідповідність об'єктно-реляційного опору . Ігри мають справу з предметами, бази даних - з рядками. Якщо вам пощастило, об’єкт можна перетворити на рядок, просто перерахувавши його поля, але більшість часу об’єкти є ієрархічними, і вам доведеться їх вирівняти якимось чином, щоб отримати їх у рядки.
Бази даних на основі документів, як CouchDB та MongoDB, вирішують цю проблему, просуваючи документ до об'єкта верхнього рівня, а не до рядка ("документ" у цьому випадку є синонімом "об'єкт"). Але, роблячи це, вони втрачають багато переваг баз даних SQL. Пропускна здатність значно нижча, а алгоритми блокування значно ускладнюються.
Хороша новина в тому, що вже існує багато інструментів об’єктно-реляційного відображення (ORM) для будь-якої мови, якою ви користуєтесь. Вони дозволяють вам досить прозоро перекладати між об'єктами в пам'яті і рядками в базі даних. Ці інструменти, як правило, не підходять для масштабних ігор у режимі реального часу, оскільки вони можуть представляти найгірші аспекти продуктивності баз даних SQL та NoSQL. Але це добре для веб-гри - в гіршому випадку, коли у вас виникнуть проблеми з продуктивністю, ви можете повернутися до здійснення транзакцій старомодним способом. Проблема із затримкою вам не зашкодить, і підвищена пропускна здатність допомагає вам.
Нарешті, щоб взяти під увагу точку, яку я зробив в іншому місці : мова не йде про статичні дані гри. Я не говорю про описи ваших предметів, ваші пошкодження зброї, спрайти чи що-небудь тут. Я маю на увазі реальні, змінювані дані гри, як-от те, що є в інвентарі гравця або яка їх статистика. Все, що потрібно для статичних даних, - це сховище даних. Можливо, виявляється, що найпростіше це використовувати ту саму базу даних, що і сховище даних, тому що у вас чудова ORM; можливо, вам просто знадобиться файлова система. Це дві окремі проблеми, і одна відповідь не потребує (і, мабуть, не) відповідає обом випадкам.