Пн goose запрос очень медленный (даже с бережливым) - PullRequest
0 голосов
/ 27 мая 2020

Я использую MongoDB и обрабатываю любые модификации с помощью Mon goose in Express. Я думаю, что запрос должен быть намного быстрее. Поправьте меня, если я ошибаюсь, но пока эти данные большие, они не такие уж большие. Тем более, что я не фильтрую или что-то еще во время запроса.

Итак, модель, которую я использую:

const DataSchema = mongoose.Schema({
  title: String,
  text: String,
  text_transform: Array,
  provider: String,
  url: {
    type: String,
    unique: true,
  },
  word_count: Array,
  HOW: Array,
  date: Date,
  click_count: Number,
}); 

Несколько общих истин:
текст размер может изменяться. Может быть 150 символов, но может быть, скажем, 7000 символов ... может быть, даже больше (но обычно меньше 7000).
text_transform - это массив, элементами которого являются слова из text .
provider - это короткая строка, максимум, который у меня в настоящее время составляет 12 символов.
word_count - это массив, содержащий пары ключ-значение (массивы) как элементы, например:

[
   ["key", value], ["other_key", other_value], ...
]

значения - числа, а ключи - строки.
HOW - массив с максимум 5 элементами, которые являются строками . ~ 6-10 символов.

У меня есть собственный API, и запрос к какой-то конечной точке обычно запускает запрос.
Моя проблема связана с попыткой получить все мои данные.

Поэтому я отправляю запрос на это конечная точка:

router.get("/", async (req, res) => {
  try {
    const data = await DataSchema.find({}).lean();
    res.json(data);
  } catch (err) {
    res.status(404);
  }
});

Как видите, я уже использую Lean () , потому что меня устраивает простой json.
Однако, когда я использую запрос на стороне клиента:
DevTools (F12) - Сеть
детали запроса xhr
на данный момент в моей базе данных было около 270 документов.

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

Есть ли способ сделать это быстрее?

Дополнительно вас может заинтересовать: Для разработки я использую бесплатный уровень MongoDB Atlas (поэтому нет профилировщика и / или аналитики производительности ), и я еще не нахожусь в производственной среде, поэтому у меня нет производственной среды для тестирования. Кроме того, это Бельгия (europe-west1), это самый близкий мне регион, но это не должно иметь большого значения.

Кроме того, я попытался удалить text_transform , поскольку я это необязательно нужно прямо сейчас. Нет особой разницы.

EDIT:

Я забыл сказать, я реализовал конечную точку, которая возвращает жестко запрограммированное json. Это делается менее чем за 1 мс. Вот почему я думаю, что запрос здесь медленный.

.explain () results

[
  {
    queryPlanner: {
      plannerVersion: 1,
      namespace: 'test.articles',
      indexFilterSet: false,
      parsedQuery: {},
      winningPlan: [Object],
      rejectedPlans: []
    },
    executionStats: {
      executionSuccess: true,
      nReturned: 301,
      executionTimeMillis: 0,
      totalKeysExamined: 0,
      totalDocsExamined: 301,
      executionStages: [Object],
      allPlansExecution: []
    },
    serverInfo: {
      host: 'some.database-shard.mongodb.net',
      port: 27017,
      version: '4.2.6',
      gitVersion: '20364840b8f1af16917e4c23c1b5f5efd8b352f8'
    },
    ok: 1,
    '$clusterTime': { clusterTime: '6831457389108002820', signature: [Object] },
    operationTime: '6831457389108002820'
  }
]

Спасибо, что нашли время, чтобы прочитать, и спасибо за ваше помощь заранее.

1 Ответ

0 голосов
/ 27 мая 2020

Для всех, кто сталкивается с той же проблемой. Мне показалось подозрительным, что это Атлас MongoDB, и это так. Это могло быть перегрузкой, так как это бесплатный пакет M0-sandbox, использующий общие серверы. Я никогда не узнаю точно. С другой стороны, это довольно удобно, так как в производственной среде нечто подобное не должно обязательно происходить.

TL; DR

Я перешел на другой бесплатный Поставщик mongodb для разработки, и все загружается мгновенно.

...