210 likes | 317 Vues
Discover the journey of using MongoDB for VocZie, delving into application design, development, debugging, and system migration. Learn the right and wrong turns in MongoDB implementation and implications for VocZie’s structures and REST API. Dive into object linking, REST API examples, and atomic MongoDB actions.
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