gpt4 book ai didi

python - 如何查询 PostgreSQL 中的写重表?

转载 作者:行者123 更新时间:2023-11-29 13:48:41 25 4
gpt4 key购买 nike

我有一个 PostgreSQL 表,全天平均记录约 600 万条记录。在记录记录时查询表需要很长时间。有没有办法从该表创建一个流媒体,它将发布新记录?我希望能够在记录更改时将更改流式传输到我的网站。

在 postgres 中查询表需要这么长时间的原因是因为我有大约 550 个同时线程连接执行来自不同来源的插入。每个线程对数据进行特定的分析并存储有值(value)的信息。我使用 Perl 抓取、快速分析和加载数据,但在 Python 中从 postgres 表构建查询。

在加载期间,即使我通过 pgAdmin 通过 SQL 查询(读取查询)表:

select var1, var2, var3 from pg_table 
where filter = 'xyz'

甚至

select * from pg_table limit 100

查询非常慢,这意味着结果需要大约 4 分钟才能返回。当表未加载数据时,大约需要 3 秒。

顺便说一句,谢谢你所有的建议。我刚刚在我的表上运行了解释分析,因为它正在加载数据。这是查询:

EXPLAIN ANALYZE select count(call_option_symbol) from optionsputnik;

结果如下:

QUERY PLAN
Aggregate (cost=357092.30..357092.31 rows=1 width=51) (actual time=342775.893..342775.893 rows=1 loops=1)
-> Seq Scan on optionsputnik (cost=0.00..342868.24 rows=5689624 width=51) (actual time=0.025..341802.509 rows=5686946 loops=1)
Planning time: 415.781 ms
Execution time: 342775.974 ms

我会尝试对表进行索引,我知道这会加快查询时间但不会进行交互(处理来自网络的请求、查询表并返回)。

这是没有任何内容写入表时的查询计划结果:

QUERY PLAN
Aggregate (cost=463634.94..463634.95 rows=1 width=0) (actual time=2326.104..2326.104 rows=1 loops=1)
-> Seq Scan on optionsputnik (cost=0.00..445164.95 rows=7387995 width=0) (actual time=0.029..1773.378 rows=7383752 loops=1)
Planning time: 0.045 ms
Execution time: 2326.149 ms

下面是我的表结构:

column_name,data_type,character_maximum_length
load_time,character,30
call_option_symbol,character,50
call_bid,double precision,
call_ask,double precision,
call_bid_ask_size,character,50
call_last,character,50
call_delta,double precision,
call_volume,double precision,
call_open_interest,double precision,
put_bid,double precision,
put_ask,double precision,
put_bid_ask_size,character,50
put_last,character,50
put_delta,double precision,
put_volume,double precision,
put_open_interest,double precision,

我正在考虑尝试将表拆分为 n 个单独的表以减少同时写入连接的数量。还有什么我可以尝试或测试的吗?

最佳答案

检查您的 I/O 子系统是否承受压力——这可以解释它所花费的时间。

如果您通过使用索引避免顺序扫描,您会有所收获,但这会大大减慢插入速度。

天下没有免费的午餐

您可以尝试添加足够的 RAM 以便缓存表,这将大大加快查询速度。

关于python - 如何查询 PostgreSQL 中的写重表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44418920/

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