Как мне организовать мою базу данных MongoDB?

Я довольно новичок в работе с базами данных, и я узнал о различиях между NoSQL и MySQL. Я создаю веб-приложение, которое позволяет пользователям создавать события для включения в их календарь.

Сейчас у меня есть коллекция имен пользователей и паролей, а также коллекция для каждого пользователя, в которой хранятся их события. Но когда я читаю больше о NoSQL, мне кажется, что вместо этого я должен иметь коллекцию для всех событий и хранить события каждого пользователя в одном документе. Поэтому в моей базе данных было бы только две коллекции: одна для имен пользователей и одна для событий. Кажется, это имеет больше смысла, но тогда я получу очень большую коллекцию событий с большими документами.

Какова лучшая практика здесь? Я просмотрел множество примеров MongoDB, но в большинстве из них показаны только простые базы данных с одной коллекцией.

1 ответ

Эффективное моделирование для MongoDB не так очевидно. Точный ответ редко бывает, но я постараюсь дать вам несколько советов.

Общим принципом работы с базами данных NoSQL является моделирование данных в соответствии с запросами, которые вы планируете сделать. Если вам нужно получить список всех событий, гораздо эффективнее хранить их все в уникальном документе. Если вам нужно получить список всех документов для данного пользователя, сохраните его список событий в документе, описывающем пользователя, и так далее. Это может привести к дублированию некоторых данных: у вас может быть как список всех событий, так и список событий в каждом пользовательском документе.

Затем следует обычная дилемма: следует ли встраивать полное описание события в каждый документ, описывающий пользователя, просто на ссылку на это событие, которое хранится в другом документе?

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

Учитывая размер, ограничения описаны в документации MongoDB.

Другие вопросы по тегам