+ All Categories
Home > Technology > 2013-03-23 - NoSQL Spartakiade

2013-03-23 - NoSQL Spartakiade

Date post: 12-May-2015
Category:
Upload: johannes-hoppe
View: 1,748 times
Download: 0 times
Share this document with a friend
Description:
My slides for the spartakiade conference in Berlin. I was talking about NoSQL with Redis, RavenDB and MongoDB. 145 hard slides - this is SPARTA!
Popular Tags:
145
Transcript
Page 1: 2013-03-23 - NoSQL Spartakiade
Page 2: 2013-03-23 - NoSQL Spartakiade
Page 3: 2013-03-23 - NoSQL Spartakiade
Page 4: 2013-03-23 - NoSQL Spartakiade
Page 5: 2013-03-23 - NoSQL Spartakiade
Page 6: 2013-03-23 - NoSQL Spartakiade
Page 7: 2013-03-23 - NoSQL Spartakiade
Page 8: 2013-03-23 - NoSQL Spartakiade
Page 9: 2013-03-23 - NoSQL Spartakiade
Page 10: 2013-03-23 - NoSQL Spartakiade
Page 11: 2013-03-23 - NoSQL Spartakiade
Page 12: 2013-03-23 - NoSQL Spartakiade
Page 13: 2013-03-23 - NoSQL Spartakiade
Page 14: 2013-03-23 - NoSQL Spartakiade
Page 15: 2013-03-23 - NoSQL Spartakiade
Page 16: 2013-03-23 - NoSQL Spartakiade

Redis

Page 17: 2013-03-23 - NoSQL Spartakiade
Page 18: 2013-03-23 - NoSQL Spartakiade
Page 19: 2013-03-23 - NoSQL Spartakiade
Page 20: 2013-03-23 - NoSQL Spartakiade
Page 21: 2013-03-23 - NoSQL Spartakiade
Page 22: 2013-03-23 - NoSQL Spartakiade
Page 23: 2013-03-23 - NoSQL Spartakiade
Page 24: 2013-03-23 - NoSQL Spartakiade

› SET note1:title "Mittag"

› SET note1:message "nicht vergessen"

› KEYS note1:*

› GET note1:title

› DEL note1:title note1:message

Page 25: 2013-03-23 - NoSQL Spartakiade
Page 26: 2013-03-23 - NoSQL Spartakiade
Page 27: 2013-03-23 - NoSQL Spartakiade
Page 28: 2013-03-23 - NoSQL Spartakiade
Page 29: 2013-03-23 - NoSQL Spartakiade

http://bit.ly/ISv9f6

Page 30: 2013-03-23 - NoSQL Spartakiade
Page 31: 2013-03-23 - NoSQL Spartakiade

avenDBR

Page 32: 2013-03-23 - NoSQL Spartakiade
Page 33: 2013-03-23 - NoSQL Spartakiade
Page 34: 2013-03-23 - NoSQL Spartakiade

››

Page 35: 2013-03-23 - NoSQL Spartakiade

Page 36: 2013-03-23 - NoSQL Spartakiade

››

››

Page 38: 2013-03-23 - NoSQL Spartakiade

Page 39: 2013-03-23 - NoSQL Spartakiade

››

Page 40: 2013-03-23 - NoSQL Spartakiade
Page 41: 2013-03-23 - NoSQL Spartakiade

›››

Page 42: 2013-03-23 - NoSQL Spartakiade

using (var documentStore = new EmbeddableDocumentStore{ RunInMemory = true}.Initialize()) { using (var session = documentStore.OpenSession()) { // Run complex test scenarious } }

Page 43: 2013-03-23 - NoSQL Spartakiade

››

›››

Page 44: 2013-03-23 - NoSQL Spartakiade

Ayende Rahien on the HTTP API - http://ravendb.net/documentation/docs-http-api-restful

Page 45: 2013-03-23 - NoSQL Spartakiade

›››

C:\>curl -X GET http://localhost:8080/docs/Categories/1 -i HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 ETag: 00000000-0000-0200-0000-000000000004 { "Name" : "Normal Importance", "Color" : "green" }

Page 46: 2013-03-23 - NoSQL Spartakiade
Page 47: 2013-03-23 - NoSQL Spartakiade

var notes = session.Advanced .LuceneQuery<Note>() .Where("Category:Important") .ToArray();

var notes = session .Query<Note>() .Where(n => n.Category == "Important") .ToArray();

Page 48: 2013-03-23 - NoSQL Spartakiade

MongoDB

Page 49: 2013-03-23 - NoSQL Spartakiade
Page 50: 2013-03-23 - NoSQL Spartakiade
Page 51: 2013-03-23 - NoSQL Spartakiade
Page 52: 2013-03-23 - NoSQL Spartakiade
Page 53: 2013-03-23 - NoSQL Spartakiade
Page 54: 2013-03-23 - NoSQL Spartakiade

IBM’s IMS

Codd publishes relational model paper

in 1970

1966 1969 1970 1985 2000 2004 2007

Agile becoming more popular

1990’s 2009

CODASYL model published

Term “object-oriented database” appears

Brewer’s CAP born

Google BigTable

Amazon Dynamo

Apache Cassandra initial release

2008

MongoDB initial release

1973 1974

INGRES

SQL invented

1977

Oracle founded

10gen founded

NoSQL Movement

Page 55: 2013-03-23 - NoSQL Spartakiade
Page 56: 2013-03-23 - NoSQL Spartakiade
Page 57: 2013-03-23 - NoSQL Spartakiade

››

Page 58: 2013-03-23 - NoSQL Spartakiade
Page 59: 2013-03-23 - NoSQL Spartakiade

› use WebNote

› db.Notes.save( { Title: 'Mittag', Message: 'nicht vergessen‘ } );

› db.Notes.save

Page 60: 2013-03-23 - NoSQL Spartakiade

for(i=0; i<1000; i++) {

['quiz', 'essay', 'exam'].forEach(function(name) {

var score = Math.floor(Math.random() * 50) + 50;

db.scores.save({student: i, name: name, score: score});

});

}

db.scores.count();

Page 61: 2013-03-23 - NoSQL Spartakiade

› db.Notes.find();

› db.Notes.find({ Title: /Test/i });

› db.Notes.find( { "Categories.Color": "red"}).limit(1);

Page 62: 2013-03-23 - NoSQL Spartakiade

› db.Notes.update({Title: 'Test'}, {'$set': {Categories: []}});

› db.Notes.update({Title: 'Test'}, {'$push': {

Categories: {Color: 'Red'} }

});

Page 63: 2013-03-23 - NoSQL Spartakiade

› db.dropDatabase();

› db.Notes.drop();

› db.Notes.remove();

Page 64: 2013-03-23 - NoSQL Spartakiade
Page 65: 2013-03-23 - NoSQL Spartakiade
Page 66: 2013-03-23 - NoSQL Spartakiade

Consistency

Page 67: 2013-03-23 - NoSQL Spartakiade
Page 68: 2013-03-23 - NoSQL Spartakiade
Page 69: 2013-03-23 - NoSQL Spartakiade
Page 70: 2013-03-23 - NoSQL Spartakiade
Page 71: 2013-03-23 - NoSQL Spartakiade
Page 72: 2013-03-23 - NoSQL Spartakiade
Page 73: 2013-03-23 - NoSQL Spartakiade
Page 74: 2013-03-23 - NoSQL Spartakiade
Page 75: 2013-03-23 - NoSQL Spartakiade
Page 76: 2013-03-23 - NoSQL Spartakiade
Page 77: 2013-03-23 - NoSQL Spartakiade
Page 78: 2013-03-23 - NoSQL Spartakiade
Page 79: 2013-03-23 - NoSQL Spartakiade
Page 80: 2013-03-23 - NoSQL Spartakiade

Hands ON!

Page 81: 2013-03-23 - NoSQL Spartakiade
Page 82: 2013-03-23 - NoSQL Spartakiade

use digg

db.stories.findOne();

Page 83: 2013-03-23 - NoSQL Spartakiade
Page 84: 2013-03-23 - NoSQL Spartakiade

› use digg;

› db.people.update({name: 'Smith'},

{'$set': {interests: []}});

› db.people.update({name: 'Smith'}, {'$push': {interests: ['chess']}});

Page 85: 2013-03-23 - NoSQL Spartakiade
Page 86: 2013-03-23 - NoSQL Spartakiade
Page 87: 2013-03-23 - NoSQL Spartakiade
Page 88: 2013-03-23 - NoSQL Spartakiade

var map = function() {

emit(this.user.name, {diggs: this.diggs, posts: 0});

};

Page 89: 2013-03-23 - NoSQL Spartakiade

var reduce = function(key, values) {

var diggs = 0;

var posts = 0;

values.forEach(function(doc) {

diggs += doc.diggs;

posts += 1;

});

return {diggs: diggs, posts: posts};

};

Page 90: 2013-03-23 - NoSQL Spartakiade

db.stories.mapReduce(map, reduce, {out: 'digg_users'});

db.digg_users.find();

Page 91: 2013-03-23 - NoSQL Spartakiade
Page 92: 2013-03-23 - NoSQL Spartakiade
Page 93: 2013-03-23 - NoSQL Spartakiade

JaWOHL!

Page 94: 2013-03-23 - NoSQL Spartakiade

Schema

Design

Page 95: 2013-03-23 - NoSQL Spartakiade
Page 96: 2013-03-23 - NoSQL Spartakiade

http://bsonspec.org

Page 97: 2013-03-23 - NoSQL Spartakiade
Page 98: 2013-03-23 - NoSQL Spartakiade
Page 99: 2013-03-23 - NoSQL Spartakiade
Page 100: 2013-03-23 - NoSQL Spartakiade
Page 101: 2013-03-23 - NoSQL Spartakiade
Page 102: 2013-03-23 - NoSQL Spartakiade
Page 103: 2013-03-23 - NoSQL Spartakiade
Page 104: 2013-03-23 - NoSQL Spartakiade
Page 105: 2013-03-23 - NoSQL Spartakiade
Page 106: 2013-03-23 - NoSQL Spartakiade
Page 107: 2013-03-23 - NoSQL Spartakiade
Page 108: 2013-03-23 - NoSQL Spartakiade

> db.shapes.find()

› { _id: "1", type: "c", area: 3.14, radius: 1}

› { _id: "2", type: "s", area: 4, length: 2}

› { _id: "3", type: "r", area: 10, length: 5, width: 2}

// Shapes mit radius > 0 finden

> db.shapes.find( { radius: { $gt: 0 } } )

Page 109: 2013-03-23 - NoSQL Spartakiade
Page 110: 2013-03-23 - NoSQL Spartakiade

blogs: { author : “Johannes", date : ISODate("2011-09-18T09:56:06.298Z"), comments : [ { author : “Klaus", date : ISODate("2011-09-19T09:56:06.298Z"), text : “toller Artikel" } ] }

Page 111: 2013-03-23 - NoSQL Spartakiade
Page 112: 2013-03-23 - NoSQL Spartakiade

blogs: { _id: 1000, author: “Johannes", date: ISODate("2011-09-18"), comments: [ {comment : 1)} ]}

comments : { _id : 1, blog: 1000, author : “Klaus", date : ISODate("2011-09-19")} > blog = db.blogs.find({ text: "Destination Moon" }); > db.comments.find( { blog: blog._id } );

Page 113: 2013-03-23 - NoSQL Spartakiade
Page 114: 2013-03-23 - NoSQL Spartakiade

// Jedes Produkt verlinkt die IDs der Kategorien

products: { _id: 10, name: "Destination Moon", category_ids: [ 20, 30 ] }

Page 115: 2013-03-23 - NoSQL Spartakiade

// Jedes Produkt verlinkt die IDs der Kategorien

products: { _id: 10, name: "Destination Moon", category_ids: [ 20, 30 ] }

// Jede Kategorie verlinkt die IDs der Produkte

categories:

{ _id: 20, name: "adventure",

product_ids: [ 10, 11, 12 ] }

categories:

{ _id: 21, name: "movie",

product_ids: [ 10 ] }

Page 116: 2013-03-23 - NoSQL Spartakiade

// Jedes Produkt verlinkt die IDs der Kategorien

products: { _id: 10, name: "Destination Moon", category_ids: [ 20, 30 ] }

// Jede Kategorie verlinkt die IDs der Produkte

categories:

{ _id: 20, name: "adventure",

product_ids: [ 10, 11, 12 ] }

categories:

{ _id: 21, name: "movie",

product_ids: [ 10 ] }

// Alle Kategorien für ein Produkt

> db.categories.find( { product_ids: 10 } )

Page 117: 2013-03-23 - NoSQL Spartakiade
Page 118: 2013-03-23 - NoSQL Spartakiade

// Jedes Produkt verlinkt die IDs der Kategorien

products: { _id: 10, name: "Destination Moon", category_ids: [ 20, 30 ] }

// Kategorien beinhalten keine Assoziationen

categories:

{ _id: 20,

name: "adventure"}

Page 119: 2013-03-23 - NoSQL Spartakiade

// Jedes Produkt verlinkt die IDs der Kategorien

products: { _id: 10, name: "Destination Moon", category_ids: [ 20, 30 ] }

// Kategorien beinhalten keine Assoziationen

categories:

{ _id: 20,

name: "adventure"}

// Alle Produkte für eine Kategorie

> db.products.find( { category_ids: 20 } )

Page 120: 2013-03-23 - NoSQL Spartakiade

// Jedes Produkt verlinkt die IDs der Kategorien

products: { _id: 10, name: "Destination Moon", category_ids: [ 20, 30 ] }

// Kategorien beinhalten keine Assoziationen

categories:

{ _id: 20,

name: "adventure"}

// Alle Produkte für eine Kategorie

> db.products.find( { category_ids: 20 } )

// Alle Kategorien für ein Produkt product

> product = db.products.find( { _id: some_id } )

> db.categories.find({_id: {$in : product.category_ids}})

Page 121: 2013-03-23 - NoSQL Spartakiade
Page 122: 2013-03-23 - NoSQL Spartakiade

Software Tests

Page 123: 2013-03-23 - NoSQL Spartakiade
Page 124: 2013-03-23 - NoSQL Spartakiade
Page 125: 2013-03-23 - NoSQL Spartakiade
Page 126: 2013-03-23 - NoSQL Spartakiade
Page 127: 2013-03-23 - NoSQL Spartakiade
Page 128: 2013-03-23 - NoSQL Spartakiade

“ ”J.B. Rainsberger

Page 129: 2013-03-23 - NoSQL Spartakiade
Page 130: 2013-03-23 - NoSQL Spartakiade
Page 131: 2013-03-23 - NoSQL Spartakiade
Page 132: 2013-03-23 - NoSQL Spartakiade
Page 133: 2013-03-23 - NoSQL Spartakiade
Page 134: 2013-03-23 - NoSQL Spartakiade
Page 135: 2013-03-23 - NoSQL Spartakiade
Page 136: 2013-03-23 - NoSQL Spartakiade

using (var documentStore = new EmbeddableDocumentStore{ RunInMemory = true}.Initialize()) { using (var session = documentStore.OpenSession()) { // Run complex test scenarious } }

Page 137: 2013-03-23 - NoSQL Spartakiade
Page 138: 2013-03-23 - NoSQL Spartakiade

https://nuget.org/packages/Mongo2Go/

Page 139: 2013-03-23 - NoSQL Spartakiade

using (var runner = MongoDbRunner.Start()) { var collection = new MongoClient(runner.ConnectionString) .GetServer() .GetDatabase("TestDatabase") .GetCollection<TestDocument>("TestCollection"); // Run complex test scenarious }

Page 140: 2013-03-23 - NoSQL Spartakiade
Page 141: 2013-03-23 - NoSQL Spartakiade
Page 142: 2013-03-23 - NoSQL Spartakiade

Vielen Dank!

Page 143: 2013-03-23 - NoSQL Spartakiade
Page 144: 2013-03-23 - NoSQL Spartakiade
Page 145: 2013-03-23 - NoSQL Spartakiade

PAUSE!


Recommended