

Redis
›   SET note1:title "Mittag"
›   SET note1:message "nicht vergessen"

›   KEYS note1:*
›   GET note1:title
›   DEL note1:title note1:message
http://bit.ly/ISv9f6
R venDB
 a
›
›
›
›
    ›
›
›
›
›
›
›
    ›
    ›
›
using (var documentStore = new EmbeddableDocumentStore{
                           RunInMemory = true}.Initialize())
{
    using (var session = documentStore.OpenSession())
    {
        // Run complex test scenarious
    }
}
›
›


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

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"
}
var notes = session                      var notes = session.Advanced
.Query<Note>()                           .LuceneQuery<Note>()
.Where(n => n.Category == "Important")   .Where("Category:Important")
.ToArray();                              .ToArray();
MongoDB
CODASYL model                   SQL               Agile becoming more   Google            MongoDB initial
   published                  invented                    popular        BigTable             release




IBM’s                                     Oracle                   Brewer’s      Amazon
 IMS                  INGRES             founded                   CAP born      Dynamo




1966    1969   1970    1973     1974     1977      1985   1990’s     2000     2004    2007 2008 2009


                                                                                  10gen        NoSQL
       Codd publishes                     Term “object-oriented                  founded      Movement
   relational model paper                   database” appears
           in 1970                                                                   Apache Cassandra
                                                                                       initial release
›
›
›
–
›   use WebNote
›   db.Notes.save(
       {
         Title: 'Mittag',
         Message: 'nicht vergessen‘
       }
    );




›   db.Notes.save
–

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();
–

›   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();
Consistency
Hands ON!
use digg
db.stories.findOne();
›   use digg;
›   db.people.update({name: 'Smith'},
                     {'$set': {interests: []}});
›    db.people.update({name: 'Smith'},
                     {'$push': {interests: ['chess']}});
var map = function() {
   emit(this.user.name, {diggs: this.diggs,
   posts: 0});
};
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};
};
db.stories.mapReduce(map, reduce, {out:
  'digg_users'});


db.digg_users.find();
JaWOHL!
Schema
 Design
http://bsonspec.org

> 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}})
Software Tests




2013-03-23 - NoSQL Spartakiade

  • 15.
  • 16.
  • 24.
    SET note1:title "Mittag" › SET note1:message "nicht vergessen" › KEYS note1:* › GET note1:title › DEL note1:title note1:message
  • 29.
  • 31.
  • 34.
  • 35.
  • 36.
    › › ›
  • 38.
  • 39.
  • 41.
    › › ›
  • 42.
    using (var documentStore= new EmbeddableDocumentStore{ RunInMemory = true}.Initialize()) { using (var session = documentStore.OpenSession()) { // Run complex test scenarious } }
  • 43.
  • 44.
    Ayende Rahien onthe HTTP API - http://ravendb.net/documentation/docs-http-api-restful
  • 45.
    › › › 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" }
  • 47.
    var notes =session var notes = session.Advanced .Query<Note>() .LuceneQuery<Note>() .Where(n => n.Category == "Important") .Where("Category:Important") .ToArray(); .ToArray();
  • 48.
  • 54.
    CODASYL model SQL Agile becoming more Google MongoDB initial published invented popular BigTable release IBM’s Oracle Brewer’s Amazon IMS INGRES founded CAP born Dynamo 1966 1969 1970 1973 1974 1977 1985 1990’s 2000 2004 2007 2008 2009 10gen NoSQL Codd publishes Term “object-oriented founded Movement relational model paper database” appears in 1970 Apache Cassandra initial release
  • 57.
  • 59.
    – › use WebNote › db.Notes.save( { Title: 'Mittag', Message: 'nicht vergessen‘ } ); › db.Notes.save
  • 60.
    – 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();
  • 61.
    – › db.Notes.find(); › db.Notes.find({ Title: /Test/i }); › db.Notes.find( { "Categories.Color": "red"}).limit(1);
  • 62.
    – › db.Notes.update({Title: 'Test'}, {'$set': {Categories: []}}); › db.Notes.update({Title: 'Test'}, {'$push': { Categories: {Color: 'Red'} } });
  • 63.
    – › db.dropDatabase(); › db.Notes.drop(); › db.Notes.remove();
  • 66.
  • 80.
  • 82.
  • 84.
    use digg; › db.people.update({name: 'Smith'}, {'$set': {interests: []}}); › db.people.update({name: 'Smith'}, {'$push': {interests: ['chess']}});
  • 88.
    var map =function() { emit(this.user.name, {diggs: this.diggs, posts: 0}); };
  • 89.
    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}; };
  • 90.
    db.stories.mapReduce(map, reduce, {out: 'digg_users'}); db.digg_users.find();
  • 93.
  • 94.
  • 96.
  • 97.
  • 108.
    > 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 } } )
  • 110.
    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" } ] }
  • 112.
    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 } );
  • 114.
    // Jedes Produktverlinkt die IDs der Kategorien products: { _id: 10, name: "Destination Moon", category_ids: [ 20, 30 ] }
  • 115.
    // Jedes Produktverlinkt 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 ] }
  • 116.
    // Jedes Produktverlinkt 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 } )
  • 118.
    // Jedes Produktverlinkt die IDs der Kategorien products: { _id: 10, name: "Destination Moon", category_ids: [ 20, 30 ] } // Kategorien beinhalten keine Assoziationen categories: { _id: 20, name: "adventure"}
  • 119.
    // Jedes Produktverlinkt 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 } )
  • 120.
    // Jedes Produktverlinkt 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}})
  • 122.
  • 125.