How Different are MongoDB Drivers

Post on 12-May-2015

696 views 0 download

Tags:

description

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

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": "norberto@mongodb.com", "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

Obrigado!

norberto@mongodb.com

Norberto Leite

@nleite