2012-05-14 NoSQL in .NET - mit Redis und MongoDB

Post on 08-May-2015

1,804 views 1 download

description

1: Vortrag: NoSQL in .NET – mit Redis und MongoDBDer Vortrag führt in die Theorie ein, stellt die beiden NoSQL-Datenbanksysteme Redis und MongoDB näher vor und gibt Praxisbeispiele. Ich präsentiere die beiden Systeme live an einem ASP.NET MVC Beispielprojekt, welches allen Teilnehmern zur Verfügung gestellt wird.2. Vortrag: NoSQL – Dokumente und RelationenEine dokumentenbasierte NoSQL-Datenbank wie MongoDB hat nicht nur eine andere API zur Abfrage der Daten. Die tiefergehende Neuerung ist eine grundlegende andere Art die Daten abzuspeichern. Der Vortrag konzentriert sich auf Schema-Design, das Map-Reduce Verfahren und bekannten Patterns für Dokumenten-basierte Datenbanken.

transcript

› SET note1:title "Mittag"

› SET note1:message "nicht vergessen"

› KEYS note1:*

› GET note1:title

› DEL note1:title note1:message

http://bit.ly/ISv9f6

››

http://bsonspec.org

› use WebNote

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

› db.Notes.save

› db.Notes.find();

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

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

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

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

Categories: {Color: 'Red'} }

});

› db.dropDatabase();

› db.Notes.drop();

› db.Notes.remove();

NULL NULL

NULL NULL

NULL

> 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 } } )

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" } ] }

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 } );

// Jedes Produkt verlinkt die IDs der Kategorien

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

// 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 ] }

// 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 } )

// 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"}

// 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 } )

// 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}})

›››

›››

››

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