当使用Postgres连接协议时,对QuestDB的摄取非常慢



在向QuestDB表插入行时,我有一个摄取时间问题。表定义:

create table trade1 (
id symbol,
buy_order_id string,
currency string,
price float,
quantity float,
instrument_id symbol,
sell_order_id string,
status string,
subtype symbol,
"type" string,
transact_time timestamp,
buy_trader_id string,
sell_trader_id string);
) timestamp(transact_time)  PARTITION BY DAY;

我有一个ETL进程,它从CSV文件中提取数据,并使用JDBC Postgrs驱动程序插入数据。

当我从第一个文件中插入数据到空表时-对于~300k行需要~60s。但是对于第二个文件,它需要更长的时间——180秒。第四个文件超过10分钟。

所有文件的行数相似。

当我只保留一个symbol列时,它似乎更快,但速度随着插入更多行而下降:

create table trade1 (
id string,
buy_order_id string,
currency string,
price float,
quantity float,
instrument_id symbol,
sell_order_id string,
status string,
subtype string,
"type" string,
transact_time timestamp,
buy_trader_id string,
sell_trader_id string);
) timestamp(transact_time)  PARTITION BY DAY;

插入时间:15秒,19秒,29秒,37秒,35秒,59秒,62秒,74秒,所以它是连续增长的。

似乎摄取时间与插入的行数一起增长,但当甚至没有索引定义时,这怎么可能呢?

server.conf:

data:
server.conf: |
cairo.sql.append.page.size = 256
pg.worker.affinity = 1,2,3,4
pg.worker.count = 4
shared.worker.count = 2

QuestDB使用Helm chart部署在Kubernetes上。

我错过了一些核心概念吗?

如果您将instrument_id从SYMBOL更改为STRING,它是否仍然表现出缓慢?

如果您可以"原样"摄取源CSV,那么REST导入的速度就快得离谱了。

在我的基准测试中,与REST/imp和InfluxDB Line protocol相比,使用PostgreSQL连接协议是最慢的(花费2-3倍的时间)。

最新更新