2013-05-23 6 views
0

У меня есть коллекция пользователей, которая содержит email_id и _id как уникальный. Я хочу хранить пользовательские данные в разных коллекциях. Я хотел бы использовать email_id как идентификатор в этих коллекциях. Поскольку в оболочке легко запрашивать эти коллекции с помощью mail_id вместо сложного ObjectId.MongoDB - Использование идентификатора электронной почты в качестве идентификатора в коллекциях

Правильно ли это? будет ли он давать какие-либо проблемы с производительностью при создании индексов с большими индексами электронной почты?

Кроме того, не рассматривайте эту опцию, если у вас есть возможность активировать функцию email_id .

ответ

0

Хотя реляционные базы данных рекомендуют вам нормализовать ваши данные и распространять их по многим таблицам, этот подход обычно не подходит для MongoDB. MongoDB не поддерживает JOINs по нескольким коллекциям или даже нескольким документам из той же коллекции. Поэтому вы должны попытаться создать документы базы данных таким образом, чтобы каждый запрос мог быть выполнен с помощью поиска одного документа. Это означает, что обычно рекомендуется хранить всю информацию о пользователе в одном документе.

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

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

Смежные вопросы