128

2017 - NoSQL Vorlesung Mosbach

Embed Size (px)

Citation preview

Page 1: 2017 - NoSQL Vorlesung Mosbach
Page 2: 2017 - NoSQL Vorlesung Mosbach
Page 3: 2017 - NoSQL Vorlesung Mosbach
Page 4: 2017 - NoSQL Vorlesung Mosbach
Page 5: 2017 - NoSQL Vorlesung Mosbach
Page 6: 2017 - NoSQL Vorlesung Mosbach
Page 7: 2017 - NoSQL Vorlesung Mosbach
Page 8: 2017 - NoSQL Vorlesung Mosbach
Page 9: 2017 - NoSQL Vorlesung Mosbach
Page 10: 2017 - NoSQL Vorlesung Mosbach
Page 11: 2017 - NoSQL Vorlesung Mosbach
Page 12: 2017 - NoSQL Vorlesung Mosbach

››

Page 13: 2017 - NoSQL Vorlesung Mosbach

››

Page 14: 2017 - NoSQL Vorlesung Mosbach

Page 15: 2017 - NoSQL Vorlesung Mosbach

››

Page 16: 2017 - NoSQL Vorlesung Mosbach

“Drum prüfe,

wer sich ewig bindet.” Friedrich Schiller

Page 17: 2017 - NoSQL Vorlesung Mosbach
Page 18: 2017 - NoSQL Vorlesung Mosbach
Page 19: 2017 - NoSQL Vorlesung Mosbach
Page 20: 2017 - NoSQL Vorlesung Mosbach
Page 21: 2017 - NoSQL Vorlesung Mosbach
Page 22: 2017 - NoSQL Vorlesung Mosbach
Page 23: 2017 - NoSQL Vorlesung Mosbach
Page 24: 2017 - NoSQL Vorlesung Mosbach
Page 25: 2017 - NoSQL Vorlesung Mosbach
Page 26: 2017 - NoSQL Vorlesung Mosbach

› SET note1:title "Mittag"

› SET note1:message "nicht vergessen"

› KEYS note1:*

› GET note1:title

› DEL note1:title note1:message

Page 27: 2017 - NoSQL Vorlesung Mosbach
Page 28: 2017 - NoSQL Vorlesung Mosbach
Page 29: 2017 - NoSQL Vorlesung Mosbach
Page 30: 2017 - NoSQL Vorlesung Mosbach
Page 31: 2017 - NoSQL Vorlesung Mosbach
Page 32: 2017 - NoSQL Vorlesung Mosbach

››

Page 33: 2017 - NoSQL Vorlesung Mosbach

Page 34: 2017 - NoSQL Vorlesung Mosbach

››

››

Page 36: 2017 - NoSQL Vorlesung Mosbach

Page 37: 2017 - NoSQL Vorlesung Mosbach

››

Page 38: 2017 - NoSQL Vorlesung Mosbach
Page 39: 2017 - NoSQL Vorlesung Mosbach

›››

Page 40: 2017 - NoSQL Vorlesung Mosbach

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

Page 41: 2017 - NoSQL Vorlesung Mosbach

››

›››

Page 42: 2017 - NoSQL Vorlesung Mosbach

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

Page 43: 2017 - NoSQL Vorlesung Mosbach

›››

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 44: 2017 - NoSQL Vorlesung Mosbach
Page 45: 2017 - NoSQL Vorlesung Mosbach
Page 46: 2017 - NoSQL Vorlesung Mosbach
Page 47: 2017 - NoSQL Vorlesung Mosbach
Page 48: 2017 - NoSQL Vorlesung Mosbach
Page 49: 2017 - NoSQL Vorlesung Mosbach

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 50: 2017 - NoSQL Vorlesung Mosbach
Page 51: 2017 - NoSQL Vorlesung Mosbach
Page 52: 2017 - NoSQL Vorlesung Mosbach

››

Page 53: 2017 - NoSQL Vorlesung Mosbach
Page 54: 2017 - NoSQL Vorlesung Mosbach

› use WebNote

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

› db.Notes.save

Page 55: 2017 - NoSQL Vorlesung Mosbach

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 56: 2017 - NoSQL Vorlesung Mosbach

› db.Notes.find();

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

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

Page 57: 2017 - NoSQL Vorlesung Mosbach

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

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

Categories: {Color: 'Red'} }

});

Page 58: 2017 - NoSQL Vorlesung Mosbach

› db.dropDatabase();

› db.Notes.drop();

› db.Notes.remove();

Page 59: 2017 - NoSQL Vorlesung Mosbach
Page 60: 2017 - NoSQL Vorlesung Mosbach
Page 61: 2017 - NoSQL Vorlesung Mosbach
Page 62: 2017 - NoSQL Vorlesung Mosbach
Page 63: 2017 - NoSQL Vorlesung Mosbach
Page 64: 2017 - NoSQL Vorlesung Mosbach
Page 65: 2017 - NoSQL Vorlesung Mosbach
Page 66: 2017 - NoSQL Vorlesung Mosbach
Page 67: 2017 - NoSQL Vorlesung Mosbach
Page 68: 2017 - NoSQL Vorlesung Mosbach
Page 69: 2017 - NoSQL Vorlesung Mosbach
Page 70: 2017 - NoSQL Vorlesung Mosbach
Page 71: 2017 - NoSQL Vorlesung Mosbach
Page 72: 2017 - NoSQL Vorlesung Mosbach
Page 73: 2017 - NoSQL Vorlesung Mosbach

use digg

db.stories.findOne();

Page 74: 2017 - NoSQL Vorlesung Mosbach
Page 75: 2017 - NoSQL Vorlesung Mosbach

› use digg;

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

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

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

Page 76: 2017 - NoSQL Vorlesung Mosbach
Page 77: 2017 - NoSQL Vorlesung Mosbach
Page 78: 2017 - NoSQL Vorlesung Mosbach
Page 79: 2017 - NoSQL Vorlesung Mosbach

var map = function() {

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

};

Page 80: 2017 - NoSQL Vorlesung Mosbach

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 81: 2017 - NoSQL Vorlesung Mosbach

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

db.digg_users.find();

Page 82: 2017 - NoSQL Vorlesung Mosbach
Page 83: 2017 - NoSQL Vorlesung Mosbach
Page 84: 2017 - NoSQL Vorlesung Mosbach
Page 85: 2017 - NoSQL Vorlesung Mosbach

http://bsonspec.org

Page 86: 2017 - NoSQL Vorlesung Mosbach
Page 87: 2017 - NoSQL Vorlesung Mosbach
Page 88: 2017 - NoSQL Vorlesung Mosbach
Page 89: 2017 - NoSQL Vorlesung Mosbach
Page 90: 2017 - NoSQL Vorlesung Mosbach
Page 91: 2017 - NoSQL Vorlesung Mosbach
Page 92: 2017 - NoSQL Vorlesung Mosbach
Page 93: 2017 - NoSQL Vorlesung Mosbach
Page 94: 2017 - NoSQL Vorlesung Mosbach
Page 95: 2017 - NoSQL Vorlesung Mosbach
Page 96: 2017 - NoSQL Vorlesung Mosbach
Page 97: 2017 - NoSQL Vorlesung Mosbach

> 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 98: 2017 - NoSQL Vorlesung Mosbach
Page 99: 2017 - NoSQL Vorlesung Mosbach

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 100: 2017 - NoSQL Vorlesung Mosbach
Page 101: 2017 - NoSQL Vorlesung Mosbach

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 102: 2017 - NoSQL Vorlesung Mosbach
Page 103: 2017 - NoSQL Vorlesung Mosbach

// Jedes Produkt verlinkt die IDs der Kategorien

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

Page 104: 2017 - NoSQL Vorlesung Mosbach

// 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 105: 2017 - NoSQL Vorlesung Mosbach

// 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 106: 2017 - NoSQL Vorlesung Mosbach
Page 107: 2017 - NoSQL Vorlesung Mosbach

// 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 108: 2017 - NoSQL Vorlesung Mosbach

// 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 109: 2017 - NoSQL Vorlesung Mosbach

// 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 110: 2017 - NoSQL Vorlesung Mosbach
Page 111: 2017 - NoSQL Vorlesung Mosbach
Page 112: 2017 - NoSQL Vorlesung Mosbach
Page 113: 2017 - NoSQL Vorlesung Mosbach
Page 114: 2017 - NoSQL Vorlesung Mosbach
Page 115: 2017 - NoSQL Vorlesung Mosbach
Page 116: 2017 - NoSQL Vorlesung Mosbach

“ ”J.B. Rainsberger

Page 117: 2017 - NoSQL Vorlesung Mosbach
Page 118: 2017 - NoSQL Vorlesung Mosbach
Page 119: 2017 - NoSQL Vorlesung Mosbach
Page 120: 2017 - NoSQL Vorlesung Mosbach
Page 121: 2017 - NoSQL Vorlesung Mosbach
Page 122: 2017 - NoSQL Vorlesung Mosbach
Page 123: 2017 - NoSQL Vorlesung Mosbach
Page 124: 2017 - NoSQL Vorlesung Mosbach

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

Page 125: 2017 - NoSQL Vorlesung Mosbach
Page 126: 2017 - NoSQL Vorlesung Mosbach
Page 127: 2017 - NoSQL Vorlesung Mosbach
Page 128: 2017 - NoSQL Vorlesung Mosbach