Встроенные и ссылки в модели данных — mongodb

#mongodb #mongodb-query #pymongo

#mongodb #mongodb-запрос #pymongo

Вопрос:

Я хочу создать базу данных mongodb и использовать встроенную структуру. Например, учтите, что размер каждого документа из коллекции persons составляет 16 МБ. Это означает, что я не могу добавить контакты вложенного документа в коллекцию пользователя. 1- В этом случае, что я должен делать? 2- Если я создам коллекцию контактов, это будет обязательная ссылка на человека. Можем ли мы внедрить и ссылаться на структуру в базе данных mongodb?

Спасибо.

 {
    nom:'Kox', 
    prenom:'Karl', 
    gender:'M', 
    addres: 
        {
          rue: '123 Fake Street', 
          appt:108, 
          city:'mycity',
          zip_code:'GGG23'
        }, 
    class: 
        {
          name:'CLASS ONE', 
          group:'C', 
          section:'SECTION ONE' 
        }

}
  

Ответ №1:

Одной из сильных сторон MongoDB является гибкая схема.

У вас, безусловно, могут быть встроенные контакты для некоторых документов person, на которые есть ссылки для других, или отдельный документ person, в который встроены некоторые из его контактов, а на некоторые ссылки.

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

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

Компромисс заключается в:

Ссылочный подход позволяет спискам контактов быть сколь угодно большими, но требует отдельного поиска контактов, помимо поиска человека.

Встроенный подход снижает нагрузку на сервер базы данных, требуя только 1 поиска как для пользователя, так и для контактов, но ограничивает размер списка человек контакты 16 МБ.

Гибридный подход, основанный на внедрении / ссылках, требует немного большей сложности в коде приложения, но обеспечивает снижение нагрузки запросов на сервер базы данных, при этом позволяя списку контактов быть чрезвычайно большим.

Комментарии:

1. @Joe. Спасибо. Вместо некоторых контактов в embed и некоторых в reference, я думаю, что это проще и создать другую коллекцию (контакт) и ссылаться на нее в коллекции person: (у человека может быть много контактов). Что вы думаете?

2. Это упрощает код приложения за счет того, что каждый раз требуется отдельный поиск. Какой из 3 методов лучше, будет зависеть от данных, требуемого времени отклика, шаблонов запросов и ожидаемой нагрузки.