mongodb mojo: building a basic perl app
Post on 18-Oct-2014
1.121 views
DESCRIPTION
Building a basic app using MongoDB + Perl. From Sydney Perl Mongers meetup (September, 2013).TRANSCRIPT
Stephen Steneker (@stennie)
#MongoDB
MongoDB Mojo: Building a basic Perl app
Community Support Manager, MongoDB
MongoDB is a ___________ database
• Document oriented
• Open source
• High performance
• Horizontally scalable
• Full featured
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
Depth of Functionality
Scal
abili
ty &
Per
form
ance
Memcached
MongoDB
RDBMS
Database Landscape
Full Featured
• Ad Hoc queries
• Real time aggregation
• Rich query capabilities
• Strongly consistent
• Geospatial features
• Support for most programming languages
• Flexible schema
What We Will Build:
• “Library”: A demo application – Users – Books – Authors – Publishers
Photo by Jessica Spengler: http://www.flickr.com/photos/wordridden/6798197508/
What We Will Need:
• MongoDB – http://www.mongodb.org/downloads
• CPAN Modules: – https://metacpan.org/module/Mojolicious::Lite – https://metacpan.org/module/MongoDB
Inside the CPAN Distribution: Requirements
• Moose
• DateTime
• Digest::MD5
• Tie::IxHash
• XSLoader
• boolean
Inside the CPAN Distribution: Client
• MongoDB::MongoClient – new in version 0.502 (Nov-2012) – “Safe” (write-acknowledged) by default – Encapsulates connection and server info
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
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
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'), }
}
Class Delegation Structure
MongoDB::Cursor Documents
has()!
MongoDB::Collection
has()!
MongoDB::Database
has()!
MongoDB::MongoClient
Application
Let’s Build It!
Building the Library
Building the Library
Building the Library
Building the Library
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'), }
}
Building the Library
Building the Library
What’s on CPAN?
• ODMs (Object Document Mappers) – Like ORMs but simpler
Mongoose
• Based on MongoMapper from Ruby.
• MongoDB Docs --> Moose objects.
http://search.cpan.org/~rodrigo/Mongoose-0.23/ (28-Jan-2013)
MongoDBI
• Very Perlish
• Moose-like Syntax
http://search.cpan.org/~awncorp/MongoDBI-0.02/ (17-Oct-2012)
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)
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/