Mongodb find() занимает 1 секунду

#arrays #node.js #mongodb #mongoose

#массивы #node.js #mongodb #mongoose

Вопрос:

В моей базе данных mongodb есть коллекция с именем «restaurants».

В этой коллекции есть только один документ

Проблема в том, что когда я извлекаю его с помощью mongoose, по Model.find({restaurantUid}) , для его извлечения требуется около 1 second .

В этом документе ресторана содержится около 140 продуктов (foods), и у меня есть массив этих продуктов n x n, таблица, чтобы отслеживать, какие блюда выбираются по какому блюду. Размер документа составляет около 3 МБ.

Не могли бы вы предложить мне способ уменьшить это время выборки?

Я действительно не думаю, что проблема связана с индексацией, поскольку в моей коллекции есть только один документ.

Заранее спасибо.

Ответ №1:

Если вы используете Mongoose для своего приложения, ваш код может выглядеть следующим образом для повышения производительности…

 Model.findById(_id)
     .lean()
     .exec(function (err, doc) {
     //handle error and results
});
  
  1. Model.findById(_id) вместо Model.find() . Потому что перед отправкой команды _id выполняется приведение на основе схемы.
    Ссылка: документ mongoosejs для findById()

  2. Query.prototype.lean() который возвращает простые объекты javascript и обеспечивает высокую производительность для сценариев только для чтения. ссылка: документ mongoosejs для lean()

Также следите за этим обсуждением:https://groups.google.com/forum /#!тема/mongoose-orm/u2_DzDydcnA/обсуждение

Ответ №2:

Насколько мне известно, нет способа ускорить выборку, я имею в виду, вы могли бы использовать какой-нибудь облачный сервис базы данных, такой как «MongoDB Altas», и купить хороший план, чтобы у вас было лучшее подключение к серверу и надеяться на лучшее ?.

Я предполагаю, что ваша база данных mongo запущена локально на вашем компьютере, и я не думаю, что вы можете ускорить этот процесс.

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

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

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