How Different are MongoDB Drivers
-
Upload
norberto-leite -
Category
Technology
-
view
696 -
download
0
description
Transcript of How Different are MongoDB Drivers
How different are MongoDB Drivers?
SA, MongoDB
Norberto Leite
#mongobe
{ "name": "Norberto Leite", "role": "Solutions Architect", "company": "MongoDB", "address": ["Barcelona, Spain”, ”Brussels, Belgium”] "contact": "[email protected]", "likes": { "beer": "Superbock", "software": ["Development", "python", "go", "databases"], "football": "FC Porto" }
}
Hi There!
Agenda
• MongoDB Drivers
• Community vs Official Supported
• General Considerations
• Examples
• Meta Driver Project
MongoDB Drivers
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
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
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
struct OP_QUERY {
MsgHeader header; // standard message header
int32 flags; // bit vector of query options. See below for details.
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 fields
// to return. See below for details.
}
Query Message
How many drivers ?
• A few
How many drivers?
• 13 officially supported drivers – Python – Java – C / C++ / C# – PHP – Node.js – Perl – Ruby – Scala – …
http://docs.mongodb.org/ecosystem/drivers/
How many drivers?
• Community Supported – Matlab – R – Go – Clojure – Dart – Erlang – Prolog – …
http://docs.mongodb.org/ecosystem/drivers/community-supported-drivers/
Community vs Official Supported
Don’t take the RED PILL!
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 – …
But most important Use the best tool for the problem!
Language Ecosystem
Python
• Official Driver – pymongo
• Frameworks | ODMs – mongoengine – minimongo – Manga
• Alternative Drivers – Asynchronous • Motor • TxMongo
> pip install pymongo
//or
> easy_install pymongo
//using ipython
> ipython
>> from pymongo import MongoClient
>> mc = MongoClient()
Python
Node.js
• Official Driver – http://mongodb.github.io/node-mongodb-native/
• ODM – Mongose • http://mongoosejs.com/
• Others – Mongoskin – Mongolia
http://docs.mongodb.org/ecosystem/drivers/node-js/
> node
>> var MongoClient = require("mongodb").MongoClient
>> MongoClient.connect( "mongodb://nair.local:27017",
function(err, db){
if(!err) {console.log("we are connected");}
});
>> var col = db.collection("sample");
Node.js
Java
• Official Driver – http://api.mongodb.org/java/current/index.html
• Multiple Frameworks – Morphya – DataNucleus JPA/JDO – Jongo
• JVM Languages – Scala – Clojure – Groovy
Clojure
(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
Go
• Not officially supported driver!
• mgo Library – http://labix.org/mgo – Really cool! – We use it internally for some projects
• Others – gomongo – go-mongo
Let’s get some code Running!
MongoDB Meta Driver Project
Meta Driver
• http://docs.mongodb.org/meta-driver/latest/
• Help new drivers to be built by the community
• Basic structure and conventions documentation
• Beta Project – Under Development