Как быстро получить большой массив из MongoDB - PullRequest
0 голосов
/ 22 октября 2018

У меня есть один документ размером 500 КБ в коллекции MongoDB, который выглядит следующим образом: массив «Содержимое» имеет 5000 записей:

{
  "BookID": "120",
  "Content": ["The day was pretty good", .42], 
             ["The day was great!", .83],
             .....
}

Выполнение запроса из узла с помощью Express занимает слишком много времени: 500–5000 мс

app.get('/sentences', function (req, res) {
  start = Date.now();
  db.collection('Sentences').find({ "BookID": "120"}).toArray(function (findErr, result) {
      if (findErr) throw findErr;
      console.log(Date.now() - start);
      res.send(result[0]);  
  });
}

Существует ли правильный способ хранения или запроса данных, подобных этому, и получения быстрого времени запроса, или я должен использовать что-то, кроме MongoDB?В конечном итоге я хочу хранить тысячи таких книг, без необходимости сложных запросов.

Ответы [ 4 ]

0 голосов
/ 08 мая 2019

Я закончил хранить данные в виде файлов JSON в S3.Быстрее и дешевле

0 голосов
/ 22 октября 2018

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

Какэто прямой запрос для извлечения данных (и даже не сложного поиска), его сложно сделать быстрее обычными методами.Но, в зависимости от ваших вариантов использования, вы можете сделать это намного быстрее,

, например, кэшируя результаты с помощью Redis .

0 голосов
/ 22 октября 2018

Используйте lean () в своем запросе, если вы не собираетесь выполнять какие-либо команды добавления, обновления, удаления в выходном документе.Использование lean даст вывод в javascript, и ни одна из команд mongoose не сработает с результатом doc.http://www.tothenew.com/blog/high-performance-find-query-using-lean-in-mongoose-2/

db.collection('Sentences').find({ "BookID": "120"}).lean().toArray(function (findErr, result) {
  if (findErr) throw findErr;
  console.log(Date.now() - start);
  res.send(result[0]);  
});
0 голосов
/ 22 октября 2018

используйте подсказку для повышения производительности запросов.

app.get('/sentences/:id', function (req, res) {
 var bookID=req.params.id

 start = Date.now();
      db.collection('Sentences')
     .find()
     .hint("BookID_"+bookID)
     .toArray(function (findErr, result) {
       if (findErr) throw findErr;
        console.log(Date.now() - start);
        res.send(result[0]);  
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...