Your SlideShare is downloading. ×
0
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
YAPC::Asia
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

YAPC::Asia

3,048

Published on

Published in: Sports, Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,048
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
11
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. mixiチェックインの裏側 YAPC::Asia Tokyo 2010 株式会社ミクシィ 原田 星児
  • 2. ●自己紹介 ●mixiチェックインについて ●スポットの絞込み方法 ●高速化 ●まとめ アジェンダ
  • 3. ●原田 星児 ●株式会社ミクシィ サービス本部 コアサービス部 開発グループ コミュニケーション開発チーム 所属 ●最近のお仕事 フォトリニューアル(モバイル) フォトボイス連携(モバイル) mixiチェックイン(モバイル) 自己紹介 8年前 こんなのも作ってました
  • 4. mixiチェックインについて 「mixiチェックイン」は、携帯電話のGPS機能を利用して、 今いる場所やお店(スポット)を簡単に友人・知人に共有できる 『mixi』の新しいコミュニケーション機能です。(弊社プレスリリースより)
  • 5. geohashの前方一致 スポットの絞込み方法
  • 6. 緯度経度の範囲を文字列で表す仕組み 例)緯度:+ 35.7298508752137 経度:+ 139.716479647905 → xn77726mmy ココ geohashとは
  • 7. geohashから座標を求めよう
  • 8. xn77726mmy 29|20|7|7|7|2|6|19|19|30 BASE32 11101|10100|00111|00111|00111|00010|00110|10011|10011|11110 2進化 1110001101011010100110111 → 経度 1011001011010000110101110 → 緯度 11101|10100|00111|00111|00111|00010|00110|10011|10011|11110 座標を求めてみよう
  • 9. 座標を求めてみよう 11101|10100|00111|00111|00111|00010|00110|10011|10011|11110 x n 7 7 7 2 6 m m y
  • 10. 座標を求めてみよう 11101|10100|00111|00111|00111|00010|00110|10011|10011|11110 x n 7 7 7 2 6 m m y
  • 11. 座標を求めてみよう 11101|10100|00111|00111|00111|00010|00110|10011|10011|11110 x n 7 7 7 2 6 m m y
  • 12. 座標を求めてみよう 11101|10100|00111|00111|00111|00010|00110|10011|10011|11110 x n 7 7 7 2 6 m m y
  • 13. 11101|10100|00111|00111|00111|00010|00110|10011|10011|11110 x n 7 7 7 2 6 m m y 座標を求めてみよう
  • 14. 座標を求めてみよう 11101|10100|00111|00111|00111|00010|00110|10011|10011|11110 x n 7 7 7 2 6 m m y
  • 15. 座標を求めてみよう 11101|10100|00111|00111|00111|00010|00110|10011|10011|11110 x n 7 7 7 2 6 m m y
  • 16. 座標を求めてみよう 11101|10100|00111|00111|00111|00010|00110|10011|10011|11110 x n 7 7 7 2 6 m m y
  • 17. 座標を求めてみよう 11101|10100|00111|00111|00111|00010|00110|10011|10011|11110 x n 7 7 7 2 6 m m y
  • 18. 座標を求めてみよう 11101|10100|00111|00111|00111|00010|00110|10011|10011|11110 x n 7 7 7 2 6 m m y
  • 19. 座標を求めてみよう 11101|10100|00111|00111|00111|00010|00110|10011|10011|11110 x n 7 7 7 2 6 m m y 特定しました!
  • 20. ● geohashが短いと範囲が広がる 青枠の中の座標は 全て XN7772 から始まる XN7772 の前方一致で 範囲内の検索ができる スポットの絞込み方法
  • 21. 落とし穴がある
  • 22. この辺りも含めたい!! GPSの計測結果 ●矩形の隅っこの場合 スポットの絞込み方法
  • 23. 範囲を広げるには? geohashの文字数を削る なぜ? スポットの絞込み方法
  • 24. xn7772 → xn777 落とし穴 含めたいのはココ
  • 25. 含むまで削ると・・・ 広がりすぎ 落とし穴
  • 26. どうすればいい?
  • 27. とりあえず周囲のマス取ってみた 考えてみた
  • 28. いい感じ
  • 29. でも・・・ ・・・明らかに遠いので削る 考えてみた
  • 30. とてもいい感じ
  • 31. ●geohash ●mysql ●計算処理を早くできないか? ●無駄なクエリを減らす事はできないか? 高速化について
  • 32. ●Geo::Hash (http://search.cpan.org/dist/Geo-Hash/) ●ベンチマーク ●隣接するgeohashを求めるadjacentメソッドがある geohash Encode Benchmark: timing 500000 iterations of Geo::Hash encode, Geo::Hash::XS encode... Geo::Hash encode: 137 wallclock secs (136.95 usr + 0.00 sys = 136.95 CPU) @ 3650.97/s (n=500000) Geo::Hash::XS encode: -1 wallclock secs ( 0.66 usr + 0.00 sys = 0.66 CPU) @ 757575.76/s (n=500000) Rate Geo::Hash encode Geo::Hash::XS encode Geo::Hash encode 3651/s -- -100% Geo::Hash::XS encode 757576/s 20650% -- Decode Benchmark: timing 1000000 iterations of Geo::Hash decode, Geo::Hash::XS decode... Geo::Hash decode: 112 wallclock secs (111.68 usr + 0.03 sys = 111.71 CPU) @ 8951.75/s (n=1000000) Geo::Hash::XS decode: 2 wallclock secs ( 0.79 usr + 0.00 sys = 0.79 CPU) @ 1265822.78/s (n=1000000) Rate Geo::Hash decode Geo::Hash::XS decode Geo::Hash decode 8952/s -- -99% Geo::Hash::XS decode 1265823/s 14041% -- ●Geo::Hash::XS (http://search.cpan.org/dist/Geo-Hash-XS/)
  • 33. ●キャッシュ化 ●スポット情報が頻繁に変わらない ●検索は6文字のgeohash 結果 関東と関西をキャッシュ キー総数は65536 カバー率は38% 6文字のgeohashをキーにして Memcachedに積んじゃえ!! mysql
  • 34. ●6文字のgeohashによる前方一致で絞込み ●最小で1つ、最大で4つのキーで検索 ●geohash周りの計算はGeo::Hash::XSで高速化 ●検索半径250mでキーの平均値は2.66個 (250mの根拠は検証時のGPSのズレの最大値) まとめ ●GPSの精度が上がれば7文字もアリ ●無駄なクエリを減らすためにキャッシュ化
  • 35. 浅草 雷門 位置情報を楽しもう!
  • 36. ご清聴ありがとうございました

×