Хранение Встроенных Комментариев по сравнению с Предотвращением наверху в MongoDB

Позвольте мне объяснить свою проблему, и надо надеяться кто-то может дать некоторый хороший совет.

Я в настоящее время работаю над веб-приложением, которое хранит информацию и метаданные для большой суммы приложений. Для каждого приложения мог быть где угодно от 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 записям/приложениям.

1
задан Community 22 September 2017 в 18:01
поделиться

1 ответ

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

Вы можете сделать что-то вроде: db.collection.find ({appName: 'Foo'}, {comments: 0}); , чтобы получить объект приложения с помощью appName Foo , но специально исключить вложенный в него объект comments (скорее, массив объектов).

Из документации MongoDB

Получение подмножества полей По умолчанию при операции поиска возвращается весь документ / объект. Однако мы также можем запросить возврат только определенных полей. Обратите внимание, что поле _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);
2
ответ дан 2 September 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: