buzztter.comの舞台裏について


no title にて活用事例を募集されているようでしたので、Ludiaのお世話になっております http://buzztter.com/ の舞台裏について簡単に紹介させていただきます。

Ludiaはbuzztterの核心部であるstatusの解析に活躍しています。Ludiaでは、全文検索を含むSQLクエリを高速に処理できるため、

SELECT COUNT(user_id) FROM statuses
  WHERE text @@ 'キーワード' AND created_at >= '2007-06-26';

のように期間を限定して特定のキーワードを発言しているユーザ数を得ることができます(実際には言語を限定するなどもう少し複雑です)。これを多数のキーワードについて繰り返し行い、キーワードの重要度を決定しています。

また、類似発言抽出機能はそのままLudiaの類似文書検索を利用しています。対象ユーザの直近の発言をクエリに入れて検索することで機能を実現しており、とても短い時間で開発できました。

buzztterの解析で利用している検索は転置インデックスだけを用いて解決できる検索ではないので、statusが溜まってくると計算時間がかかるようになるという問題点があります。現状では古いstatusを別テーブルに手動で移動し、VACUUMをかけています。この作業にけっこうな時間がかかってしまいます。自動でこまめにstatusをアーカイブするなど、対策を検討する必要がありそうです。

そのほか、buzztterは以下のサブプログラムから構成されています。

これらはCore Duo 2 E6400, Memory 2GBの自作PC上で動いています(Fetcherだけはstatus取りこぼしの防止のため別のマシンでも動かしています)。これだけでけっこう一杯一杯になっていて、他にも色々と機能を追加したいと思っていたのですがなかなか厳しいところです。