halloween special a self post-mortem – using mongodb for voczie
DESCRIPTION
Halloween Special a self Post-mortem – Using MongoDB for VocZie. Chris (I’m not a ghost) Woods. What went right (with Mongo). Application design Application development and system migration Application debugging MongoDB Documentation. WWR: Application Design. - PowerPoint PPT PresentationTRANSCRIPT
Halloween Special a self Post-mortem – Using MongoDB for VocZie
Chris (I’m not a ghost) Woods
What went right (with Mongo)
• Application design• Application development and system
migration• Application debugging• MongoDB Documentation
WWR: Application Design
WWR: VocZie’s Structures
• Functionality First– What data does the UI need?– What structure would best present that data?
• Resulting Structures– User Object– Feed Object– Story Object– Comment Object
WWR: MongoDB Structures
• Collections• Objects and their identity• The two ways of relating objects– Via pointers (aka _id)– Via embedding
WWR: VocZie’s Object linking
• User Object– Array of pointers to feeds subscribed
• Story Object– Pointer to a feed object– One embedded comment object (if available)
• Comment Object– Pointer to a story object– Pointer to a user object (if available)
WWR: VocZie’s Object linking
User ObjectFeed Object
Comment Object
Story Object
Comment Object
1
1
1
1
0..1
1
*
1
WWR: VocZie’s REST API
Examples:
• /feeds/<feed_id>• /feeds/<feed_id>/stories• /feeds/<feed_id>/story/<story_id>/comments• /feeds/<feed_id>/story/<story_id>
What went wrong (with Mongo)
What went wrong (with Mongo)
• VM is just a VM except when it is Hell…• Oh yeah, and there are no transactions• MongoDB Documentation good…. PHP Driver
Documentation ..?...?
WWR: The VM from Hell
• VMs change over time…
WWR: The VM from Hell
500 – Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.
WWR: The VM from Hell
root@1310-1064-2283:~# mongod
mongod --help for help and startup optionsMon Jul 23 14:38:35 [initandlisten] MongoDB starting : pid=26105 port=27017dbpath=/data/db/ 64-bit
** WARNING: You are running in OpenVZ. This is known to be broken!!!
WWR: The VM from Hell
• Have I lost all my data ?• Can I back up now?
WWR: The VM from Hell
• The no backup – backup…• Check out /var/lib/mongodb
WWR: TransactionsUpdateStoriesFromFeed( url )
if ( url is being updated ) then wait for notificationelselock out everyone else from updating urlfetch and parse stories from feed’s urlfor each story returnedif ( story doesn’t already exist in DB)add storyend ifend forremove lock preventing anyone else from updating urlend if
End function
WWR: Implementing a lock manually
• update if current– Aka Compare and Swap – Atomic MongoDB actions allow for manual
creation of locks– http://www.mongodb.org/display/DOCS/Atomic+
Operations#AtomicOperations-TheABANuance
Conclusions
• Good– No SQL DB is great for avoiding the DAL translation
pain– Aid development time– MongoDB Core Documentation is good
• Bad– Small print – VM compatibility– MongoDB Driver Documentation isn’t as good as
the core
Q&A
Who am I ? What am I doing here?
• Twitter: @mcwoods
• Email: [email protected]
• Mind-Flip Blog: www.mind-flip.com/theBlog
• When I think I’m being profound, or funny: www.WithBigHair.com