MongoSF - Polyglot Spatial with MongoDB and OpenShift


Sign up code: MongoSF

Presented by:

Steven Citron-Pousty

@TheSteve0 on Twitter, IRC, and Github

Agenda

  1. Learn a bit about PaaS
  2. A little about MongoDB Spatial
  3. See some demos

Assumptions

  1. You like writing code rather than managing servers
  2. You can use command line, git, and ssh

But I know EC2...

One Source to Bind Them All


 

 

 

But wait - there's more

  1. Free! No time limit
  2. 3 gears (like servers) - each 512 Mb RAM, 1 Gb disk
  3. Auto-scaling
  4. Simple pricing
  5. We are coming out of developer preview this summer

On to NoSQL and Mongo

 

A bit about MongoDB

  • A document is just a bunch of attributes and values - think of it like HashMap
  • Can be nested - helps avoid joins
  • Schemaless
  • Really good at fast writes - but you give up immediate consistency
  • Easy to horizontally scale

Now some spatial

The spatial functionality Mongo currently has is:

  1. Near
  2. Containment


It is all laid out here:

Geospatial Indexes and Queries

and here:

Geospatial Index Internals

Good to Know

  • Assumes coords. are between [-180 and 180)
  • Can handle any 2D coordinates
  • Has methods to handle curvature of the earth (spherical)

How do you make it work

1. Put coordinates into an array


{ loc : [ 50 , 30 ] }
{ loc : { x : 50 , y : 30 } }
{ loc : { foo : 50 , y : 30 } }
{ loc : { lon : 40.739037, lat: 73.992964 } }
                    
                    If you use spherical make sure to put [lon, lat]
				    

2. Make a 2D index


				    	db.places.ensureIndex( { loc : "2d" } )
				    

Let's look at some code

Build a spatial checkin service for national parks in US and Canada

  1. Java - JEE using CDI and JAX-RS
  2. Python - Using Flask
  3. Node.JS - using Express

Let's wrap it up

  1. Openshift makes life great for you
  2. Spatial is easy and fun with MongoDB
  3. Free!

Come hang out with us:
#openshift on freenode irc
OR
users@lists.openshift.redhat.com