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