私は、ライブ Twitter フィードを取得し、そこからレコードを PostgreSQL データベースに保存する必要があるプロジェクトに取り組んでいます。このプロジェクトでは、ツイートの位置データを PostGIS で検索できるように保存する必要があります。Twitter フィードを取得するために perl スクリプトを使用しています (AnyEvent::Twitter::Stream と Twitter API を使用)。5000 ツイートごとに、スクリプト fork() と子プロセスが SQL を発行して行を挿入します。挿入を高速化するために AutoCommit => 0 を使用しています。
問題は、子プロセスが次の 5000 件のツイートが入る前に 5000 件のツイートの保存を完了していないため、多数の postgres プロセスが発生することです。次のプロセスが開始される前に子プロセスが終了できるように、データベースの挿入を高速化する方法を理解する必要があります。
子プロセスが (各ツイートに対して) 現在実行しているタスクは次のとおりです。
- ST_GeomFromEWKT を使用して緯度/経度データを GIS 座標に変換し、ツイート テーブルにレコードを挿入します。
- ツイートの作成者とツイートで言及されているユーザーが users テーブルにあることを確認します
- 関連するテーブルにユーザーとハッシュタグの言及を挿入する
速度の診断またはプロセスの高速化に関するアドバイスは、最も役に立ちます。これは最終的にリアルタイムで機能する必要があるため、一時テーブルとテキスト ファイルは適切なオプションではありません。サーバーは、8G の RAM を搭載した Debian を実行するデュアル Xeon HP サーバーです。