Позвольте мне объяснить свою проблему, и надо надеяться кто-то может дать некоторый хороший совет.
Я в настоящее время работаю над веб-приложением, которое хранит информацию и метаданные для большой суммы приложений. Для каждого приложения мог быть где угодно от 10 к 100's комментариев, которые связываются с приложением и идентификатором версии приложения. Я использую MongoDB из-за потребности в легкой будущей масштабируемости и скорости. Я считал, что комментарии должны быть встроены в набор по причинам производительности чтения, но я не уверен, что это работает в моем случае. Я читал на другом сообщении:
В целом, если необходимо работать с набором определенных данных самостоятельно, сделайте его набором.
: @kb
В моем случае однако я не должен работать над набором собой. Позвольте мне объяснить далее. У меня будет таблица приложений (который может быть фильтрован), и динамично загрузит записи, как Вы прокручиваете, или фильтр, через список приложений. Если я встраиваю комментарии в наборе приложения, я отправляю ВСЕ комментарии, когда я динамично загружаю запись приложения в таблицу. Однако я хотел бы сделать "ленивую загрузку", в этом я только хочу загрузить комментарии, когда пользователь запрашивает видеть их (путем нажатия на запись в таблице).
Как пример, моя таблица могла бы быть похожей на следующее
| app name | version | rating | etc. | view comments |
------------------------------------------------------
| app1 | v.1.0 | 4 star | etc. | click me! |
| app2 | v.2.4.5 | 3 star | etc. | click me! |
| ...
Мой вопрос - то, что было бы более эффективным? Находятся чтения достаточно быстро на MongoDB, что действительно не имеет значения, что я вытягиваю все комментарии с каждым приложением? Если бы пользователь не отфильтровал ни одного из приложений и прокрученный полностью до нижней части, то они могли бы загрузиться где-нибудь между 125k к 250k записям/приложениям.
Я бы посоветовал подумать более конкретно о вашем запросе - вы указываете, какие части объекта вы хотите вернуть. Это должно позволить вам избежать накладных расходов, связанных с получением кучи встроенных комментариев, когда вас интересует только отображение некоторых конкретных битов информации о приложении.
Вы можете сделать что-то вроде: db.collection.find ({appName: 'Foo'}, {comments: 0});
, чтобы получить объект приложения с помощью appName Foo
, но специально исключить вложенный в него объект comments
(скорее, массив объектов).
Получение подмножества полей По умолчанию при операции поиска возвращается весь документ / объект. Однако мы также можем запросить возврат только определенных полей. Обратите внимание, что поле _id всегда возвращается автоматически.
// select z from things where x=3
db.things.find( { x : 3 }, { z : 1 } );
Вы также можете удалить определенные поля, которые, как вы знаете, будут большими:
// get all posts about mongodb without comments
db.posts.find( { tags : 'mongodb' }, { comments : 0 } );
ИЗМЕНИТЬ
Также помните, что функция limit (n)
позволяет получать только n
приложений за раз. Например, получить n = 50
приложений без их комментариев будет:
db.collection.find({}, {comments : 0 }).limit(50);