前回「Mac OSXにredisをインストール」で、redisを動かす環境まではできたので、せっかくなんでテスト的に何かサービスを作ってみよう、ということでTwitterクローンのRedTweetを作ってみました。
redisを使ったTwitterクローンは、PHP版のRetwisと、それをSinatraで書き直したRetwis-RBがあるのですが、サンプルコードはいくらっても世の中に少しは役立つだろうと思ってRails版で実装してみました。オンラインで動作できる環境はないので、git cloneしてscript/serverで手元の起動で確認ください、、と投げやり気味ですみません。とりあえず次の項目は一通り実装しています。
- ユーザID発行
- Login / Logout
- Follow / Remove
- 自分のTimeline, Public Timeline, 各ユーザのTimelineの閲覧
ちなみにRedTweetって名前はRedisとTweetを混ぜて直感でつけた名前で、git pushしたあとで同じ名前のサイトがあることが発覚したくらい直感でつけた名前です。
目的
さて、今回はまじめにTwitterクローンを作ることが目的ではなくて、実際は、次の項目を目的として実装してみました。
- Retwisのデザインを読んで、それに従って一通り実装してみる
- redisのAPIの仕様を学ぶ
- RDBを一切使わない、NoSQLでWebサービスを作るためのノウハウを身につける
結局全て似通った話になるのですが、上記のデザイン仕様書はTwitter的なサービスを作り上げることで、KVSをどのように利用すればいいのか、がかなり分かりやすく説明されてあるので、いい勉強になりました。また、ユーザ情報はString, 各TLはList, Following/FollowerをSetで管理することで、redisの主要なAPIを網羅できたことも、redisの学習に役立ちました。
と、同時に課題もすでに見えていて、
- スケーリングがどこまでできるかはまだ手元で理解できていない
- やっぱりActiveRecord的にラップしたライブラリは必須
- Followした瞬間に、そのユーザの過去のTweetを自分のTLに追加できていない
なんかが今の段階で挙げられます。1.はテストデータを作ることで解決するはず。2.はやっぱりmustだなぁ、と思えるところまでははっきりした理解で、ユーザ名をIDから引くときなど毎回決まったprefixがついたkeyから探索するのは冗長すぎてやってられません。OhmというHashとObjectのマッピングライブラリもあるので、このあたりも1度使ってみたほうが良さそうだな、というところ。3.はFollowした瞬間に一定数TweetをListにLPUSHして、そのlistの中でSORTすればいいのかな??正直、SORTまだよくわかってません。
まとめ
というわけで、課題は多いものの、redisとRailsで最低限の動作をするものは実装できました。NoSQLでもサービスを作り上げることは理解できたので、Ohmなど、他のライブラリも使ったりすることで、 redisの利点をもっと伸ばして理解を深めたいな、というところですね。
- Newer: redisでユーザをfollowしたときにTimeLineをsortして再構築
- Older: Mac OSXにredisをインストール
Google Adsense
Social bookmark comment : 0
No comment.
Comment : 0
Trackback : 1
- TrackBack URL for this entry
- http://blog.katsuma.tv/mt-tb.cgi/218
- Listed below are links to weblogs that reference
- redisとRailsでTwitterクローン「RedTweet」を作りました from blog.katsuma.tv
- redisでユーザをfollowしたときにTimeLineをsortして再構築 from blog.katsuma.tv 2010-03-27 (土) 06:34
- 前回のつづき。 課題の1つに挙げてた中で、「Followした瞬間に、そのユーザの...
2010/03/25 (Thu)