OPENSHIFT
Workshop
PRESENTED
BY
Shekhar
Gulati
Building Spatial Back-ends
with Node.js and MongoDB
AGENDA
➔ Learn a bit about Node.js and Express
➔ Learn some MongoDB basics
➔ Build a location aware Job search application...
Write an application and host it on internet
http://localjobsdemo-shekhargulati.rhcloud.com/
GOAL
CODE DU JOUR
https://github.com/shekhargulati/localjobs-nodejs
● You know JavaScript
● You know Git
● You like to write code rather than
managing servers.
ASSUMPTIONS
There are no stupid questions only stupid
answers. So ask questions
ASK QUESTIONS
Node.js provides a purely event-driven ,
non-blocking infrastructure to script
highly concurrent programs.
NODE.JS
NODE.JS EXPLAINED
Node.js goal is to provide an easy way to
build scalable network applications.
Some ex. Web servers , TCP servers,
Streami...
Node.js is Server Side JavaScript.
● It provides runtime environment
● It provides a library
NODE.JS IS
● Non Blocking I/O
● Based on Google's Chrome V8 engine
● 40k + modules
● Active community
● Multi platform – Windows , Ma...
● Go to http://nodejs.org/ and click install.
● Install the downloaded package.
INSTALLING NODE.JS
● Hello World
● HTTP Server
NODE.JS IN ACTION
● Routing support
● Template support
● Error handling
● Etc.
EXPRESS TO RESCUE
Web Application Framework for Node
● Install Express
– npm install express -g
● Create a new Express application
– express --sessions --ejs hello-world
MONGODB
18

Open Source NoSQL document datastore
– JSON style documents

Schema-less
– Each document is heterogeneous, and may h...
Database → Database
Table → Collection
Row → Document
Index → Index
STEP 4 :
MONGODB TERMINOLOGY
DEMO TIME
21

What is it for?

Find all the MongoDB jobs near me – Proximity Queries

Find all the MongoDB jobs within Bangalore ...
22
1) Put your coordinates into an array
{ loc : [ 50 , 30 ] } //SUGGESTED OPTION
{ loc : { x : 50 , y : 30 } }
{ loc : { ...
23
APP DEVELOPMENT
LocalJobs : Location Aware Job Search App
Functionalities or User stories or Features
1. As an Employer , I should be able...
Prioritize the functionalities or user stories or features
– As an Employer, I should be able to post jobs
– As a Job seek...
$ git clone https://github.com/shekhargulati/localjobs-nodejs.git
STEP 0 : CLONE REPO
$ git checkout 380e795c9b52235838c361f9052f188e054c0ea8
$ npm install -l
STEP 1 : APP INIT
$ git checkout b721308a8945b28019731791a5a1188ba3d855b6
$ npm install -l
STEP 2 : INDEX PAGE
$ git checkout edbec3f6df758e6287f7c8ded6098ada9262282
$ npm install -l
STEP 3 : SAVE JOB
$ git checkout 457eb572b0d74c649b56c26306a1d5bcdd01a9e1
STEP 4 : VIEW ALL JOBS
$ git checkout a9e50f4feb1448c924758ed968d8253da3c06070
Create MongoDB 2d Index
STEP 5 : SEARCH BY NEAR
$ git checkout 82a6cefe0514d1b81d0b8446412a16340465590d
STEP 6 : SEARCH BY GEONEAR
$ ./mongoimport --db localjobs --collection jobs –file jobs.json
STEP 7 : IMPORT DATA
34
APPLICATION DEPLOYMENT
PaaS == Platform as a Service
A Cloud Application Platform
Code Deploy Enjoy
Save Time and Money
Code your app
Push-button...
38
OpenShift
is
PaaS by Red Hat
Multi-language,
Auto-Scaling,
Self-service,
Elastic,
Cloud Application
Platform
39
OUR STACK
40
https://openshift.redhat.com/app/account/new
Promo code is JSCHANNEL13
CREATING OPENSHIFT
ACCOUNT
● Free! No time limit
● 3 gears (like servers) - each 512 Mb RAM, 1 Gb disk
● Auto-scaling
● Simple pricing
BUT WAIT – THE...
42
rhc create-app localjobs nodejs mongodb-2.2 --from-code=
https://github.com/shekhargulati/localjobs-nodejs.git
Lot of o...
43
git push
IN CASE YOU CARE
•
Shekhar Gulati – Works at Red Hat
•
Principal OpenShift Developer Evangelist
•
Java / Python/ JavaScrip...
QUESTIONS?
Building spatial back ends with Node.js and MongoDB
Building spatial back ends with Node.js and MongoDB
Upcoming SlideShare
Loading in...5
×

Building spatial back ends with Node.js and MongoDB

3,400

Published on

Building spatial back ends with Node.js and MongoDB

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

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

No notes for slide

Building spatial back ends with Node.js and MongoDB

  1. 1. OPENSHIFT Workshop PRESENTED BY Shekhar Gulati Building Spatial Back-ends with Node.js and MongoDB
  2. 2. AGENDA ➔ Learn a bit about Node.js and Express ➔ Learn some MongoDB basics ➔ Build a location aware Job search application ➔ Go live with a Node.js MongoDB powered app in ~ 45 mins
  3. 3. Write an application and host it on internet http://localjobsdemo-shekhargulati.rhcloud.com/ GOAL
  4. 4. CODE DU JOUR https://github.com/shekhargulati/localjobs-nodejs
  5. 5. ● You know JavaScript ● You know Git ● You like to write code rather than managing servers. ASSUMPTIONS
  6. 6. There are no stupid questions only stupid answers. So ask questions ASK QUESTIONS
  7. 7. Node.js provides a purely event-driven , non-blocking infrastructure to script highly concurrent programs. NODE.JS
  8. 8. NODE.JS EXPLAINED
  9. 9. Node.js goal is to provide an easy way to build scalable network applications. Some ex. Web servers , TCP servers, Streaming server , Realtime apps, etc. NODE.JS GOAL
  10. 10. Node.js is Server Side JavaScript. ● It provides runtime environment ● It provides a library NODE.JS IS
  11. 11. ● Non Blocking I/O ● Based on Google's Chrome V8 engine ● 40k + modules ● Active community ● Multi platform – Windows , Mac , and Linux ● Use single language for both client and server. ● JavaScript is language of Web. WHY NODE.JS
  12. 12. ● Go to http://nodejs.org/ and click install. ● Install the downloaded package. INSTALLING NODE.JS
  13. 13. ● Hello World ● HTTP Server NODE.JS IN ACTION
  14. 14. ● Routing support ● Template support ● Error handling ● Etc.
  15. 15. EXPRESS TO RESCUE Web Application Framework for Node
  16. 16. ● Install Express – npm install express -g ● Create a new Express application – express --sessions --ejs hello-world
  17. 17. MONGODB
  18. 18. 18  Open Source NoSQL document datastore – JSON style documents  Schema-less – Each document is heterogeneous, and may have completely unique structure compared to other documents  Fast and horizontally scalable  Rich query language  Rich documents  Easy to get running  Geospatial indexing WHAT IS MONGODB
  19. 19. Database → Database Table → Collection Row → Document Index → Index STEP 4 : MONGODB TERMINOLOGY
  20. 20. DEMO TIME
  21. 21. 21  What is it for?  Find all the MongoDB jobs near me – Proximity Queries  Find all the MongoDB jobs within Bangalore – Bounded Queries  Find all the MongoDB job at this location – Exact Queries ● Supports only two dimensional indexes.  You can only have one geospatial index per collection.  By default, 2d geospatial indexes assume longitude and latitude have boundaries of -180 inclusive and 180 non-inclusive (i.e. [-180, 180)) GEOSPATIAL INDEXING BASICS
  22. 22. 22 1) Put your coordinates into an array { loc : [ 50 , 30 ] } //SUGGESTED OPTION { loc : { x : 50 , y : 30 } } { loc : { foo : 50 , y : 30 } } 1) { loc : { lon : 40.739037, lat: 73.992964 } } 2) Make a 2d index db.places.ensureIndex( { loc : "2d" } ) 3) If you use latitude and longitude as your coordinate system, always store longitude first. MongoDB’s 2d spherical index operators only recognize [ longitude, latitude] ordering. HOW TO MAKE IT WORK
  23. 23. 23 APP DEVELOPMENT
  24. 24. LocalJobs : Location Aware Job Search App Functionalities or User stories or Features 1. As an Employer , I should be able to register my company 2. As an Employer, I should be able to post jobs 3. As a Job seeker , I should be able to register myself with application 4. As a Job seeker , I should be able to search jobs near to my current location. 5. As a Job seeker , I should be able to apply a job 6. Etc... APP -- USER STORIES
  25. 25. Prioritize the functionalities or user stories or features – As an Employer, I should be able to post jobs – As a Job seeker , I should be able to search jobs near to my current location. – As a Job seeker , I should be able to see all the jobs PRIORITIZE
  26. 26. $ git clone https://github.com/shekhargulati/localjobs-nodejs.git STEP 0 : CLONE REPO
  27. 27. $ git checkout 380e795c9b52235838c361f9052f188e054c0ea8 $ npm install -l STEP 1 : APP INIT
  28. 28. $ git checkout b721308a8945b28019731791a5a1188ba3d855b6 $ npm install -l STEP 2 : INDEX PAGE
  29. 29. $ git checkout edbec3f6df758e6287f7c8ded6098ada9262282 $ npm install -l STEP 3 : SAVE JOB
  30. 30. $ git checkout 457eb572b0d74c649b56c26306a1d5bcdd01a9e1 STEP 4 : VIEW ALL JOBS
  31. 31. $ git checkout a9e50f4feb1448c924758ed968d8253da3c06070 Create MongoDB 2d Index STEP 5 : SEARCH BY NEAR
  32. 32. $ git checkout 82a6cefe0514d1b81d0b8446412a16340465590d STEP 6 : SEARCH BY GEONEAR
  33. 33. $ ./mongoimport --db localjobs --collection jobs –file jobs.json STEP 7 : IMPORT DATA
  34. 34. 34 APPLICATION DEPLOYMENT
  35. 35. PaaS == Platform as a Service A Cloud Application Platform Code Deploy Enjoy Save Time and Money Code your app Push-button Deploy, and your App is running in the Cloud!
  36. 36. 38 OpenShift is PaaS by Red Hat Multi-language, Auto-Scaling, Self-service, Elastic, Cloud Application Platform
  37. 37. 39 OUR STACK
  38. 38. 40 https://openshift.redhat.com/app/account/new Promo code is JSCHANNEL13 CREATING OPENSHIFT ACCOUNT
  39. 39. ● Free! No time limit ● 3 gears (like servers) - each 512 Mb RAM, 1 Gb disk ● Auto-scaling ● Simple pricing BUT WAIT – THERE's MORE
  40. 40. 42 rhc create-app localjobs nodejs mongodb-2.2 --from-code= https://github.com/shekhargulati/localjobs-nodejs.git Lot of other tasks you can do with rhc – tail log, app management, cartridge management , ssh management , namespace management, etc. Run rhc -h for details DEMO : LOCALJOBS APP RHC is only required for infrastructure tasks
  41. 41. 43 git push
  42. 42. IN CASE YOU CARE • Shekhar Gulati – Works at Red Hat • Principal OpenShift Developer Evangelist • Java / Python/ JavaScript / NoSQL / Cloud Guy • Twitter Handle : shekhargulati • Github https://github.com/shekhargulati • Slides https://speakerdeck.com/shekhargulati
  43. 43. QUESTIONS?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×