Arhn - архитектура программирования

mongodb: встроенный только идентификатор или идентификатор и имя

Я новичок в mongodb, подскажите, как исправить схему дизайна для ситуации, как показано ниже:

У меня есть коллекция пользователей и коллекция продуктов. Продукт содержит такую ​​информацию, как идентификатор, название, описание, цена... Пользователь может добавить продукт в закладки или поставить лайк. В настоящее время в коллекции пользователей я храню 1 массив для понравившихся продуктов и 1 массив для продуктов с закладками. Поэтому, когда мне нужно просмотреть информацию об 1 пользователе, я должен прочитать эти 2 массива, а затем выполнить поиск в коллекции продуктов, чтобы получить название понравившихся и добавленных в закладки продуктов.

//User collection
{
   _id : 12345,
   name: "John",
   liked: [123, 456, 789],
   bkmark: [123, 125]
}

//Product collection
{
    _id : 123,
    title: "computer",
    desc: "awesome computer",
    price: 12
}

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

С уважением.


  • В зависимости от вашего варианта использования вы также можете подумать о том, чтобы изменить его и добавить идентификаторы пользователей, которым понравился или добавил в закладки определенный продукт, в продукт. 25.10.2013
  • Спасибо, но я не думаю, что это хорошая идея. Поскольку какое-то время многие пользователи пытаются полюбить 1 продукт, может произойти что-то странное, я не знаю, как справиться с состоянием гонки в mongodb. 25.10.2013
  • Этот вопрос МНОГО задают в StackOverflow, и он хорошо задокументирован на веб-сайте MongoDb: docs.mongodb.org/manual/core/data-modeling. Вам нужно будет выяснить, что работает в ваших системах на основе тестов. 25.10.2013

Ответы:


1

Следует учитывать, что происходит чаще: продукт переименовывается или запрашивается информация о пользователе.

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

Не зная ваших фактических шаблонов использования и требований, я предполагаю, что в обоих случаях это последнее, поэтому вам лучше оптимизировать для этой ситуации.

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

25.10.2013
  • Спасибо. Так что в мире mongodb есть много компромиссов. Думаю, мне нужно больше привыкать к ним. 25.10.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..