• Как спроектировать связи в MongoDB?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Решил БД карточной игры перевести на MongoDB

    Зачем? Если у вас есть хотя бы 10% вероятность того что между записями появятся отношения/связи, то монга вам не подходит.

    Монгу стоит использовать исключительно для хранения денормализованных данных. То есть обычно все хранят в реляционной базе и потом делают агрегации данных в денормализованном виде что бы ускорить выборки. В этом случае у нас может быть одна база данных в нормализованном виде (mysq/postgres/etc) и много инстансов монги из которой данные только читаются, но ничего не пишется (кроме как агрегации инициированные изменением данных в реляционной бд.

    И то это нужно только если у вас возникают проблемы с реляционной базой (много джойнов например приходится делать в случае сложных выборок). Если у вас один-два джойна то расставить индексы и не париться.

    p.s. говорит человек который не понаслышке знает о том, насколько плохо живется если на проекте монга была выбранна основным хранилищем данных при наличии связей между ними.
    Ответ написан
    3 комментария
  • Как спроектировать связи в MongoDB?

    @aleks_raiden
    Здесь, видимо, стоит смотреть на архитектуру сервера игры вообще. Например, может быть выгоден вариант, что эта коллекция карт загружается при старте и всегда хранится в памяти сервера, только синхронизируется с Mongo. Тогда у вас в документах на игрока будет список id карт, а дальше в приложении вы связываете его с актуальным списком карт с параметрами. Для большинства случаев это подойдет. дальше надо смотреть по количеству карт, юзеров, операций с ними, масштабирование - но это уже будет уровень тысяч игроков онлайн, что для игры будет просто супер-крутым взлетом.
    Ответ написан
    1 комментарий