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 Object Feed Object Comment Object Story Object Comment Object * 1
WWR: VocZie’s REST API Examples: /feeds/ /feeds/ /stories /feeds/ /story/ /comments /feeds/ /story/
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 mongod mongod --help for help and startup options Mon Jul 23 14:38:35 [initandlisten] MongoDB starting : pid=26105 port=27017 dbpath=/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 – Operations#AtomicOperations-TheABANuance 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: Mind-Flip Blog: flip.com/theBlogwww.mind- flip.com/theBlog When I think I’m being profound, or funny: