MongoDB Revised Sharding Guidelines MongoDB 3.x_Kimberly_Wilkins
Getting started with MongoDB and Scala - Open Source Bridge 2012
-
date post
18-Oct-2014 -
Category
Technology
-
view
7.085 -
download
0
description
Transcript of Getting started with MongoDB and Scala - Open Source Bridge 2012
Getting started with MongoDB and Scala
Open Source BridgeJune 27, 2012Sean Sullivan
Gilt Groupe
Gilt Portland
http://twitter.com/tinyrobots/status/217675630962163713
Jobs @ Gilt Portland
• QA engineering
• Backend engineering
• Frontend engineering
#scala #java #html5 #javascript#ruby
open source @ Gilt
• MongoDB
• Using Mongo and Scala together
• MongoDB at Gilt
“MongoDB is a document-oriented database management system designed for performance, horizontal scalability, high availability, and advanced queryability”
source: http://docs.mongodb.org/manual/about/
http://www.mongodb.org
https://github.com/mongodb/mongo
Licensing
Database: GNU AGPL v3.0
Drivers: Apache License 2.0
source: http://www.mongodb.org/display/DOCS/Licensing
Getting started
http://www.mongodb.org/downloads
http://www.mongodb.org/downloads
MongoDB concepts
MySQL MongoDBdatabase database
table collectionindex indexrow BSON document
column BSON fieldjoin embedding and linking
primary key _id fieldgroup by aggregation
source: mongodb.org
http://www.mongodb.org/display/DOCS/BSON
Embedding vs Linking
“Embedding is the nesting of objects and arrays inside a BSON document”
“Links are references between documents”
source: http://www.mongodb.org/display/DOCS/Schema+Design
MongoDB on MacOS X
$ wget http://downloads.mongodb.org/osx/mongodb-osx-x86_64-2.0.6.tgz
$ tar -zxvf mongodb-osx-x86_64-2.0.6.tgz
$ sudo mkdir -p /data/db
$ sudo chown `id -u` /data/db
Starting MongoDB
$ mongod
Mongo shell
$ mongo
Mongo shell demo
Mongo shell
> use mydb
> obama = { name: “Obama” };
> db.presidents.save(obama);
> db.presidents.ensureIndex({ name: 1 });
> db.presidents.find({name: “Obama”});
> exit
Client libraries for the JVM
• mongo-java-driver
• Morphia• Casbah
• Hammersmith
• Rogue
MongoDB Java driver
https://github.com/mongodb/mongo-java-driver/
mongo-java-driver and Maven
<dependency> <groupId>org.mongodb<groupId> <artifactId>mongo-java-driver<artifactId> <version>2.8.0<version> <dependency>
mongo-java-driver example code
Morphia
http://code.google.com/p/morphia/
Morphia example code
Casbah
https://github.com/mongodb/casbah/
Casbah
• Scala toolkit for MongoDB
• built on top of the mongo-java-driver
Casbah
• Scala idioms
• Scala collections
• fluid query syntax
https://twitter.com/mongodb/status/217291079920254976
Casbah and Maven
<dependency> <groupId>org.mongodb<groupId> <artifactId>casbah_2.9.2<artifactId> <version>2.3.0<version> <dependency>
Casbah and SBT
"org.mongodb" %% "casbah" % "2.3.0"
Casbah DBObjectimport org.mongodb.casbah.Imports._
val mongoConn = MongoConnection(hostname, port)val mongoDB = mongoConn(“test_db”)val collection = mongoDB(“test_data”)
val newObj = MongoDBObject(“a” -> “apple”, “b” -> “banana”)newObj += “c” -> “chocolate”
val a = newObject.getAs[String](“a”)// a is an Option[String]
http://api.mongodb.org/scala/casbah/current/tutorial.html
Casbah MongoDBList// MongoDBList is a Mongo-friendly Scala List
import org.mongodb.casbah.Imports._
val builder = MongoDBList.newBuilder builder += "foo" builder += "bar" builder += "x" builder += "y" val newLst = builder.result /* newLst: com.mongodb.BasicDBList = [ "foo" , "bar" , "x" , "y"] */
http://api.mongodb.org/scala/casbah/current/tutorial.html
Querying with Casbahval mongoColl = MongoConnection()("test_db")("users")val user1 = MongoDBObject("user" -> "barack", "email" -> "[email protected]")val user2 = MongoDBObject("user" -> "someOtherUser")mongoColl += user1mongoColl += user2mongoColl.find()// com.mongodb.casbah.MongoCursor =// MongoCursor{Iterator[DBObject] with 2 objects.}
for { x <- mongoColl} yield x/* Iterable[com.mongodb.DBObject] = List( { "_id" : { "$oid" : "4c3e2bec521142c87cc10faa"} , "user" : "obama" , "email" : "[email protected]"}, { "_id" : { "$oid" : "4c3e2bec521142c87dc10fbb"} , "user" : "someOtherUser"} ) */
http://api.mongodb.org/scala/casbah/current/tutorial.html
Fluid querying with Casbah DSL
val q = "email" $exists true// q: (String, com.mongodb.DBObject) =// (email,{ "$exists" : true})val users = for (x <- mongoColl.find(q)) yield xassert(users.size == 1)
http://api.mongodb.org/scala/casbah/current/tutorial.html
Hammersmith
https://github.com/bwmcadams/hammersmith
Hammersmith
• new MongoDB driver for Scala
• pure Scala
• Asynchronous
• Not production ready at this time
MongoDB at Gilt
• feature configuration service
• global navigation service
• user service
Foursquare’s Fongo project
“Fongo is an in-memory java implementation of mongo.”
“[...] primary use is for lightweight unit testing where you don't want to spin up a mongo process”
https://github.com/foursquare/fongo
Additional resources
• http://www.10gen.com/presentations
• http://www.mongodb.org
• http://www.slideshare.net/sullis
Questions?
THE END