2013-08-12 2 views
1

Я пытаюсь запросить базу данных mysql из node.js и отобразить ее результаты на веб-странице. Мой код работает, когда размер таблицы mysql мал. Но когда размер таблицы mysql большой, около 4 ГБ, то для выполнения запроса требуется довольно много времени. Хотя данные извлекаются из таблицы mysql (я вижу, что в консоли узла, когда я распечатываю ее), веб-страница не отображает данные. Я предполагаю, что происходит некоторый тайм-аут, и поэтому он ничего не отображает, просто говорит, что «веб-страница недоступна».Сбой веб-страницы при запросе большого количества данных из mysql с помощью node.js

вот мой код для него:

var connection = mysql.createConnection({ 
     host: 'localhost', 
     user: 'xxxx', 
     password: 'xxxxxx', 
     debug: true 
     }); 
     connection.connect(function (err) { 
      if (err) { 
      console.log('error in connection is :' + err); 
      res.send(500); 
      } else { 

      connection.query(query, function (err1, rows) { 
      // connected! (unless `err` is set) 
      if (err1) { 
      console.log('error' + err1); 
      var model = [{ 
       "error": "No data matching the query" 
      }]; 
      res.json(model); 

      } else { 
      console.log('result of query' + rows); 
      res.json(rows); 
     } 

    }); 
} 

});

Я использую dust.js для отображения данных.

Любые указатели на то, что мне не хватает, были бы полезны.

ответ

0

Возможно, вы, вероятно, не пропустите много, и, вероятно, это время, о котором вы упоминаете. Это зависит от того, как вы хотите, чтобы ваш клиент вел себя так:

1) Вы можете увеличить время ожидания клиента (возможно, это внутреннее приложение, и все в порядке увеличить? Возможно, это объект XHR, и вы можете контролировать таймаут, пусть он ждет «в фоновом режиме», пока пользователь занят другими вещами на странице?).

2) Вы можете изменить код на стороне клиента, чтобы сделать это в фоновом режиме, обновив DOM после получения результатов.

3) У вас может быть очередь на стороне сервера с результатами, сразу же возвращая клиенту «идентификатор задания» и позволяя клиенту опросить его. Или, возможно, используйте комету и отправьте уведомление клиенту после завершения задания.

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

+0

OK. Фактически, я намеревался пойти с параметром таймаута, но в модуле mysql npm, который я использую, «setTimeout() для Connection/Query» был указан как todo для модуля. Думаю, мне придется искать другие модули, в которых доступна опция таймаута. –

+0

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

+0

Справа. Понял. (На самом деле я надеялся увеличить тайм-аут.) Но я думаю, что я поеду с вашим предложением и попробую какой-нибудь асинхронный модуль. –

Смежные вопросы