gpt4 book ai didi

perl - PostgreSQL 阻塞太多插入

转载 作者:行者123 更新时间:2023-11-29 11:55:38 24 4
gpt4 key购买 nike

我在一个研究平台上工作,该平台通过 Twitter API 读取相关的 Twitter 提要并将它们存储在 PostgreSQL 数据库中以供将来分析。中间件是 Perl,服务器是 HP ML310,8GB 内存,运行 Debian linux。

问题是 twitter 提要可能非常大(每秒很多条目),我不能等待插入再返回等待下一条推文。所以我所做的是使用 fork(),这样每条推文都会有一个新进程插入到数据库和监听器中,并快速返回以获取下一条推文。然而,由于这些进程中的每一个都有效地打开了一个与 PostgreSQL 后端的新连接,系统永远无法 catch 其 Twitter 提要。

如果有必要,我愿意使用连接池建议和/或升级硬件来完成这项工作,但我将不胜感激任何建议。这可能是 RAM 限制,还是有配置或软件方法我可以尝试使系统足够快?

最佳答案

如果您为每个 插入打开和关闭一个新连接,那将会造成很大的损失。您应该改用连接池。创建新的数据库连接并不是一件轻量级的事情。

为每个插入执行一个 fork() 可能也不是一个好主意。您不能创建一个只负责插入并在套接字上监听或扫描目录或类似内容的进程,以及另一个向插入进程发出信号的进程(经典的生产者/消费者模式)。或者使用某种消息队列(我不会Perl,所以我不能说那里有什么样的工具)。

当进行批量插入时,在单个事务中执行它们,最后发送提交。不要提交每个插入。另一种选择是将行写入文本文件,然后使用 COPY 将它们插入数据库(没有比这更快的了)。

您还可以稍微调整 PostgreSQL 服务器。如果您可以承受在系统崩溃时丢失一些事务,您可能希望关闭 synchronous_commit

如果您可以随时从头开始重建表格(例如通过重新插入推文),您可能还希望将该表格设为“未记录”表格。它在写入方面比普通表更快,但如果 Postgres 没有干净地显示下来,您将丢失表中的所有数据。

关于perl - PostgreSQL 阻塞太多插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267070/

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