原标题:如何在javascript中减慢PgSQL结果行流?
我在使用RXJS(5.4.0)和PostgreSQL(驱动程序"pg":"6.1.4")的nodejs v4.5.0中遇到了内存不足的问题.
我手动创建一个可观察的PgSQL行,如下所示:
return Rx.Observable.create((subscriber) => {
pool.connect().then((client: pg.Client) => {
const stream:any = client.query(query.toParam());
stream.on('row', (row) => {
subscriber.next(row);
});
stream.on('end', () => {
subscriber.complete();
client.release();
});
});
});
Run Code Online (Sandbox Code Playgroud)
然后我将一些运算符附加到rx observable并进行一些处理.请注意,从数据库返回的行有点重.
调查得出一个结论: 数据库中的行返回得快得多,然后才能处理.必须为重型数据保留内存才能等待处理,这会导致内存不足问题:
致命错误:CALL_AND_RETRY_LAST分配失败 - 处理内存不足
中止陷阱:6
我没有在PostgreSQL驱动程序上看到任何选项来暂停流.我有什么想法可以解决这个问题?
考虑以下两个图,第一个使用通用图函数,第二个使用plot.xts:
一般情节
par(mfrow = c(2,1))
plot(1:5, type="l", main = "generic plot")
lines(5:1)
Run Code Online (Sandbox Code Playgroud)
如预期的那样,线条功能会添加到现有图形中,因此会生成单个图形
我将mfrow = c(2,1)设置为向您显示,只有一个图。现在使用xts数据:
par(mfrow = c(2,1))
plot(xts(x = 1:5, order.by = 1:5+as.Date("2017-01-01")), type="l", main = "plot.xts")
lines(xts(x = 5:1, order.by = 1:5+as.Date("2017-01-01")), main = "plot.xts")
Run Code Online (Sandbox Code Playgroud)
出乎意料的是,它会生成两个图。为什么?
我的情况特别复杂,但是我发现这段代码片断是重现我的问题的最简单方法。基本上,我想继续在一个绘图上添加xts数据。我能够使用通用的绘图和线条功能来实现。
平台信息:R版本3.4.3(2017-11-30)平台:x86_64-apple-darwin15.6.0(64位)在以下环境下运行:macOS High Sierra 10.13.2quantmod_0.4-12 xts_0.10-1
javascript ×1
node.js ×1
plot ×1
postgresql ×1
quantmod ×1
r ×1
rxjs ×1
time-series ×1
typescript ×1
xts ×1