2. MongoDB is a ___________ database
• Document oriented
• Open source
• High performance
• Horizontally scalable
• Full featured
3. High Performance
• Written in C++
• Extensive use of memory-mapped files
i.e. read-through write-through memory caching.
• Runs nearly everywhere
• Data serialized as BSON (fast parsing)
• Full support for primary & secondary indexes
• Document model = less work
5. Full Featured
• Ad Hoc queries
• Real time aggregation
• Rich query capabilities
• Strongly consistent
• Geospatial features
• Support for most programming languages
• Flexible schema
6. What We Will Build:
• “Library”: A demo application
– Users
– Books
– Authors
– Publishers
Photo by Jessica Spengler: http://www.flickr.com/photos/wordridden/6798197508/
7. What We Will Need:
• MongoDB
– http://www.mongodb.org/downloads
• CPAN Modules:
– https://metacpan.org/module/Mojolicious::Lite
– https://metacpan.org/module/MongoDB
9. Inside the CPAN Distribution: Client
• MongoDB::MongoClient
– new in version 0.502 (Nov-2012)
– “Safe” (write-acknowledged) by default
– Encapsulates connection and server info
10. Inside the MongoDB CPAN Distribution: Classes
• MongoDB::Database
– Represents a database (namespace) on the MongoDB server
• MongoDB::Collection
– Represents a collection (table? kinda) in a database
• MongoDB::Cursor
– Retrieves documents (rows? kinda) from a collection
11. MongoDB Documents
• Documents live in Collections
• Documents have no pre-defined schema
• Documents have key-value pairs, like Perl hashes
• Documents can have nested structure (arrays and
other documents), like Perl hashes
• Documents look something like JSON
12. MongoDB Documents
{
'title': 'Fellowship of the Ring, The',
'author': ObjectId("507ffbb1d94ccab2da652597"),
'language': 'English',
'genre': ['fantasy', 'adventure'],
'publication': {
'name': 'George Allen & Unwin',
'location': 'London',
'date': new Date('21 July 1954'),
}
}
19. Building the Library
Remember the Genres?
{
'title': 'Fellowship of the Ring, The',
'author': ObjectId("507ffbb1d94ccab2da652597"),
'language': 'English',
'genre': ['fantasy', 'adventure'],
'publication': {
'name': 'George Allen & Unwin',
'location': 'London',
'date': new Date('21 July 1954'),
}
}
22. What’s on CPAN?
• ODMs (Object Document Mappers)
– Like ORMs but simpler
23. Mongoose
• Based on MongoMapper
from Ruby.
• MongoDB Docs -->
Moose objects.
http://search.cpan.org/~rodrigo/Mongoose-0.23/ (28-Jan-2013)
24. MongoDBI
• Very Perlish
• Moose-like Syntax
http://search.cpan.org/~awncorp/MongoDBI-0.02/ (17-Oct-2012)
25. MongoDB::Async
• Tracks upstream MongoDB Distribution
• Uses Coro and libev for asynchronous queries
• (Mostly) drop-in replacement for MongoDB driver
http://search.cpan.org/~nyaknyan/MongoDB-Async-0.503.2/ (22-Dec-2012)
26. Where to from here?
• Learn more about MongoDB
– http://docs.mongodb.org
• Learn about the MongoDB Perl API
– https://metacpan.org/module/MongoDB::Tutorial
• Community support
– http://stackoverflow.com/tags/mongodb
– https://groups.google.com/group/mongodb-user
• MongoDB University
– http://education.mongodb.com/