How many drivers for MongoDB are there? Which one is the best? How do they differ from one another? We are going to explore this and other questions with some code examples across a great deal languages
5. What’s a Driver?
• Native Language Library
• API that exposes methods to operate w/ MongoDB
• Serialization and Deserialization of native objects/
structures into BSON format
– http://bsonspec.org
• Handles the communication and pooling with server
6. struct MsgHeader {
int32 messageLength; // total message size, including this
int32 requestID; // identifier for this message
int32 responseTo; // requestID from the original request
// (used in reponses from db)
int32 opCode; // request type - see table below
}
Driver Messages
7. struct OP_INSERT {
MsgHeader header; // standard message header
int32 flags; // bit vector - see below
cstring fullCollectionName; // "dbname.collectionname"
document* documents; // one or more documents to insert
into the collection
}
Insert Message
8. struct OP_QUERY {
MsgHeader header; // standard message header
int32 flags; // bit vector of query options. See below for det
cstring fullCollectionName ; // "dbname.collectionname"
int32 numberToSkip; // number of documents to skip
int32 numberToReturn; // number of documents to return
// in the first OP_REPLY batch
document query; // query object. See below for details.
[ document returnFieldsSelector; ] // Optional. Selector indicating the fiel
// to return. See below for details.
}
Query Message
11. How many drivers?
• 13 officially supported drivers
– Python
– Java
– C / C++ / C#
– PHP
– Node.js
– Perl
– Ruby
– Scala
– …
http://docs.mongodb.org/ecosystem/drivers/
12. How many drivers?
• Community Supported
– Matlab
– R
– Go
– Clojure
– Dart
– Erlang
– Prolog
– …
http://docs.mongodb.org/ecosystem/drivers/community-supported-drivers/
15. Things to consider
• Official driver means:
– We have dedicated resources to work on the driver
– Constant delivery and updated with server version
– Support includes fixes for drivers
• Some community drivers are also maintained by
MongoDB engineers
– mongoengine
– motor
– …
24. (ns my.service.server
(:require [monger.core :as mg])
(:import [com.mongodb MongoOptions ServerAddress]))
;; localhost, default port
(mg/connect!)
;; set default database using set-db
(mg/set-db! (mg/get-db "monger-test"))
Clojure
25. Go
• Not officially supported driver!
• mgo Library
– http://labix.org/mgo
– Really cool!
– We use it internally for some projects
• Others
– gomongo
– go-mongo