PinQAでのMongoDB活用事例

800 views

Published on

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

  • Be the first to like this

No Downloads
Views
Total views
800
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

PinQAでのMongoDB活用事例

  1. 1. PinQAでのMongoDB活用事例  NTT レゾナント株式会社  近藤 美沙
  2. 2. サービス紹介
  3. 3. 場所を指定して質問
  4. 4. 場所を指定して回答
  5. 5. 質問は範囲=矩形
  6. 6. 回答はポイント=点
  7. 7. MongoDBを使ってますPinQAは位置情報ベースのQ&Aサービスです。                http://pinqa.com/
  8. 8. MongoDBとは● JSONをベースとしたスキーマレスなデー タモデル● フェイルオーバー構成が選択可能● B-treeインデックスをサポートする高速な クエリ● 分散データベース● 二次元の地理空間のインデックス (geospatial index) PinQAは位置情報ベースのQ&Aサービスです。                 http://pinqa.com/
  9. 9. 色々特徴がありますがPinQAは位置情報ベースのQ&Aサービスです。                http://pinqa.com/
  10. 10. 本日のお題はPinQAは位置情報ベースのQ&Aサービスです。                http://pinqa.com/
  11. 11. 二次元地理空間のインデックス (geospatial index) PinQAは位置情報ベースのQ&Aサービスです。                 http://pinqa.com/
  12. 12. 地理空間インデックスとは位置情報をベースにしたクエリのためのインデックス例)神保町駅から半径300m以内にある喫茶店を検索
  13. 13. インデックスを作る前に● db #データベース● squares # コレクションデータベースはその名の通りデータベース、コレクションの集合体。コレクションというのは、RDBでいうところのテーブルに近いもの。ドキュメントの集合体。 PinQAは位置情報ベースのQ&Aサービスです。                 http://pinqa.com/
  14. 14. 地理空間インデックスの作り方● MongoDB側で直接叩く場合$ db.squares.ensureIndex({latlng:"2d"})● Mongoid側で行う場合$ Mongoid.master.collections.each do |c|$ if c.name == "squares"$ c.create_index([[latlng, Mongo::GEO2D]])$ end$ end PinQAは位置情報ベースのQ&Aサービスです。                 http://pinqa.com/
  15. 15. PinQAでの活用事例PinQAは位置情報ベースのQ&Aサービスです。                http://pinqa.com/
  16. 16. ●質問データをMongoDBに投入●MongoDBに入ってしまえば PinQAは位置情報ベースのQ&Aサービスです。                 http://pinqa.com/
  17. 17. within(box)=矩形内の質問取得
  18. 18. within(box)$ def self.find_in_bounds(hash)$ self.where(:latlng.within =>$ { "$box" => [$ [hash[:southwest_lat],$ hash[:southwest_lng]],$ [hash[:northeast_lat],$ hash[:northeast_lng]]$ ]$ }$ )$ end$
  19. 19. within(center)=円形内の質問取得
  20. 20. within(center)$ def self.find_in_circle(hash)$ self.where(:latlng.within =>$ { "$center" =>[[hash[:lat],hash[:lng]],$ hash[:distance]$ }$ )$ end$ PinQAは位置情報ベースのQ&Aサービスです。                 http://pinqa.com/
  21. 21. near = 近くにある質問を取得 基点から近い順に取得
  22. 22. near$ def self.find(hash)$ self.where(:latlng.near => [hash[:lat], hash[:lng]])$ end$ PinQAは位置情報ベースのQ&Aサービスです。                 http://pinqa.com/
  23. 23. geoNear$ db.runCommand( {geoNear : "squares",$ near : [lat,lng], num : 10} );Mongoid (1.9.1)ではgeoNearはサポートされてない模様。別途拡張ライブラリが必要。 PinQAは位置情報ベースのQ&Aサービスです。                 http://pinqa.com/
  24. 24. geoNear = near + オプション・結果に詳細情報が付加される
  25. 25. 地理空間インデックスでできること● near:近くのデータを取得● within:領域内のデータを取得  boxとcirculeがある。● geoNear:near+詳細情報の取得 PinQAは位置情報ベースのQ&Aサービスです。                 http://pinqa.com/
  26. 26. 最後にちょっと宣伝PinQAは位置情報ベースのQ&Aサービスです。                http://pinqa.com/
  27. 27. Comming soon

×