Axa Assurance Maroc - Insurer Innovation Award 2024
Zero to Mongo in 60 Hours
1. Zero to Mongo in 60
Hours
Ryan Angilly
MyPunchbowl.com
@angilly
Wednesday, April 28, 2010
2. I’m a pretty awesome dude
Wednesday, April 28, 2010
3. I’m a pretty awesome dude
• Electrical Engineer by
education
Wednesday, April 28, 2010
4. I’m a pretty awesome dude
• Electrical Engineer by
education
• Ex-EMC’er
Wednesday, April 28, 2010
5. I’m a pretty awesome dude
• Electrical Engineer by
education
• Ex-EMC’er
• Founded
MessageSling.com
Wednesday, April 28, 2010
6. I’m a pretty awesome dude
• Electrical Engineer by
education
• Ex-EMC’er
• Founded
MessageSling.com
• Entered the deadpool
in January
Wednesday, April 28, 2010
7. I’m a pretty awesome dude
• Electrical Engineer by
education
• Ex-EMC’er
• Founded
MessageSling.com
• Entered the deadpool
in January
• Senior developer @
MyPunchbowl.com
Wednesday, April 28, 2010
8. I’m a pretty awesome dude
• Electrical Engineer by
education
• Built several web apps
• Ex-EMC’er
• Founded
MessageSling.com
• Entered the deadpool
in January
• Senior developer @
MyPunchbowl.com
Wednesday, April 28, 2010
9. I’m a pretty awesome dude
• Electrical Engineer by
education
• Built several web apps
• Ex-EMC’er
• All Ruby. Mostly Rails
• Founded
MessageSling.com
• Entered the deadpool
in January
• Senior developer @
MyPunchbowl.com
Wednesday, April 28, 2010
10. I’m a pretty awesome dude
• Electrical Engineer by
education
• Built several web apps
• Ex-EMC’er
• All Ruby. Mostly Rails
• Founded
• All SQL
MessageSling.com
• Entered the deadpool
in January
• Senior developer @
MyPunchbowl.com
Wednesday, April 28, 2010
11. I’m a pretty awesome dude
• Electrical Engineer by
education
• Built several web apps
• Ex-EMC’er
• All Ruby. Mostly Rails
• Founded
• All SQL
MessageSling.com
• No experience w/
NoSQL/Mongo as of
• Entered the deadpool
in January
September ’09
• Senior developer @
MyPunchbowl.com
Wednesday, April 28, 2010
12. I’m a pretty awesome dude
• Electrical Engineer by
education
• Built several web apps
• Ex-EMC’er
• All Ruby. Mostly Rails
• Founded
• All SQL
MessageSling.com
• No experience w/
NoSQL/Mongo as of
• Entered the deadpool
in January
September ’09
• Senior developer @
• Want to provide a
beginner’s perspective
MyPunchbowl.com
Wednesday, April 28, 2010
13. MyPunchbowl is a pretty awesome company
Wednesday, April 28, 2010
14. MyPunchbowl is a pretty awesome company
• Leader in start to finish party planning
Wednesday, April 28, 2010
15. MyPunchbowl is a pretty awesome company
• Leader in start to finish party planning
• Connecting party planners to party
vendors -- subject of this talk
Wednesday, April 28, 2010
16. MyPunchbowl is a pretty awesome company
• Leader in start to finish party planning
• Connecting party planners to party
vendors -- subject of this talk
• Currently employs 11 people
Wednesday, April 28, 2010
17. MyPunchbowl is a pretty awesome company
• Leader in start to finish party planning
• Connecting party planners to party
vendors -- subject of this talk
• Currently employs 11 people
• Funded over 2 rounds by Intel & Contour
Wednesday, April 28, 2010
18. MyPunchbowl is a pretty awesome company
• Leader in start to finish party planning
• Connecting party planners to party
vendors -- subject of this talk
• Currently employs 11 people
• Funded over 2 rounds by Intel & Contour
• Strategic partnership w/ OTC among
others
Wednesday, April 28, 2010
19. MyPunchbowl is a pretty awesome company
• Leader in start to finish party planning
• Connecting party planners to party
vendors -- subject of this talk
• Currently employs 11 people
• Funded over 2 rounds by Intel & Contour
• Strategic partnership w/ OTC among
others
• Amount of traffic, users, events, invites,
vendors, etc... make our data sets large
enough to be interesting :)
Wednesday, April 28, 2010
20. MyPunchbowl is a pretty awesome company
• Leader in start to finish party planning
• Connecting party planners to party
vendors -- subject of this talk
• Currently employs 11 people
• Funded over 2 rounds by Intel & Contour
• Strategic partnership w/ OTC among
others
• Amount of traffic, users, events, invites,
vendors, etc... make our data sets large
enough to be interesting :)
• We’re talking many millions of ‘things’
Wednesday, April 28, 2010
43. Tracking requirement a good excuse to
finally use MongoDB
Me: Hey Blake I’m gonna use MongoDB to
keep track of all this search stuff.
Wednesday, April 28, 2010
44. Tracking requirement a good excuse to
finally use MongoDB
Me: Hey Blake I’m gonna use MongoDB to
keep track of all this search stuff.
Blake: Cool.
Wednesday, April 28, 2010
45. Tracking requirement a good excuse to
finally use MongoDB
Me: Hey Blake I’m gonna use MongoDB to
keep track of all this search stuff.
Blake: Cool.
Matt (CEO): What’s that?
Wednesday, April 28, 2010
46. Tracking requirement a good excuse to
finally use MongoDB
Me: Hey Blake I’m gonna use MongoDB to
keep track of all this search stuff.
Blake: Cool.
Matt (CEO): What’s that?
Blake & Me: Something cool.
Wednesday, April 28, 2010
47. Tracking requirement a good excuse to
finally use MongoDB
Me: Hey Blake I’m gonna use MongoDB to
keep track of all this search stuff.
Blake: Cool.
Matt (CEO): What’s that?
Blake & Me: Something cool.
Matt (CEO): K
Wednesday, April 28, 2010
48. 6 reasons to use MongoDB
• Easy to get running (~5 minutes on OSX)
• Open Source
• Support in multiple (computer) languages
• Prototype in Ruby, move to Java if needed
• Very active development
• Full featured
• Great ecosystem
Wednesday, April 28, 2010
50. MongoDB feels right
Me: MongoDB gives me the warm fuzzies
that Rails did.
Wednesday, April 28, 2010
51. MongoDB feels right
Me: MongoDB gives me the warm fuzzies
that Rails did.
Darren: Just like that Nunemaker post.
Wednesday, April 28, 2010
52. MongoDB feels right
Me: MongoDB gives me the warm fuzzies
that Rails did.
Darren: Just like that Nunemaker post.
Me: ? *runs to google*
Wednesday, April 28, 2010
53. MongoDB feels right
Me: MongoDB gives me the warm fuzzies
that Rails did.
Darren: Just like that Nunemaker post.
Me: ? *runs to google*
Wednesday, April 28, 2010
54. Support is INSANE
11:35pm. Wednesday. Founder.
60 second response time.
Wednesday, April 28, 2010
58. 2.5 days to MongoDB
0 Days 1 Day 2 Days 200+ Days
and on...
Wednesday, April 28, 2010
59. 2.5 days to MongoDB
Decision
to use
MongoDB
0 Days 1 Day 2 Days 200+ Days
and on...
Wednesday, April 28, 2010
60. 2.5 days to MongoDB
Decision
to use
MongoDB
0 Days 1 Day 2 Days 200+ Days
and on...
Play around with
available OSS
Wednesday, April 28, 2010
61. 2.5 days to MongoDB
Decision
to use
MongoDB
Figure out
document
‘schema’
0 Days 1 Day 2 Days 200+ Days
and on...
Play around with
available OSS
Wednesday, April 28, 2010
62. 2.5 days to MongoDB
Decision
to use
MongoDB
Figure out
document
‘schema’
0 Days 1 Day 2 Days 200+ Days
and on...
Play around with
available OSS
Write some stuff on top
of mongo-ruby-driver
Wednesday, April 28, 2010
63. 2.5 days to MongoDB
Decision Build test rig
to use
MongoDB
Figure out
document
‘schema’
0 Days 1 Day 2 Days 200+ Days
and on...
Play around with
available OSS
Write some stuff on top
of mongo-ruby-driver
Wednesday, April 28, 2010
64. 2.5 days to MongoDB
Decision Build test rig
to use
MongoDB
Figure out
document
‘schema’
0 Days 1 Day 2 Days 200+ Days
and on...
Play around with Setup Configuration
available OSS Management
Write some stuff on top
of mongo-ruby-driver
Wednesday, April 28, 2010
65. 2.5 days to MongoDB
Decision Build test rig
to use
MongoDB
Figure out
document Get production ready
‘schema’
0 Days 1 Day 2 Days 200+ Days
and on...
Play around with Setup Configuration
available OSS Management
Write some stuff on top
of mongo-ruby-driver
Wednesday, April 28, 2010
66. 2.5 days to MongoDB
Decision Build test rig
to use
MongoDB
Figure out
document Get production ready
‘schema’
0 Days 1 Day 2 Days 200+ Days
and on...
Play around with Setup Configuration
available OSS Management
Write some stuff on top
Deploy
of mongo-ruby-driver
Wednesday, April 28, 2010
67. A stroll through Mongo’s OSS ecosystem
Wednesday, April 28, 2010
68. A stroll through Mongo’s OSS ecosystem
• mongodb (C++)
Wednesday, April 28, 2010
69. A stroll through Mongo’s OSS ecosystem
• mongodb (C++)
• mongo shell (JS via SpiderMonkey)
Wednesday, April 28, 2010
70. A stroll through Mongo’s OSS ecosystem
• mongodb (C++)
• mongo shell (JS via SpiderMonkey)
• mongo-ruby-driver
Wednesday, April 28, 2010
71. A stroll through Mongo’s OSS ecosystem
• mongodb (C++)
• mongo shell (JS via SpiderMonkey)
• mongo-ruby-driver
• mongo-java-driver
Wednesday, April 28, 2010
72. A stroll through Mongo’s OSS ecosystem
• mongodb (C++)
• mongo shell (JS via SpiderMonkey)
• mongo-ruby-driver
• mongo-java-driver
• mongo_record (Ruby)
Wednesday, April 28, 2010
73. A stroll through Mongo’s OSS ecosystem
• mongodb (C++)
• mongo shell (JS via SpiderMonkey)
• mongo-ruby-driver
• mongo-java-driver
• mongo_record (Ruby)
• mongo_mapper (Ruby)
Wednesday, April 28, 2010
74. A stroll through Mongo’s OSS ecosystem
• mongodb (C++)
• mongo shell (JS via SpiderMonkey)
• mongo-ruby-driver
• mongo-java-driver
• mongo_record (Ruby)
• mongo_mapper (Ruby)
• Integration w/ Rails
Wednesday, April 28, 2010
76. Document ‘schema’
• What do documents look like?
Wednesday, April 28, 2010
77. Document ‘schema’
• What do documents look like?
• Example Document
{
city: “Boston”,
state: “MA”,
date: 1272153600,
occurrences: 1,
category_id: 1
}
Wednesday, April 28, 2010
78. Document ‘schema’
• What do documents look like? • How do you update the documents?
• Example Document
{
city: “Boston”,
state: “MA”,
date: 1272153600,
occurrences: 1,
category_id: 1
}
Wednesday, April 28, 2010
79. Document ‘schema’
• What do documents look like? • How do you update the documents?
• Example Document • Mongo shell command
{ coll.update({‘city’: ‘Boston’,
city: “Boston”, ‘state’: ‘MA’,
state: “MA”, ‘date’: 1272153600,
date: 1272153600, ‘category_id’: 1},
occurrences: 1, {‘$inc’: {‘occurrences’: 1}},
category_id: 1 true)
}
Wednesday, April 28, 2010
80. Document ‘schema’
• What do documents look like? • How do you update the documents?
• Example Document • Mongo shell command
{ coll.update({‘city’: ‘Boston’,
city: “Boston”, ‘state’: ‘MA’,
state: “MA”, ‘date’: 1272153600,
date: 1272153600, ‘category_id’: 1},
occurrences: 1, {‘$inc’: {‘occurrences’: 1}},
category_id: 1 true)
}
Document to match
Wednesday, April 28, 2010
81. Document ‘schema’
• What do documents look like? • How do you update the documents?
• Example Document • Mongo shell command
{ coll.update({‘city’: ‘Boston’,
city: “Boston”, ‘state’: ‘MA’,
state: “MA”, ‘date’: 1272153600,
date: 1272153600, ‘category_id’: 1},
occurrences: 1, {‘$inc’: {‘occurrences’: 1}},
category_id: 1 true)
}
Document to match
Operation to perform
Wednesday, April 28, 2010
82. Document ‘schema’
• What do documents look like? • How do you update the documents?
• Example Document • Mongo shell command
{ coll.update({‘city’: ‘Boston’,
city: “Boston”, ‘state’: ‘MA’,
state: “MA”, ‘date’: 1272153600,
date: 1272153600, ‘category_id’: 1},
occurrences: 1, {‘$inc’: {‘occurrences’: 1}},
category_id: 1 true)
}
Document to match
Operation to perform
‘upsert’: update if it’s there
insert if it’s not
Wednesday, April 28, 2010
99. TESTING
• Pretty much the same as anything else
Wednesday, April 28, 2010
100. TESTING
• Pretty much the same as anything else
• test/unit/search_stats_test.rb
Wednesday, April 28, 2010
101. TESTING
• Pretty much the same as anything else
• test/unit/search_stats_test.rb
• config/environments/test.rb
Wednesday, April 28, 2010
102. TESTING
• Pretty much the same as anything else
• test/unit/search_stats_test.rb
• config/environments/test.rb
• $mongo_db = Mongo::Connection.new.db ‘mongo-sf-db’
Wednesday, April 28, 2010
103. TESTING
• Pretty much the same as anything else
• test/unit/search_stats_test.rb
• config/environments/test.rb
• $mongo_db = Mongo::Connection.new.db ‘mongo-sf-db’
• SearchStatsTest#setup & #teardown
Wednesday, April 28, 2010
104. TESTING
• Pretty much the same as anything else
• test/unit/search_stats_test.rb
• config/environments/test.rb
• $mongo_db = Mongo::Connection.new.db ‘mongo-sf-db’
• SearchStatsTest#setup & #teardown
• No transactions
Wednesday, April 28, 2010
105. TESTING
• Pretty much the same as anything else
• test/unit/search_stats_test.rb
• config/environments/test.rb
• $mongo_db = Mongo::Connection.new.db ‘mongo-sf-db’
• SearchStatsTest#setup & #teardown
• No transactions
• ActiveSupport spoils us
Wednesday, April 28, 2010
106. TESTING
• Pretty much the same as anything else
• test/unit/search_stats_test.rb
• config/environments/test.rb
• $mongo_db = Mongo::Connection.new.db ‘mongo-sf-db’
• SearchStatsTest#setup & #teardown
• No transactions
• ActiveSupport spoils us
• Gotta clean up after yourself
Wednesday, April 28, 2010
108. Other developers gotta
use it too
• Rails’ database.yml takes care of MySQL
Wednesday, April 28, 2010
109. Other developers gotta
use it too
• Rails’ database.yml takes care of MySQL
• Gotta switch up MongoDBs on your own
Wednesday, April 28, 2010
110. Other developers gotta
use it too
• Rails’ database.yml takes care of MySQL
• Gotta switch up MongoDBs on your own
• Simple config system file inspired by
another Nunemaker post.
Wednesday, April 28, 2010
111. Other developers gotta
use it too
• Rails’ database.yml takes care of MySQL
• Gotta switch up MongoDBs on your own
• Simple config system file inspired by
another Nunemaker post.
• No database migrations!
Wednesday, April 28, 2010
112. Other developers gotta
use it too
• Rails’ database.yml takes care of MySQL
• Gotta switch up MongoDBs on your own
• Simple config system file inspired by
another Nunemaker post.
• No database migrations!
• Must write rake tasks to create indexes
unless your ORM takes care of it for you
Wednesday, April 28, 2010
114. Making production
ready
• Replication was iffy in 1.0.0 (solid now)
Wednesday, April 28, 2010
115. Making production
ready
• Replication was iffy in 1.0.0 (solid now)
• Nightly dumps w/ mongoexport
Wednesday, April 28, 2010
116. Making production
ready
• Replication was iffy in 1.0.0 (solid now)
• Nightly dumps w/ mongoexport
• Upload to S3
Wednesday, April 28, 2010
117. Making production
ready
• Replication was iffy in 1.0.0 (solid now)
• Nightly dumps w/ mongoexport
• Upload to S3
• Monitor process w/ monit
Wednesday, April 28, 2010
119. Deploy
• Original deployment uneventful
Wednesday, April 28, 2010
120. Deploy
• Original deployment uneventful
• Just worked
Wednesday, April 28, 2010
121. Deploy
• Original deployment uneventful
• Just worked
• Future deployments that required a
database upgrade required downtime
(bummer)
Wednesday, April 28, 2010
122. Deploy
• Original deployment uneventful
• Just worked
• Future deployments that required a
database upgrade required downtime
(bummer)
• We wanted to play with the geospatial
search
Wednesday, April 28, 2010
124. Day 200
• One production process
Wednesday, April 28, 2010
125. Day 200
• One production process
• One database
Wednesday, April 28, 2010
126. Day 200
• One production process
• One database
• Daily dumps using mongoexport + upload
to S3
Wednesday, April 28, 2010
127. Day 200
• One production process
• One database
• Daily dumps using mongoexport + upload
to S3
• Replication not running
Wednesday, April 28, 2010
128. Day 200
• One production process
• One database
• Daily dumps using mongoexport + upload
to S3
• Replication not running
• Several collections
Wednesday, April 28, 2010
129. Day 200
• One production process
• One database
• Daily dumps using mongoexport + upload
to S3
• Replication not running
• Several collections
• 100k to >10M documents
Wednesday, April 28, 2010
130. Day 200
• One production process
• One database
• Daily dumps using mongoexport + upload
to S3
• Replication not running
• Several collections
• 100k to >10M documents
• Scores of deep, composite indexes
Wednesday, April 28, 2010
144. But it’ll help pick up the pieces
Before index
> db.vendors.findOne({'date': {'$gt': 1271895200}})
{ ... }
Sun Apr 25 01:19:51 query v_production.vendors ntoreturn:1 reslen:114 nscanned:~10M { date: { $gt: 1271895200.0 } } nreturned:1 3492ms
During index
> db.vendors.ensureIndex({'date': 1})
Sun Apr 25 01:20:17 building new index on { date: 1.0 } for v_production.vendors
Sun Apr 25 01:20:17 Buildindex v_production.vendors idxNo:2 { _id: ObjId(4bd398d1dbf523027368d566), ns: "v_production.vendors", key: { date: 1.0 }, name:
"date_1" }
! ! ...
Sun Apr 25 01:21:35 ! done building bottom layer, going to commit
Sun Apr 25 01:21:35 done for ~10M records 78.56secs
Sun Apr 25 01:21:35 insert v_production.system.indexes 78560ms
After Index
> db.vendors.find({'date': 1272153600}).explain()
{
! ...
! "nscanned" : 11220,
! "millis" : 12,
! ...
}
Wednesday, April 28, 2010
145. But it’ll help pick up the pieces
Before index
> db.vendors.findOne({'date': {'$gt': 1271895200}})
{ ... }
Sun Apr 25 01:19:51 query v_production.vendors ntoreturn:1 reslen:114 nscanned:~10M { date: { $gt: 1271895200.0 } } nreturned:1 3492ms
Full collection scan ~3.5s
During index
> db.vendors.ensureIndex({'date': 1})
Sun Apr 25 01:20:17 building new index on { date: 1.0 } for v_production.vendors
Sun Apr 25 01:20:17 Buildindex v_production.vendors idxNo:2 { _id: ObjId(4bd398d1dbf523027368d566), ns: "v_production.vendors", key: { date: 1.0 }, name:
"date_1" }
! ! ...
Sun Apr 25 01:21:35 ! done building bottom layer, going to commit
Sun Apr 25 01:21:35 done for ~10M records 78.56secs
Sun Apr 25 01:21:35 insert v_production.system.indexes 78560ms
After Index
> db.vendors.find({'date': 1272153600}).explain()
{
! ...
! "nscanned" : 11220,
! "millis" : 12,
! ...
}
Wednesday, April 28, 2010
146. But it’ll help pick up the pieces
Before index
> db.vendors.findOne({'date': {'$gt': 1271895200}})
{ ... }
Sun Apr 25 01:19:51 query v_production.vendors ntoreturn:1 reslen:114 nscanned:~10M { date: { $gt: 1271895200.0 } } nreturned:1 3492ms
Full collection scan ~3.5s
During index
> db.vendors.ensureIndex({'date': 1})
Sun Apr 25 01:20:17 building new index on { date: 1.0 } for v_production.vendors
Sun Apr 25 01:20:17 Buildindex v_production.vendors idxNo:2 { _id: ObjId(4bd398d1dbf523027368d566), ns: "v_production.vendors", key: { date: 1.0 }, name:
"date_1" }
! ! ...
Sun Apr 25 01:21:35 ! done building bottom layer, going to commit
Sun Apr 25 01:21:35 done for ~10M records 78.56secs
Sun Apr 25 01:21:35 insert v_production.system.indexes 78560ms Index added ~79s
No locks.
After Index
> db.vendors.find({'date': 1272153600}).explain()
{
! ...
! "nscanned" : 11220,
! "millis" : 12,
! ...
}
Wednesday, April 28, 2010
147. But it’ll help pick up the pieces
Before index
> db.vendors.findOne({'date': {'$gt': 1271895200}})
{ ... }
Sun Apr 25 01:19:51 query v_production.vendors ntoreturn:1 reslen:114 nscanned:~10M { date: { $gt: 1271895200.0 } } nreturned:1 3492ms
Full collection scan ~3.5s
During index
> db.vendors.ensureIndex({'date': 1})
Sun Apr 25 01:20:17 building new index on { date: 1.0 } for v_production.vendors
Sun Apr 25 01:20:17 Buildindex v_production.vendors idxNo:2 { _id: ObjId(4bd398d1dbf523027368d566), ns: "v_production.vendors", key: { date: 1.0 }, name:
"date_1" }
! ! ...
Sun Apr 25 01:21:35 ! done building bottom layer, going to commit
Sun Apr 25 01:21:35 done for ~10M records 78.56secs
Sun Apr 25 01:21:35 insert v_production.system.indexes 78560ms Index added ~79s
No locks.
After Index
> db.vendors.find({'date': 1272153600}).explain()
{
! ...
! "nscanned" : 11220,
! "millis" : 12, 12ms!
! ...
}
Wednesday, April 28, 2010
148. But it’ll help pick up the pieces
Before index
> db.vendors.findOne({'date': {'$gt': 1271895200}})
{ ... }
Sun Apr 25 01:19:51 query v_production.vendors ntoreturn:1 reslen:114 nscanned:~10M { date: { $gt: 1271895200.0 } } nreturned:1 3492ms
Full collection scan ~3.5s
During index
> db.vendors.ensureIndex({'date': 1})
Sun Apr 25 01:20:17 building new index on { date: 1.0 } for v_production.vendors
Sun Apr 25 01:20:17 Buildindex v_production.vendors idxNo:2 { _id: ObjId(4bd398d1dbf523027368d566), ns: "v_production.vendors", key: { date: 1.0 }, name:
"date_1" }
! ! ...
Sun Apr 25 01:21:35 ! done building bottom layer, going to commit
Sun Apr 25 01:21:35 done for ~10M records 78.56secs
Sun Apr 25 01:21:35 insert v_production.system.indexes 78560ms Index added ~79s
No locks.
After Index
> db.vendors.find({'date': 1272153600}).explain()
During index creation, system completely
{
! ...
CRUD responsive. No impact to
!
!
"nscanned" : 11220,
"millis" : 12, 12ms! MyPunchbowl.com
! ...
}
Wednesday, April 28, 2010
149. Up next: Top Secret Project
Wednesday, April 28, 2010
150. Up next: Top Secret Project
• Project involving
Wednesday, April 28, 2010
151. Up next: Top Secret Project
• Project involving
• SCREAMS for a document-based solution
Wednesday, April 28, 2010
152. Up next: Top Secret Project
• Project involving
• SCREAMS for a document-based solution
• mongosphinx
•
MongoDB’s ad-hoc full text search ok, lacks infix
matching and bulk index building
•
Geo-spatial search not yet ellipsoidal (or even spherical)
Wednesday, April 28, 2010
153. Up next: Top Secret Project
• Project involving
• SCREAMS for a document-based solution
• mongosphinx
•
MongoDB’s ad-hoc full text search ok, lacks infix
matching and bulk index building
•
Geo-spatial search not yet ellipsoidal (or even spherical)
• paperclip+mongomapper
Wednesday, April 28, 2010
154. Up next: Top Secret Project
• Project involving
• SCREAMS for a document-based solution
• mongosphinx
•
MongoDB’s ad-hoc full text search ok, lacks infix
matching and bulk index building
•
Geo-spatial search not yet ellipsoidal (or even spherical)
• paperclip+mongomapper
• MyPunchbowl user/event/invite data mining/visualization
Wednesday, April 28, 2010
155. Up next: Top Secret Project
• Project involving
• SCREAMS for a document-based solution
• mongosphinx
•
MongoDB’s ad-hoc full text search ok, lacks infix
matching and bulk index building
•
Geo-spatial search not yet ellipsoidal (or even spherical)
• paperclip+mongomapper
• MyPunchbowl user/event/invite data mining/visualization
• Charding + MapReduce = Nerdstorm
Wednesday, April 28, 2010
156. Up next: Top Secret Project
• Project involving
• SCREAMS for a document-based solution
• mongosphinx
•
MongoDB’s ad-hoc full text search ok, lacks infix
matching and bulk index building
•
Geo-spatial search not yet ellipsoidal (or even spherical)
• paperclip+mongomapper
• MyPunchbowl user/event/invite data mining/visualization
• Charding + MapReduce = Nerdstorm
• Building tools to speed up ETL out of MySQL and into
MongoDB
Wednesday, April 28, 2010
158. Contact Me
ryan@angilly.com
http://www.mypunchbowl.com
http://ryanangilly.com
@angilly
Wednesday, April 28, 2010
159. Links
Slide 3/4 logos, wget’d from all over the Internets.
Dunce Cap http://steynian.files.wordpress.com/2009/09/dunce-cap.jpg
http://railstips.org/blog/archives/2009/12/18/why-i-think-mongo-is-to-databases-what-rails-was-to-frameworks/
http://railstips.org/blog/archives/2009/11/10/config-so-simple-your-mama-could-use-it/
Vendors configuration http://gist.github.com/380213
Wednesday, April 28, 2010