Вопрос дизайна БД - многопользовательская игра - PullRequest
1 голос
/ 29 декабря 2010

Я новичок в дизайне БД.Я пытаюсь написать настольную игру (максимум 4 игрока) и пытаюсь найти способ сообщать ходы друг другу.Я использую БД для этого в соответствии с предложениями по stackoverflow.

Моя проблема заключается в следующем - когда игрок A делает ход, этот ход должен быть прочитан B, C и D. Так что факт, что A сделалход должен быть сообщен B, C и D. Я делаю это следующим образом.Пожалуйста, скажите мне, если есть лучший способ сделать это.Мне это кажется неправильным и невероятно ненадежным.

У меня есть таблица со следующими полями -

gameId, userMove, flagA, flagB, flagC, flagD

Итак, когдаA делает ход, который я пишу, среди прочего - (flagA = 0, flagB = 1, flagC = 1, flagD = 1)

Когда B, C или D читают ход A, они уменьшают свой соответствующий флаг.

A не будет обновлять таблицу, если все флаги не равны 0.

То же самое происходит, когда другие делают свои ходы.

Комментарии?Должен быть лучший способ для этого.То, что я вижу здесь неправильно -

  • Я зацикливаюсь на выборе, пока все флаги не равны 0 для A
  • Я зацикливаюсь на выборе, пока флаг соответствующего пользователя не будетустановить чтение.

Это большая нагрузка на сервер и тайм-ауты клиентов, о которых мне нужно беспокоиться.

Я надеюсь, что смог объяснить свою проблему ясно.Пожалуйста, задавайте вопросы, если необходимо.

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Игра основана на сети (работает в браузере), и я использую php для разработки на стороне сервера, и поэтому я не могуиспользуйте кэш в памяти, хотя я бы хотел сделать это, если это возможно.

Спасибо, - Pav

Ответы [ 3 ]

1 голос
/ 29 декабря 2010

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

Базы данных отлично подходят для длительного хранения данных с гарантией атомарности, согласованности и целостности. Однако вам, похоже, не нужны эти функции для описываемого вами временного состояния.

0 голосов
/ 29 декабря 2010

Рассматривали ли вы использование файла для хранения информации?

0 голосов
/ 29 декабря 2010

Если flagA, B, C и D - все биты, вы можете подумать о том, чтобы поместить их в один столбец и рассматривать этот столбец как битовую маску.

Это позволит одному столбцу контролировать все флаги. Это может сделать ваш выбор и обновления намного чище.

Читайте об использовании битовых масок здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...