【发布时间】:2013-11-21 02:23:07
【问题描述】:
我正在开展一个项目,该项目需要我获取实时 Twitter 提要并将其中的记录存储在 PostgreSQL 数据库中。该项目要求存储推文的位置数据,以便在 PostGIS 下进行搜索。我正在使用 perl 脚本来获取 Twitter 提要(使用 AnyEvent::Twitter::Stream 和 Twitter API)。每 5000 条推文,脚本 fork()s 和子进程发出 SQL 以插入行。我正在使用 AutoCommit => 0 来加快插入速度。
问题是子进程在下一个 5000 条推文进入之前没有完成存储 5000 条推文,所以我得到了许多 postgres 进程。我需要弄清楚如何加快数据库插入速度,以使子进程在下一个启动之前退出。
子进程现在(针对每条推文)执行的任务是:
- 在 tweets 表中插入一条记录,使用 ST_GeomFromEWKT 将纬度/经度数据转换为 GIS 坐标
- 确保推文的作者和推文中提到的任何用户都在用户表中
- 在相关表格中插入提及用户和主题标签
任何有关诊断速度或加快过程的建议都会很有帮助。这最终必须实时工作,因此临时表和文本文件不是好的选择。该服务器是运行 Debian 的双至强 HP 服务器,内存为 8G。
【问题讨论】:
-
[Bulk load][1],是否考虑将其增加到 5000 以上? [1]:stackoverflow.com/questions/758945/…
-
你怎么能问性能,然后不给出任何数字?您是否每小时、每分钟、每秒获取 5000 条推文?您在 RAID10、U 盘中使用 16 x SSD 的磁盘是什么?
标签: perl postgresql twitter postgis