2. NoSQL A form of database management system that is non-relational. Systems are often schema less, avoid joins & are easy to scale. The term NoSQL was coined in 1998 by Carlo Strozzi and then again in early 2009 with the no:sql(east) conference A better term would have been “NoREL” but NoSQL caught on. Think of it more as meaning “Not Only SQL”
3. But Why Choose NoSQL? Amount of data stored is on the up & up. Facebook is rumoured to hold over 50TB of data in their NoSQL system for their inbox search The data we store is more complex than 15 years ago. Easy Distribution With all this data is needs to be easy to be able to add/remove servers without any disruption of service.
5. Key-Value Store Data is stored in (unsurpisingly) key/value pairs. Designed to handle lots of data and heavy load Based on a Amazon’s Dynamo Paper Example: Voldermort (http://project-voldemort.com/) - Developed by the guys at LinkedIn
6. Graph Focuses on modeling data & associated connections Inspired by mathematical Graph Theory. Example: FlockDB (http://github.com/twitter/flockdb) – developed by Twitter
7. BigTable / Column Families Based on the BigTable paper from Google Data is grouped by columns, not rows. Example: Cassandra (http://cassandra.apache.org/) – Originally developed by Facebook, now and Apache project.
8. Document Store Data stored as whole documents. JSON & XML are popular formats Maps well to an Object Orientated programming model Example: CouchDB (http://couchdb.apache.org/) or … { “id”: “123”, “name”: “Oliver Clothesoff”, “dob”: { “year”: 1985, “month”: 5, “day”: 12 } }
9. MongoDB! Short for humongous Open source with development lead by 10Gen Document Based Schema-less Highly Scalable MapReduce Easy Replication & Sharding
10. Familiar Structure A MongoDB instance is made up of a number of databases. These contain a number of collections & you can have collections nested under other collections. Compare it to MySQL which has databases and tables.
11. Inserts – As Easy As Pie use cookbook; db.recipes.save({ “name”: “Cherry Pie”, “ingredients”: [“cherries”, “pie”], “cooking_time”: 30 });
12. Searching – A Piece Of Cake! db.recipes.find({ “cooking_time”: { “$gte”: 10, “$lt”: 30 } } db.recipes.findOne()
13. Some More Advanced Syntax Limiting Results db.find().limit(10); Skipping results db.find().skip(5); Sorting db.find().sort({cooking_time: -1}); Cursors: var cur = db.find().cursor(); cur.forEach( function(x) { print(tojson(x)); });
14. MapReduce Great way of doing bulk manipulation or aggregation. 2 or 3 functions written in JavaScript that execute on the server. An example use could be generating a list of top queries from some search logs.
15. Map Function Takes some input of the form of key/value pairs, performs some calculations and returns 0 or more key/value pairs map = function() { if (!this.query) { return; } emit (this.query, {count: 1}); }
16. Reduce Function Takes the results from the map function, does something (normally combine the results) and produces output in key/value pairs reduce = function(key, values) { var count = 0; values.forEach(function(v) { count += v[‘count’]; } return {count: count;} }
17. Replica Sets Master/Slave configuration If your primary server goes down, one of the secondary ones takes overautomatically Extremely easy to setup
19. Other Features GridFS support – Distributed file storage Geospatial indexing It’s constantly in development so new features are being worked on all the time!
20. Why Not Try It Yourself Download it at: http://www.mongodb.org Online tutorial at:http://www.mongodb.org/display/DOCS/Tutorial Some handy MongoDB sites: MongoDB Cookbook: http://cookbook.mongodb.org/ Kyle Banker’s blog: http://kylebanker.com/blog/ There’salso a load of handyreferencecards, stickers and otherMongoDBfreebiesupfront!