ヒウィッヒ・ドットコム
とgroonga
groonga + mroonga + Scala + Pythonで作る
Twitter検索サービス
http://hiwihhi.com
書いた人 @shimariso
1
ヒウィッヒ・ドットコム
とは
• 「高密度」Twitter検索サービス
• フォロワー数やFav/RT数等と無関係な、ある基
準を満たすユーザー又はツイートのみ検索対象
• 発言者の「客観的な」プロフィールを常に表示
• ツイート表示ページに「前後の発言」を10件ず
つ一緒に表示するため、コンテキストの連続した
ツイートも簡単に追跡
2
元々は・・・
• 任意のツイートに2ch風コメントを
付けるという思いつきで作ったサー
ビスだった
• 以前にsennaを使ったことがあるの
で、試しに groongaでツイート検
索機能を実装したらそっちのほうが
便利だった(但しユーザーにはア
ピールせず、数年間に渡って隠し機
能扱い)
• 肝心のコメント機能にはほぼスパム
しか来ず、他に来る物と言えば内容
証明(ほんとうです)
しょうがないので
検索サービスってこ
とにしてリニューア
ルしました。
もうどうにでもなー
れ。
3
アーキテクチャ
※クラウドでも分散でもビッグデータでもないので
意識高いエンジニアの皆さんは見る必要ないです。
MySQL
mroonga
groonga groonga
データストア
InnoDB
MyISAM
全文検索の
必要ないテーブル
全文検索「も」
したいテーブル
Tomcat
JDBC
Spring
Framework/
Spring MVC
REST API
(Scalaで実装)
jackson/jackson-module-scala
(Java/ScalaオブジェクトとJSONの
相互自動変換) SQL
groonga
HTTPサービス
10041/tcp
application/json
Apache
mod_wsgi
Webフロントエンド
(Pythonで実装)
python-asynchttp
(非同期HTTPクライアント)
8080/tcp
application/json
Flask
80/tcp
text/html
管理コマンド群/クローラ
(Pythonで実装)
ユーザー
https://pypi.python.org/pypi/twitter
(Python用Twitter APIフロントエンド)
4
誰得www
本当に聞かれたら書きます。
• どうして SQLとHTTPの両方を使って groongaにアクセスするの?
• どうしてScalaなのに Springなの?
• ていうかJava系ならLucene使ったほうがよくない?なんで
groonga?
• REST APIの呼び出しに非同期HTTPを使うわけは?
• わざわざ APIとフロントエンドを分けて別々の言語で実装してるのは
どうして?
• その他 groongaで実際にモノを作ってて起こったことなどkwsk
5
おわり
6

groongaとScalaとPythonで作る Twitter検索 - ヒウィッヒ・ドットコム