use*_*094 2 postgresql twitter perl insert
我正在研究一个研究平台,通过Twitter API读取相关的Twitter提要,并将它们存储在PostgreSQL数据库中以供将来分析.中间件是Perl,服务器是运行Debian linux的8GB内存的HP ML310.
问题是twitter feed可能非常大(每秒很多条目),而且在返回等待下一条推文之前我无法等待插入.所以我所做的就是使用fork(),这样每条推文都会获得一个新进程,可以插入到数据库和监听器中,并快速返回以获取下一条推文.但是,因为这些进程中的每一个都有效地打开了与PostgreSQL后端的新连接,所以系统永远不会赶上它的twitter feed.
我愿意使用连接池建议和/或升级硬件,如果有必要使这项工作,但将不胜感激任何建议.这可能是RAM限制,还是有配置或软件方法我可以尝试使系统足够快?
如果为每个插入打开和关闭一个新连接,那将会耗费大量时间.您应该使用连接池.创建新的数据库连接不是一件轻松的事情.
为每个插入做一个fork()可能也不是一个好主意.你不能创建一个简单地处理套接字上的插入和监听的进程,或扫描目录或类似的东西以及发出插入过程的信号的另一个进程(传统的生产者/消费者模式).或者使用某种消息队列(我不知道Perl,所以我不能说那里有什么样的工具).
在进行批量插入时,在单个事务中执行它们,最后发送提交.不要提交每个插入.另一种选择是将行写入文本文件,然后使用COPY它们将它们插入到数据库中(它不会比这更快).
您也可以稍微调整PostgreSQL服务器.如果您在系统崩溃时可以丢失一些交易,则可能需要synchronous_commit关闭.
如果您可以随时从头开始重建表(例如通过重新插入推文),您可能还希望将该表设为"未记录"表.它在写入时比常规表更快,但如果没有干净地显示Postgres,则会丢失表中的所有数据.
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |