SlideShare une entreprise Scribd logo
1  sur  36
mixiチェックインの裏側
YAPC::Asia Tokyo 2010
株式会社ミクシィ
原田 星児
●自己紹介
●mixiチェックインについて
●スポットの絞込み方法
●高速化
●まとめ
アジェンダ
●原田 星児
●株式会社ミクシィ
サービス本部 コアサービス部 開発グループ
コミュニケーション開発チーム 所属
●最近のお仕事
フォトリニューアル(モバイル)
フォトボイス連携(モバイル)
mixiチェックイン(モバイル)
自己紹介
8年前
こんなのも作ってました
mixiチェックインについて
「mixiチェックイン」は、携帯電話のGPS機能を利用して、
今いる場所やお店(スポット)を簡単に友人・知人に共有できる
『mixi』の新しいコミュニケーション機能です。(弊社プレスリリースより)
geohashの前方一致
スポットの絞込み方法
緯度経度の範囲を文字列で表す仕組み
例)緯度:+ 35.7298508752137
経度:+ 139.716479647905
→ xn77726mmy
ココ
geohashとは
geohashから座標を求めよう
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
座標を求めてみよう
座標を求めてみよう
11101|10100|00111|00111|00111|00010|00110|10011|10011|11110
x n 7 7 7 2 6 m m y
座標を求めてみよう
11101|10100|00111|00111|00111|00010|00110|10011|10011|11110
x n 7 7 7 2 6 m m y
座標を求めてみよう
11101|10100|00111|00111|00111|00010|00110|10011|10011|11110
x n 7 7 7 2 6 m m y
座標を求めてみよう
11101|10100|00111|00111|00111|00010|00110|10011|10011|11110
x n 7 7 7 2 6 m m y
11101|10100|00111|00111|00111|00010|00110|10011|10011|11110
x n 7 7 7 2 6 m m y
座標を求めてみよう
座標を求めてみよう
11101|10100|00111|00111|00111|00010|00110|10011|10011|11110
x n 7 7 7 2 6 m m y
座標を求めてみよう
11101|10100|00111|00111|00111|00010|00110|10011|10011|11110
x n 7 7 7 2 6 m m y
座標を求めてみよう
11101|10100|00111|00111|00111|00010|00110|10011|10011|11110
x n 7 7 7 2 6 m m y
座標を求めてみよう
11101|10100|00111|00111|00111|00010|00110|10011|10011|11110
x n 7 7 7 2 6 m m y
座標を求めてみよう
11101|10100|00111|00111|00111|00010|00110|10011|10011|11110
x n 7 7 7 2 6 m m y
座標を求めてみよう
11101|10100|00111|00111|00111|00010|00110|10011|10011|11110
x n 7 7 7 2 6 m m y
特定しました!
● geohashが短いと範囲が広がる
青枠の中の座標は
全て XN7772 から始まる
XN7772 の前方一致で
範囲内の検索ができる
スポットの絞込み方法
落とし穴がある
この辺りも含めたい!!
GPSの計測結果
●矩形の隅っこの場合
スポットの絞込み方法
範囲を広げるには?
geohashの文字数を削る
なぜ?
スポットの絞込み方法
xn7772 → xn777
落とし穴
含めたいのはココ
含むまで削ると・・・
広がりすぎ
落とし穴
どうすればいい?
とりあえず周囲のマス取ってみた
考えてみた
いい感じ
でも・・・
・・・明らかに遠いので削る
考えてみた
とてもいい感じ
●geohash
●mysql
●計算処理を早くできないか?
●無駄なクエリを減らす事はできないか?
高速化について
●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/)
●キャッシュ化
●スポット情報が頻繁に変わらない
●検索は6文字のgeohash 結果
関東と関西をキャッシュ
キー総数は65536
カバー率は38%
6文字のgeohashをキーにして
Memcachedに積んじゃえ!!
mysql
●6文字のgeohashによる前方一致で絞込み
●最小で1つ、最大で4つのキーで検索
●geohash周りの計算はGeo::Hash::XSで高速化
●検索半径250mでキーの平均値は2.66個
(250mの根拠は検証時のGPSのズレの最大値)
まとめ
●GPSの精度が上がれば7文字もアリ
●無駄なクエリを減らすためにキャッシュ化
浅草 雷門
位置情報を楽しもう!
ご清聴ありがとうございました

Contenu connexe

Similaire à YAPC::Asia

LINE WORKSを活用したチャットボットが現場とkintoneを繋ぐ
LINE WORKSを活用したチャットボットが現場とkintoneを繋ぐLINE WORKSを活用したチャットボットが現場とkintoneを繋ぐ
LINE WORKSを活用したチャットボットが現場とkintoneを繋ぐTomohisa Hoshino
 
アドネットワーク凛 媒体資料
アドネットワーク凛 媒体資料アドネットワーク凛 媒体資料
アドネットワーク凛 媒体資料Harumasa Matsushita
 
「マシンリーダビリティ」がユーザー体験を加速する
「マシンリーダビリティ」がユーザー体験を加速する「マシンリーダビリティ」がユーザー体験を加速する
「マシンリーダビリティ」がユーザー体験を加速するYoshinori OHTA
 
ASP.net MVC で Stripe 課金を実装してみた話
ASP.net MVC で Stripe課金を実装してみた話ASP.net MVC で Stripe課金を実装してみた話
ASP.net MVC で Stripe 課金を実装してみた話Yukihito Kataoka
 
WebとEmailのパーソナライズをGAとZoho CRMで安価に実現する方法
WebとEmailのパーソナライズをGAとZoho CRMで安価に実現する方法WebとEmailのパーソナライズをGAとZoho CRMで安価に実現する方法
WebとEmailのパーソナライズをGAとZoho CRMで安価に実現する方法Makoto Shimizu
 
"Kong Summit, Japan 2022" Kongコミュニティセッション:政府が掲げるデジタル田園都市国家構想の実現に重要なオープンAPI
"Kong Summit, Japan 2022" Kongコミュニティセッション:政府が掲げるデジタル田園都市国家構想の実現に重要なオープンAPI"Kong Summit, Japan 2022" Kongコミュニティセッション:政府が掲げるデジタル田園都市国家構想の実現に重要なオープンAPI
"Kong Summit, Japan 2022" Kongコミュニティセッション:政府が掲げるデジタル田園都市国家構想の実現に重要なオープンAPIJunji Nishihara
 
20160621 KDL_monacaソリューションセミナー
20160621 KDL_monacaソリューションセミナー20160621 KDL_monacaソリューションセミナー
20160621 KDL_monacaソリューションセミナーkdl_yamanaka
 
琵琶湖を中心とした世界のようなお話
琵琶湖を中心とした世界のようなお話琵琶湖を中心とした世界のようなお話
琵琶湖を中心とした世界のようなお話MicroAd, Inc.(Engineer)
 
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -Yasufumi Nishiyama
 
GRAND FRONTEND OSAKA 2016 kintone説明
GRAND FRONTEND OSAKA 2016 kintone説明GRAND FRONTEND OSAKA 2016 kintone説明
GRAND FRONTEND OSAKA 2016 kintone説明Yoshihiko Takeuchi
 
人類kintoneマスター化計画
人類kintoneマスター化計画人類kintoneマスター化計画
人類kintoneマスター化計画Cybozucommunity
 
これからのカスタマーサポートのカタチ ~AIチャットボットの仕組と実績のご紹介~ - 株式会社SHIFT PLUS - GTMF 2018 OSAKA /...
これからのカスタマーサポートのカタチ ~AIチャットボットの仕組と実績のご紹介~ - 株式会社SHIFT PLUS - GTMF 2018 OSAKA /...これからのカスタマーサポートのカタチ ~AIチャットボットの仕組と実績のご紹介~ - 株式会社SHIFT PLUS - GTMF 2018 OSAKA /...
これからのカスタマーサポートのカタチ ~AIチャットボットの仕組と実績のご紹介~ - 株式会社SHIFT PLUS - GTMF 2018 OSAKA /...Game Tools & Middleware Forum
 
フルマネージドサービスの活用とIoTシステムのオペレーション
フルマネージドサービスの活用とIoTシステムのオペレーションフルマネージドサービスの活用とIoTシステムのオペレーション
フルマネージドサービスの活用とIoTシステムのオペレーションSatoshi Nakada
 

Similaire à YAPC::Asia (20)

LINE WORKSを活用したチャットボットが現場とkintoneを繋ぐ
LINE WORKSを活用したチャットボットが現場とkintoneを繋ぐLINE WORKSを活用したチャットボットが現場とkintoneを繋ぐ
LINE WORKSを活用したチャットボットが現場とkintoneを繋ぐ
 
アドネットワーク凛 媒体資料
アドネットワーク凛 媒体資料アドネットワーク凛 媒体資料
アドネットワーク凛 媒体資料
 
What is tmcn for isit
What is tmcn for isitWhat is tmcn for isit
What is tmcn for isit
 
HKkintone20170128v1
HKkintone20170128v1HKkintone20170128v1
HKkintone20170128v1
 
「マシンリーダビリティ」がユーザー体験を加速する
「マシンリーダビリティ」がユーザー体験を加速する「マシンリーダビリティ」がユーザー体験を加速する
「マシンリーダビリティ」がユーザー体験を加速する
 
ASP.net MVC で Stripe 課金を実装してみた話
ASP.net MVC で Stripe課金を実装してみた話ASP.net MVC で Stripe課金を実装してみた話
ASP.net MVC で Stripe 課金を実装してみた話
 
GCPでお手軽IoTに挑戦
GCPでお手軽IoTに挑戦GCPでお手軽IoTに挑戦
GCPでお手軽IoTに挑戦
 
Order cloud
Order cloudOrder cloud
Order cloud
 
kintone dev demo
kintone dev demokintone dev demo
kintone dev demo
 
WebとEmailのパーソナライズをGAとZoho CRMで安価に実現する方法
WebとEmailのパーソナライズをGAとZoho CRMで安価に実現する方法WebとEmailのパーソナライズをGAとZoho CRMで安価に実現する方法
WebとEmailのパーソナライズをGAとZoho CRMで安価に実現する方法
 
"Kong Summit, Japan 2022" Kongコミュニティセッション:政府が掲げるデジタル田園都市国家構想の実現に重要なオープンAPI
"Kong Summit, Japan 2022" Kongコミュニティセッション:政府が掲げるデジタル田園都市国家構想の実現に重要なオープンAPI"Kong Summit, Japan 2022" Kongコミュニティセッション:政府が掲げるデジタル田園都市国家構想の実現に重要なオープンAPI
"Kong Summit, Japan 2022" Kongコミュニティセッション:政府が掲げるデジタル田園都市国家構想の実現に重要なオープンAPI
 
20160621 KDL_monacaソリューションセミナー
20160621 KDL_monacaソリューションセミナー20160621 KDL_monacaソリューションセミナー
20160621 KDL_monacaソリューションセミナー
 
琵琶湖を中心とした世界のようなお話
琵琶湖を中心とした世界のようなお話琵琶湖を中心とした世界のようなお話
琵琶湖を中心とした世界のようなお話
 
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
 
GRAND FRONTEND OSAKA 2016 kintone説明
GRAND FRONTEND OSAKA 2016 kintone説明GRAND FRONTEND OSAKA 2016 kintone説明
GRAND FRONTEND OSAKA 2016 kintone説明
 
人類kintoneマスター化計画
人類kintoneマスター化計画人類kintoneマスター化計画
人類kintoneマスター化計画
 
これからのカスタマーサポートのカタチ ~AIチャットボットの仕組と実績のご紹介~ - 株式会社SHIFT PLUS - GTMF 2018 OSAKA /...
これからのカスタマーサポートのカタチ ~AIチャットボットの仕組と実績のご紹介~ - 株式会社SHIFT PLUS - GTMF 2018 OSAKA /...これからのカスタマーサポートのカタチ ~AIチャットボットの仕組と実績のご紹介~ - 株式会社SHIFT PLUS - GTMF 2018 OSAKA /...
これからのカスタマーサポートのカタチ ~AIチャットボットの仕組と実績のご紹介~ - 株式会社SHIFT PLUS - GTMF 2018 OSAKA /...
 
AIとの付き合い方
AIとの付き合い方AIとの付き合い方
AIとの付き合い方
 
Yapc::Asia 2013
Yapc::Asia 2013Yapc::Asia 2013
Yapc::Asia 2013
 
フルマネージドサービスの活用とIoTシステムのオペレーション
フルマネージドサービスの活用とIoTシステムのオペレーションフルマネージドサービスの活用とIoTシステムのオペレーション
フルマネージドサービスの活用とIoTシステムのオペレーション
 

YAPC::Asia