Bringing MongoDB into your organization

Preview:

DESCRIPTION

My talk at MongoBoston on bringing MongoDB into your organization. Covers what it is, why you use it, how you get your feet wet, and how you dive in.

Citation preview

Introducing MongoDB into your

organization

From Punchbowl.com to YOURyan Angilly

@angilly

Tuesday, September 21, 2010

• “Bringing MongoDB into your organization” ?

• MongoDB

• What?

• Why?

• Get your feet wet

• Dive in

Tuesday, September 21, 2010

Punchbowl.com

Tuesday, September 21, 2010

• Online invitation & party planning

Punchbowl.com

Tuesday, September 21, 2010

• Online invitation & party planning

• Think e-Vite, but better everywhere

Punchbowl.com

Tuesday, September 21, 2010

• Online invitation & party planning

• Think e-Vite, but better everywhere

• More tools for planning your party, not just the online invites

Punchbowl.com

Tuesday, September 21, 2010

• Online invitation & party planning

• Think e-Vite, but better everywhere

• More tools for planning your party, not just the online invites

• Been around since 2007

Punchbowl.com

Tuesday, September 21, 2010

• Online invitation & party planning

• Think e-Vite, but better everywhere

• More tools for planning your party, not just the online invites

• Been around since 2007

• Raised $2.5M+ -- Angels, Intel Capital, Contour Ventures

Punchbowl.com

Tuesday, September 21, 2010

• Online invitation & party planning

• Think e-Vite, but better everywhere

• More tools for planning your party, not just the online invites

• Been around since 2007

• Raised $2.5M+ -- Angels, Intel Capital, Contour Ventures

• Deals w/ Oriental Trading, others....

Punchbowl.com

Tuesday, September 21, 2010

• Online invitation & party planning

• Think e-Vite, but better everywhere

• More tools for planning your party, not just the online invites

• Been around since 2007

• Raised $2.5M+ -- Angels, Intel Capital, Contour Ventures

• Deals w/ Oriental Trading, others....

• Just rebranded from MyPunchbowl.com

Punchbowl.com

Tuesday, September 21, 2010

• Online invitation & party planning

• Think e-Vite, but better everywhere

• More tools for planning your party, not just the online invites

• Been around since 2007

• Raised $2.5M+ -- Angels, Intel Capital, Contour Ventures

• Deals w/ Oriental Trading, others....

• Just rebranded from MyPunchbowl.com

• Just announced 1M users

Punchbowl.com

Tuesday, September 21, 2010

• Online invitation & party planning

• Think e-Vite, but better everywhere

• More tools for planning your party, not just the online invites

• Been around since 2007

• Raised $2.5M+ -- Angels, Intel Capital, Contour Ventures

• Deals w/ Oriental Trading, others....

• Just rebranded from MyPunchbowl.com

• Just announced 1M users

• Recently previewed Digital Invitation Studio, the 3rd generation of our invite design software

Punchbowl.com

Tuesday, September 21, 2010

You.

Tuesday, September 21, 2010

You.

• Who here has used MongoDB?

Tuesday, September 21, 2010

You.

• Who here has used MongoDB?

• Why are you here?

Tuesday, September 21, 2010

A database

What is MongoDB?

Tuesday, September 21, 2010

Schema-less

What is MongoDB?

Tuesday, September 21, 2010

• Document based{ name: 'Ryan', email: 'ryan@angilly.com', likes: ['mongodb', 'skiing', 'twitter', 'Boulder chicks'], dislikes: ['humidity', 'Sarah Palin', 'bigotry', 'The Yankees'], current_outfit: { pants: 'blue shorts', shirt: false, shoes: 'flip-flops', undies: 'wouldn\'t you like to know' }}

What is MongoDB?

Tuesday, September 21, 2010

What is MongoDB?• NoSQL

Tuesday, September 21, 2010

What is MongoDB?• NoSQL

SELECT * FROM `events` WHERE (`events`.`event_key` = ‘c76c876c675c8976cc`) AND (events.deleted_at IS NULL) LIMIT 1

SELECT `designs`.* FROM `designs` WHERE (`designs`.event_id = 206039) AND (designs.deleted_at IS NULL)

SELECT `design_assets`.* FROM `design_assets` WHERE (`design_assets`.`element_id` = 1096 and `design_assets`.`element_type` = 'Design') AND

( (`design_assets`.`type` = 'DesignImage' ))

SELECT * FROM `save_events` WHERE (`save_events`.event_id = 206039) AND (save_events.deleted_at IS NULL) LIMIT 1

SELECT * FROM `event_questions` WHERE (`event_questions`.event_id = 206039) LIMIT 1

SELECT * FROM `classifications` WHERE (`classifications`.`id` = 8) ORDER BY classifications.position ASC

SELECT * FROM `memberships` WHERE (`memberships`.user_id = 57) LIMIT 1

SELECT * FROM `papers` WHERE (`papers`.`id` = 28) AND ( (`papers`.`type` = 'DIYPaper' ) )

SELECT * FROM `design_assets` WHERE (`design_assets`.element_id = 28 AND `design_assets`.element_type = 'Paper')

SELECT * FROM `design_assets` WHERE (`design_assets`.`id` = 435) AND ( (`design_assets`.`type` = 'DesignPhoto' ) )

SELECT * FROM `ribbons` WHERE (`ribbons`.`id` = 4) AND ( (`ribbons`.`type` = 'DIYRibbon' ) )

SELECT * FROM `design_assets` WHERE (`design_assets`.element_id = 4 AND `design_assets`.element_type = 'Ribbon')

Tuesday, September 21, 2010

What is MongoDB?• NoSQL

SELECT * FROM `events` WHERE (`events`.`event_key` = ‘c76c876c675c8976cc`) AND (events.deleted_at IS NULL) LIMIT 1

SELECT `designs`.* FROM `designs` WHERE (`designs`.event_id = 206039) AND (designs.deleted_at IS NULL)

SELECT `design_assets`.* FROM `design_assets` WHERE (`design_assets`.`element_id` = 1096 and `design_assets`.`element_type` = 'Design') AND

( (`design_assets`.`type` = 'DesignImage' ))

SELECT * FROM `save_events` WHERE (`save_events`.event_id = 206039) AND (save_events.deleted_at IS NULL) LIMIT 1

SELECT * FROM `event_questions` WHERE (`event_questions`.event_id = 206039) LIMIT 1

SELECT * FROM `classifications` WHERE (`classifications`.`id` = 8) ORDER BY classifications.position ASC

SELECT * FROM `memberships` WHERE (`memberships`.user_id = 57) LIMIT 1

SELECT * FROM `papers` WHERE (`papers`.`id` = 28) AND ( (`papers`.`type` = 'DIYPaper' ) )

SELECT * FROM `design_assets` WHERE (`design_assets`.element_id = 28 AND `design_assets`.element_type = 'Paper')

SELECT * FROM `design_assets` WHERE (`design_assets`.`id` = 435) AND ( (`design_assets`.`type` = 'DesignPhoto' ) )

SELECT * FROM `ribbons` WHERE (`ribbons`.`id` = 4) AND ( (`ribbons`.`type` = 'DIYRibbon' ) )

SELECT * FROM `design_assets` WHERE (`design_assets`.element_id = 4 AND `design_assets`.element_type = 'Ribbon')

vs.

db.events.findOne({event_key: ‘c76c876c675c8976cc’})

Tuesday, September 21, 2010

What is MongoDB?

Tuesday, September 21, 2010

What is MongoDB?

• Different (downsides)

Tuesday, September 21, 2010

What is MongoDB?

• Different (downsides)

• Async writes

Tuesday, September 21, 2010

What is MongoDB?

• Different (downsides)

• Async writes

• No transactions

Tuesday, September 21, 2010

What is MongoDB?

• Different (downsides)

• Async writes

• No transactions

• Cannot get you dates

Tuesday, September 21, 2010

Why use it?

• Simple query syntax

• Write hashes, not SQL.

Tuesday, September 21, 2010

Why use it?

• Sharding

Tuesday, September 21, 2010

Why use it?

• GridFS

Tuesday, September 21, 2010

Get your feet wet.Tuesday, September 21, 2010

Pick something low risk

• Logging

• Statistics

• Data mining

Tuesday, September 21, 2010

Punchbowl Vendor Portal

Tuesday, September 21, 2010

Punchbowl Vendor Portal

• http://www.punchbowl.com/vendors

• Track searches

• Track impressions

• Use data to entice vendors to purchase listings

Tuesday, September 21, 2010

DiveIn.

Tuesday, September 21, 2010

Go all out

• Don’t just use MongoDB “relationally”

• Embrace embedded documents

• Rethink your data schema

Tuesday, September 21, 2010

Digital Invitation Studio

Tuesday, September 21, 2010

Digital Invitation Studio

Design

Tuesday, September 21, 2010

Digital Invitation Studio

Tags

Design

Tuesday, September 21, 2010

Digital Invitation Studio

Tags

Photos Design

Tuesday, September 21, 2010

Digital Invitation Studio

Tags

Photos

Envelope

Design

Tuesday, September 21, 2010

Digital Invitation Studio

Tags

Photos

Envelope

Postage

Design

Tuesday, September 21, 2010

Digital Invitation Studio

Tags

Photos

Envelope

Postage

Package

Design

Tuesday, September 21, 2010

Digital Invitation Studio

Tags

Photos

Envelope

Postage

Package

Liner

Design

Tuesday, September 21, 2010

Digital Invitation Studio

Tags

Photos

Envelope

Postage

Package

Liner

PaperDesign

Tuesday, September 21, 2010

Digital Invitation Studio

Tags

Photos

Envelope

Postage

Package

Liner

Paper

Greeting

Design

Tuesday, September 21, 2010

Design

Digital Invitation Studio

Tags

Photos

Envelope

Postage

Package

Liner

Paper

Greeting

Tuesday, September 21, 2010

Digital Invitation Studio

Tuesday, September 21, 2010

Digital Invitation Studio• Completely rethought how we create

designs

Tuesday, September 21, 2010

Digital Invitation Studio• Completely rethought how we create

designs

• Brand new UI

Tuesday, September 21, 2010

Digital Invitation Studio• Completely rethought how we create

designs

• Brand new UI

• Uses MongoDB for everything design-related

Tuesday, September 21, 2010

Digital Invitation Studio• Completely rethought how we create

designs

• Brand new UI

• Uses MongoDB for everything design-related

• We didn’t touch our invite/event system, because we didn’t need to

Tuesday, September 21, 2010

Digital Invitation Studio• Completely rethought how we create

designs

• Brand new UI

• Uses MongoDB for everything design-related

• We didn’t touch our invite/event system, because we didn’t need to

• http://www.punchbowl.com/digital-invitations

Tuesday, September 21, 2010

Where’s my stuff?!

Tuesday, September 21, 2010

Open Source is not scary.

Tuesday, September 21, 2010

Open Source is not scary.

Libraries you are used to using may not be available.

Don’t be afraid.

Needed Paperclip

Didn’t have it

Created Roachclip

Tuesday, September 21, 2010

Open Source is not scary.

Libraries you are used to using may not be available.

Don’t be afraid.

Needed Paperclip

Didn’t have it

Created Roachclip

Tuesday, September 21, 2010

Open Source is not scary.

75 lines of code.

Libraries you are used to using may not be available.

Don’t be afraid.

Needed Paperclip

Didn’t have it

Created Roachclip

Tuesday, September 21, 2010

Open Source is not scary.

75 lines of code.

104 lines of test

Libraries you are used to using may not be available.

Don’t be afraid.

Needed Paperclip

Didn’t have it

Created Roachclip

Tuesday, September 21, 2010

Questions?

Tuesday, September 21, 2010

Recommended