#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 методов лучше, будет зависеть от данных, требуемого времени отклика, шаблонов запросов и ожидаемой нагрузки.