210 likes | 309 Views
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.
E N D
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: 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 Object Feed Object 1 * 0..1 1 1 1 Story Object 1 Comment Object Comment Object 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) • 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: Transactions UpdateStoriesFromFeed( url ) if ( url is being updated ) then wait for notification else lock out everyone else from updating url fetch and parse stories from feed’s url for each story returned if ( story doesn’t already exist in DB) add story end if end for remove lock preventing anyone else from updating url end 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
Who am I ? What am I doing here? • Twitter: @mcwoods • Email: woods.mc@gmail.com • Mind-Flip Blog: www.mind-flip.com/theBlog • When I think I’m being profound, or funny: www.WithBigHair.com