A practical intro to web development with mongo db and nodejs when, why and how v2

Post on 22-May-2015

351 views 4 download

Tags:

transcript

ByJorge Garifuna

Professional Web Developerinfo@GariDigital.com

213-915-4402

JGari.com/resume

Twitter: @jgarifuna

JGari.com/resumeSMS your name & email to: 213-985-4413

SMS your Name and Email to:

213-985-4413

JGari.com/resumeSMS your name & email to: 213-985-4413

1. A Database that stores data (documents)2. A NoSQL Database

1. NoSQL = Not only SQL3. Uses JSON for interaction

1. JSON = JavaScript Object Notation4. Managed by 10gen company

JGari.com/resumeSMS your name & email to: 213-985-4413

1. Scalable2. High performance3. Open source4. Written in C++5. Humongous

JGari.com/resumeSMS your name & email to: 213-985-4413

1. Document-Oriented Storage2. Full Index Support3. Replication & High Availability: Mirror across

LAN/WAN4. Auto-Sharding: Scale horizontally5. Map/Reduce: aggregation & data processing6. GridFS: Store files of any size

JGari.com/resumeSMS your name & email to: 213-985-4413

1. Not a Relational Database (RDBMS)2. Not ideal for every scenario

JGari.com/resumeSMS your name & email to: 213-985-4413

id firstName

lastName

age

1 Jorge Garifuna 85

2 Jimmy Smith 30

id: 1firstName: JorgelastName: Garifunaage: 85

id: 2firstName: JimmylastName: Smithage: 30

id: 3firstName: AlanlastName: Jonesage: 25city: Los Angelesstate: CA

Relational Database Table/Records MongoDB Collection/Documents

JGari.com/resumeSMS your name & email to: 213-985-4413

1. I dig alpha products2. Beta products are my cut of tea3. I only consider stable products

JGari.com/resumeSMS your name & email to: 213-985-4413

Credit: Sanjeev Mishra

JGari.com/resumeSMS your name & email to: 213-985-4413

1. When you need flexibility in your data

2. When you want to easily scale3. When your dataset does not

have zillions of joins

JGari.com/resumeSMS your name & email to: 213-985-4413

Source: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

JGari.com/resumeSMS your name & email to: 213-985-4413

1. Download from 1. http://www.mongodb.org/downloads

2. Unzip package3. Run the following from terminal

1. sudo mkdir -p /data/db2. sudo chown `id -u` /data/db

4. Add to path1. Mac example: export PATH=/Users/jgarifuna/jg/net/Dev/db/mongodb-osx-x86_64-2.2.1-rc0/bin:$PATH

2. Linux example: PATH=/home/jgarifuna/mongo-linux-2.2.1/bin:$PATH

JGari.com/resumeSMS your name & email to: 213-985-4413

1. If added to path in command line type

1. mongod2. If not on path

1. Access the bin folder on mongo folder2. Type: ./mongod

JGari.com/resumeSMS your name & email to: 213-985-4413

1. If added to path in command line type

1. mongo2. If not on path

1. Access the bin folder on mongo folder2. Type: ./mongo

JGari.com/resumeSMS your name & email to: 213-985-4413

1. Databases are created automatically

2. Tables are created automatically3. Primary key is created

automatically

JGari.com/resumeSMS your name & email to: 213-985-4413

Source: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

JGari.com/resumeSMS your name & email to: 213-985-4413

Source: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

JGari.com/resumeSMS your name & email to: 213-985-4413

Source: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

JGari.com/resumeSMS your name & email to: 213-985-4413

Source: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

JGari.com/resumeSMS your name & email to: 213-985-4413

Source: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

JGari.com/resumeSMS your name & email to: 213-985-4413

JGari.com/resumeSMS your name & email to: 213-985-4413

Source: http://www.mongodb.org/display/DOCS/Replica+Sets

JGari.com/resumeSMS your name & email to: 213-985-4413

Source: http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics

On each mongodb instance start service with: mongod --rest --replSet myset

JGari.com/resumeSMS your name & email to: 213-985-4413

Source: http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics

Connect to primary server: mongo --host PRIMARY_IP_OR_NAME

Initialize replica set: rs.initiate()

If you get error: "local.oplog.rs is not empty on the initiating member. cannot initiate.”

Fix by typing (source: http://stackoverflow.com/questions/10953752/how-to-modify-replica-set-config): ▪ use local▪ db.dropDatabase()▪ Rs.initiate()

Add secondary node to replica set rs.add(‘FIRST_SERVER_NAME_OR_IP’)

Add arbiter node to replica set rs.addArb(‘ARB_SERVER_NAME_OR_IP’)

JGari.com/resumeSMS your name & email to: 213-985-4413

Source: http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics

Connect to primary server: mongo --host PRIMARY_IP_OR_NAME

Add a document Switch to your desire db: use DB_NAME db.foo.save({name: “Jorge Garifuna”})

Set secondary to slave (otherwise you wont be able to see data) rs.slaveOk()

Query secondary db.foo.find()

JGari.com/resumeSMS your name & email to: 213-985-4413

public static function getIpGeoDataFromMongo($ip) { $rv = array(); if (strlen($ip) > 0) { $m = new Mongo(); // connect, MongoClient $db = $m->selectDB("geoip"); $collection_geo_city_blocks = new MongoCollection($db, self::IP_BLOCKS_TABLE_NAME); $ip = addslashes($ip); $ip = ip2long($ip); $query = array('$and' => array ( array( 'startIpNum' => array('$lte' => $ip) ), array('endIpNum' => array('$gte' => $ip) ) ) ); $cursor = $collection_geo_city_blocks->find($query); $result = $cursor->getNext();

if (isset($result['locId']) && strlen($result['locId']) > 0) { $collection_geo_city_locations = new MongoCollection($db, self::IP_LOCATIONS_TABLE_NAME); $query = array('locId' => $result['locId']); $cursor = $collection_geo_city_locations->find($query); $rv = $cursor->getNext(); } }

return $rv; }

JGari.com/resumeSMS your name & email to: 213-985-4413

Some Basic Node JS stuff

JGari.com/resumeSMS your name & email to: 213-985-4413

Platform built on Google Chrome’s JavaScript Runtime

For building fast, scalable network applications

Substitute for Apache/PHP But you create your own server code

JGari.com/resumeSMS your name & email to: 213-985-4413

Download from nodejs.org

Run installation

JGari.com/resumeSMS your name & email to: 213-985-4413

var http = require('http');http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n');}).listen(1337, '127.0.0.1');console.log('Server running at http://127.0.0.1:1337/');

1. Create new folder2. Create testserver.js file and place within

folder3. Run node

1. Node testserver.js4. On browser go to: http://127.0.0.1:1337

JGari.com/resumeSMS your name & email to: 213-985-4413

1. A Node JS Application Framework2. Uses MVC (model, view, controller)

pattern

JGari.com/resumeSMS your name & email to: 213-985-4413

1. From the command line run Node Package Manager

1. sudo npm install -g express

JGari.com/resumeSMS your name & email to: 213-985-4413

1. From the command line run1. Express ./YOUR_APP_NAME

2. Change into your new app folder1. cd ./YOUR_APP_NAME

3. Install depedencies1. npm install -d

JGari.com/resumeSMS your name & email to: 213-985-4413

1. Change into your new app folder1. cd ./YOUR_APP_NAME

2. Run app with node1. node app

3. On browser go to URL:1. http://localhost:3000

JGari.com/resumeSMS your name & email to: 213-985-4413

1. Change into your new app folder1. cd ./YOUR_APP_NAME

2. Run app with node1. node app

3. On browser go to URL:1. http://localhost:3000

JGari.com/resumeSMS your name & email to: 213-985-4413

1. Download workout web api from1. https://github.com/donnfelker/workout-

tracker2. Checkout Develop a RESTful API Using

Node.js With Express and Mongoose1. http://pixelhandler.com/blog/2012/02/09/

develop-a-restful-api-using-node-js-with-express-and-mongoose/

While you think… Sign up to LAMPsig’s mailing list at:▪ http://lampsig.org

Join LAMPsig on Meetup at:▪ http://www.meetup.com/LAMPsig

Jorge Garifuna▪ info@GariDigital.com▪ @jgarifuna

JGari.com/resumeSMS your name & email to: 213-985-4413

1. http://www.mongodb.org2. http://nodejs.org3. http://expressjs.com4. http://pixelhandler.com/blog/

2012/02/09/develop-a-restful-api-using-node-js-with-express-and-mongoose

5. http://lampsig.org6. http://www.meetup.com/LAMPsig

JGari.com/resumeSMS your name & email to: 213-985-4413