дизайн модели данных многопользовательской игры - PullRequest
0 голосов
/ 31 января 2019

Вот мой дизайн таблицы Dynamodb для игры в состоянии ожидания, в которой участвуют два игрока.Состояние игры может изменить форму в ожидании -> в прямом эфире -> более

PK      SK      State    Name
gid1    state   pending 
gid1    pid1             alex
gid1    pid2             john

Теперь я хочу спросить, в какой части ожидающих игр находится конкретный пользователь.Для этого мне нужно продублировать Game State для каждого элемента игрового игрока и создать GSI следующим образом.

GSIPK   GSISK   PK
alex    pending gid1
john    pending gid1

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

Есть ли лучший дизайн для моделирования отношений родитель / потомок, где child зависит от атрибута parent?значение?

1 Ответ

0 голосов
/ 04 февраля 2019

Кажется, нет очевидной причины для дублирования игрового состояния.Вы могли бы продолжить с вашей текущей моделью.Найдите игры, в которых участвует игрок, используя GSI, затем возьмите набор результатов и повторите их.Для каждой игры, в которую вовлечен игрок, получите предмет GameState из базовой таблицы.Добавьте каждую игру в набор, в котором установлен ключ состояния.

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

Другойвариант, который кажется мне более очевидным, состоит в том, чтобы иметь две отдельные таблицы;один для игроков и один для состояния игры.

...