2014-11-16 2 views
2

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

В принципе, мне нужны некоторые предложения.

В настоящее время я закончил создание простого CRUD и осуществил местный паспорт JS. В настоящее время у меня есть одна коллекция в моем mongoDB, называемом пользователями.

Наш социальный сайт будет иметь блог, рынок и многие другие страницы (функции), которые будут связаны с одним пользователем.

Поскольку я никогда раньше не работал с mongoDB, мне интересно, если mongoDB должен использовать одну коллекцию для каждого пользователя или иметь несколько коллекций для каждой функции.

Чтобы уточнить это, скажем, я использую модель пользователя для регистрации пользователя, блог модели для блог и т.д. и т.п.

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

Большое спасибо!

ответ

3

Если вы используете mongoDB в качестве backend для интерфейса REST, наилучшей практикой является создание в коллекции на ресурс. Например, если вы намереваетесь иметь конечную точку /api/users, вы должны иметь коллекцию пользователей, и она должна содержать все и все, что вы намерены вернуть в этой конечной точке.

Если вы используете узел для компиляции серверных шаблонов, структура может быть более гибкой. В этом случае вышеупомянутое все еще применяется (поскольку вы, вероятно, в конечном итоге захотите открыть службу REST), но есть большая гибкость. На самом деле, если отношения стиля «много-во-многие» подходят, легче разделить эти коллекции и загрузить их вместе на одной странице.

В качестве альтернативы вы указываете пользователей и рынок. Большей проблемой, чем разделение данных в коллекциях, является использование транзакций. Каждый раз, когда вы планируете выполнять транзакцию данных, это должно выполняться в транзакции SQL. В MongoDB нет никаких понятий о транзакциях. Это по дизайну, поскольку MongoDB предназначен для быстрого масштабируемого хранилища данных. В этом случае нецелесообразно объединять данные SQL и noSQL.

+0

Мы строим бизнес для бизнеса социальной сети, и мы будем иметь много возможностей здесь, не только блог, но рынок, реклама и многие другие услуги. Насколько я понял, вы предполагаете, что я должен иметь одну коллекцию на один ресурс (сбор для сообщений, сбор для пользователей и любые другие ресурсы). Не могли бы вы предоставить мне руководство или ссылку на то, как связать все эти коллекции, чтобы мой аутентифицированный пользователь мог сохранить все это и выйти из системы. Я до сих пор не знаю, как связать все эти коллекции для работы для одного пользователя. Большое спасибо заблаговременно. –

+2

Вы не связываете ресурсы в noSQL, это SQL-способ делать что-то. noSQL и MongoDB, является хранилищем документов JSON. Это отношение агностическое. Вы все же можете создавать ссылки, добавляя атрибуты, которые ссылаются на первичные ключи, но эти ссылки слабы и не применяются. См. Здесь: http://stackoverflow.com/questions/4067197/mongodb-and-joins –

+1

То, как я обрабатываю это, заключается в хранении транзакционных и реляционных данных в SQL (обычно PostgreSQL) и JSON-документах, где отношения слабы и производительность целостность, в noSQL (обычно MongoDB) –

0

Я объясню разбиение/разделение на два уровня.

  1. Конечно, вы собираетесь создавать разные коллекции для разных моделей. Такие, как пользователи, блоги, сообщения и т. Д.

  2. Теперь идет вторая часть, если мы говорим о миллионах данных. Как вы их разделяете для более быстрого поиска данных. Например, у вас есть 1M пользователей, которые вы собираетесь разместить в одной большой коллекции «Пользователи». Но если вы ищете пользователя, чье имя - «Imdad», а возраст - 28, теперь ваш запрос просматривает эти элементы 1M в вашей отдельной коллекции пользователей, что займет много времени.

Чтобы решить эту проблему, сбор пользователей можно разделить на несколько коллекций по горизонтальной перегородкой (пользователями1 (возраст от 10-20), потребляющие2 (возраст от 20-30), Users3 (возраст от 30-40 лет)). Теперь, основываясь на вашем предикате запроса, monggoDB должен посмотреть в другую коллекцию/с. Это идея, что MongoDB применил, как и другие SQL DB. Вам не нужно явно выполнять ваш запрос в коллекции фрагментов, но сам mongoDB позаботится об этом.

Shard key generation

Mongoose shard key

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