gpt4 book ai didi

node.js - nodejs + postgresql 太慢了

转载 作者:搜寻专家 更新时间:2023-10-31 23:38:32 27 4
gpt4 key购买 nike

我有这段代码:

var pg = require('pg');
var QueryStream = require('pg-query-stream');
var constr = 'postgres://devel:1234@127.0.0.1/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 bench 时,它每秒只收到大约四个请求。如果我在 php/apache 或 java/tomcat 中运行相同的查询,我会快十倍结果。数据库有 1000 行。如果我将查询限制为大约十行,然后 Node 比 php/java 快一倍。

我做错了什么?

编辑:前段时间我在这里开了一个问题:https://github.com/brianc/node-postgres/issues/653

我提供这个链接是因为我在那里发布了我尝试过的代码的一些其他变体。到目前为止,即使有评论和提示,我也无法获得下降速度。

最佳答案

  • pg-query-stream使用游标。
  • 它使用光标(粗体表示强调)。
  • 您可以阅读代码并更改 batchSize 以更好地满足您的需求。

对于那些不知道游标是什么的人来说,简而言之,游标是保持较小内存占用和不读取内存中整个表的权衡。但是,如果您一次获得 100 行,而您有 1000 个结果,那就是 1000/100 次往返;所以可能 10x 比不使用游标的解决方案慢。

如果您知道需要多少行,请向您的查询添加一个限制,并更改每次返回的行数以尽量减少往返次数。

关于node.js - nodejs + postgresql 太慢了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26132930/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com