我有這樣一段代碼:+的NodeJS PostgreSQL的方式太慢
var pg = require('pg');
var QueryStream = require('pg-query-stream');
var constr = 'postgres://devel:[email protected]/tcc';
var JSONStream = require('JSONStream');
var http = require('http');
pg.connect(constr, function(err, client, done) {
if (err) {
console.log('Erro ao conectar cliente.', err);
process.exit(1);
}
sql = 'SELECT \
pessoa.cod, \
pessoa.nome, \
pessoa.nasc, \
cidade.nome AS cidade \
FROM pessoa, cidade \
WHERE cidade.cod IN (1, 2, 3);';
http.createServer(function (req, resp) {
resp.writeHead(200, { 'Content-Type': 'text/html; Charset=UTF-8' });
var query = new QueryStream(sql);
var stream = client.query(query);
//stream.on('data', console.log);
stream.on('end', function() {
//done();
resp.end()
});
stream.pipe(JSONStream.stringify()).pipe(resp);
}).listen(8080, 'localhost');
});
當我在它上面運行Apache的替補席,它獲得每秒大約只有四項要求。 如果我在php/apache或java/tomcat中運行相同的查詢,我會得到十倍於 的結果。該數據庫有1000行。如果我將查詢限制爲大約十行,則 那麼節點比php/java快兩倍。
我在做什麼錯?
編輯:前一段時間我在這裏開了一個問題:https://github.com/brianc/node-postgres/issues/653
,因爲我張貼那裏我已經嘗試了一些代碼,其他的變化,我提供這個鏈接。 即使有評論和提示到目前爲止,我還沒有能夠獲得下降的速度。
您的所有客戶端是否與數據庫共享相同的連接?如果是這種情況,您的請求可能會被序列化。我不確定此代碼是否正確使用連接池。 – Brandon 2014-10-01 01:57:33
@Brandon,是的,他們是。我也試過[這個來自node-postgres文檔的例子](https://github.com/brianc/node-postgres/wiki/Example),但結果大致相同。 – 2014-10-01 11:38:15
@FernandoBasso,首先,我沒有真正使用任何類型的sql數據庫,但是從我讀到的有關querystream的內容來看,它只保留內存中的少量行。所以我認爲瓶頸是querystream,你可以嘗試沒有查詢流 – 2014-11-08 21:41:39