我正在开展一个项目,该项目需要我获取实时 Twitter 提要并将其中的记录存储在 PostgreSQL 数据库中。该项目要求存储推文的位置数据,以便在 PostGIS 下进行搜索。我正在使用 perl 脚本来获取 Twitter 提要(使用 AnyEvent::Twitter::Stream 和 Twitter API)。每 5000 条推文,脚本 fork()s 和子进程发出 SQL 以插入行。我正在使用 AutoCommit => 0 来加快插入速度。
问题是子进程在下一个 5000 条推文进入之前没有完成存储 5000 条推文,所以我得到了许多 postgres 进程。我需要弄清楚如何加快数据库插入速度,以使子进程在下一个启动之前退出。
子进程现在(对于每条推文)执行的任务是:
- 在 tweets 表中插入一条记录,使用 ST_GeomFromEWKT 将纬度/经度数据转换为 GIS 坐标
- 确保推文的作者和推文中提到的任何用户都在用户表中
- 在相关表格中插入提及用户和主题标签
任何有关诊断速度或加快过程的建议都将是最有帮助的。这最终必须实时工作,因此临时表和文本文件不是好的选择。该服务器是运行 Debian 的双 Xeon HP 服务器,具有 8G 内存。