Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine...

55

Transcript of Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine...

Page 1: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Präsentation mongoDB

David Wild

11.12.2012

Page 2: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Einleitung

I 2009 vom US-Startup 10gen als Open-Source-Lösungvorgestellt

I Name stammt aus dem englischen Begri� �humongous�

I Entwickelt in C++

I für die Betriebssysteme Windows, Mac OS X und Linux

Page 3: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Einleitung

I 2009 vom US-Startup 10gen als Open-Source-Lösungvorgestellt

I Name stammt aus dem englischen Begri� �humongous�

I Entwickelt in C++

I für die Betriebssysteme Windows, Mac OS X und Linux

Page 4: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Einleitung

I 2009 vom US-Startup 10gen als Open-Source-Lösungvorgestellt

I Name stammt aus dem englischen Begri� �humongous�

I Entwickelt in C++

I für die Betriebssysteme Windows, Mac OS X und Linux

Page 5: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Einleitung

I 2009 vom US-Startup 10gen als Open-Source-Lösungvorgestellt

I Name stammt aus dem englischen Begri� �humongous�

I Entwickelt in C++

I für die Betriebssysteme Windows, Mac OS X und Linux

Page 6: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Warum MongoDB? 1

I Moderne Webanwendungen sind Vernetzt, Sozial und soInteraktiv wie noch nie zuvor

Neue Anforderungen

I Groÿe Datenmengen

I Schnelles Entwickeln und Erweitern von Anwendungen

I Flexibles Deployment

Page 7: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Warum MongoDB? 1

I Moderne Webanwendungen sind Vernetzt, Sozial und soInteraktiv wie noch nie zuvor

Neue Anforderungen

I Groÿe Datenmengen

I Schnelles Entwickeln und Erweitern von Anwendungen

I Flexibles Deployment

Page 8: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Warum MongoDB? 1

I Moderne Webanwendungen sind Vernetzt, Sozial und soInteraktiv wie noch nie zuvor

Neue Anforderungen

I Groÿe Datenmengen

I Schnelles Entwickeln und Erweitern von Anwendungen

I Flexibles Deployment

Page 9: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Warum MongoDB? 1

I Moderne Webanwendungen sind Vernetzt, Sozial und soInteraktiv wie noch nie zuvor

Neue Anforderungen

I Groÿe Datenmengen

I Schnelles Entwickeln und Erweitern von Anwendungen

I Flexibles Deployment

Page 10: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Warum MongoDB? 1

I Moderne Webanwendungen sind Vernetzt, Sozial und soInteraktiv wie noch nie zuvor

Neue Anforderungen

I Groÿe Datenmengen

I Schnelles Entwickeln und Erweitern von Anwendungen

I Flexibles Deployment

Page 11: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Warum MongoDB? 2

I Wenn eine DB auf einem einzelnen Server läuft -> LimitierteSkalierung

I MongoDB skaliert mit mehr Server

I Flexibles anschlieÿen neuer Server für mehr Kapazität

Page 12: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Warum MongoDB? 2

I Wenn eine DB auf einem einzelnen Server läuft -> LimitierteSkalierung

I MongoDB skaliert mit mehr Server

I Flexibles anschlieÿen neuer Server für mehr Kapazität

Page 13: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Warum MongoDB? 2

I Wenn eine DB auf einem einzelnen Server läuft -> LimitierteSkalierung

I MongoDB skaliert mit mehr Server

I Flexibles anschlieÿen neuer Server für mehr Kapazität

Page 14: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Warum MongoDB? 3

I Starre DB Schema -> können Entwicklungsgeschwindigkeitverlangsamen

I MongoDB erhöht Produktivität:

I Dokumenten-basierende Datenbank: schemafreie Struktur

Page 15: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Warum MongoDB? 3

I Starre DB Schema -> können Entwicklungsgeschwindigkeitverlangsamen

I MongoDB erhöht Produktivität:

I Dokumenten-basierende Datenbank: schemafreie Struktur

Page 16: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Warum MongoDB? 3

I Starre DB Schema -> können Entwicklungsgeschwindigkeitverlangsamen

I MongoDB erhöht Produktivität:

I Dokumenten-basierende Datenbank: schemafreie Struktur

Page 17: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Wer benutzt es?

Bekannte Webanwendungen: �Foursquare�, �Craigslist�, �Bit.ly�,�Grooveshark�.MongoDB ist die populärste NoSQL Datenbank.

Page 18: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Unterschied zu MySql 1

I MongoDB hat keine zwingenden Relationstabellen und Joins

I Relationen sind direkt im Datensatz speicherbar

I oder individuell bei der Datenabfrage durch mehere Abfragenerstellbar

Page 19: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Unterschied zu MySql 1

I MongoDB hat keine zwingenden Relationstabellen und Joins

I Relationen sind direkt im Datensatz speicherbar

I oder individuell bei der Datenabfrage durch mehere Abfragenerstellbar

Page 20: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Unterschied zu MySql 1

I MongoDB hat keine zwingenden Relationstabellen und Joins

I Relationen sind direkt im Datensatz speicherbar

I oder individuell bei der Datenabfrage durch mehere Abfragenerstellbar

Page 21: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Unterschied zu MySql 2

I MySql hat Tabellen, MongoDB hat Collections

I Collection kann Dokumente beinhalten, bei MySQL-Tabelle ->Tupel/Zeilen.

I Schemafrei -> unterschiedliche Dokumente können in derselben Collection sein.

I Dokumente werden im BSON-Format gespeichert (stammtvon JSON-Format (JavaScript Object Notation) ab."B" stehtfür �Binary� )

Page 22: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Unterschied zu MySql 2

I MySql hat Tabellen, MongoDB hat Collections

I Collection kann Dokumente beinhalten, bei MySQL-Tabelle ->Tupel/Zeilen.

I Schemafrei -> unterschiedliche Dokumente können in derselben Collection sein.

I Dokumente werden im BSON-Format gespeichert (stammtvon JSON-Format (JavaScript Object Notation) ab."B" stehtfür �Binary� )

Page 23: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Unterschied zu MySql 2

I MySql hat Tabellen, MongoDB hat Collections

I Collection kann Dokumente beinhalten, bei MySQL-Tabelle ->Tupel/Zeilen.

I Schemafrei -> unterschiedliche Dokumente können in derselben Collection sein.

I Dokumente werden im BSON-Format gespeichert (stammtvon JSON-Format (JavaScript Object Notation) ab."B" stehtfür �Binary� )

Page 24: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Unterschied zu MySql 2

I MySql hat Tabellen, MongoDB hat Collections

I Collection kann Dokumente beinhalten, bei MySQL-Tabelle ->Tupel/Zeilen.

I Schemafrei -> unterschiedliche Dokumente können in derselben Collection sein.

I Dokumente werden im BSON-Format gespeichert (stammtvon JSON-Format (JavaScript Object Notation) ab."B" stehtfür �Binary� )

Page 25: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

JSON vs BSON

Ausgabe einer Abfrage in JSON (oben) Gespeichert als BSON

Page 26: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Datenabfrage in MongoDB

I Keine Abfragesprache wie SQL

I Abfrage durch objektspezi�sche Methoden der jeweiligenProgrammiersprache

I Auch �Drivers� genant

I Gibt es für JavaScript, PHP, Perl, Ruby, Python, Java undvielen mehr...

Page 27: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Datenabfrage in MongoDB

I Keine Abfragesprache wie SQL

I Abfrage durch objektspezi�sche Methoden der jeweiligenProgrammiersprache

I Auch �Drivers� genant

I Gibt es für JavaScript, PHP, Perl, Ruby, Python, Java undvielen mehr...

Page 28: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Datenabfrage in MongoDB

I Keine Abfragesprache wie SQL

I Abfrage durch objektspezi�sche Methoden der jeweiligenProgrammiersprache

I Auch �Drivers� genant

I Gibt es für JavaScript, PHP, Perl, Ruby, Python, Java undvielen mehr...

Page 29: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Datenabfrage in MongoDB

I Keine Abfragesprache wie SQL

I Abfrage durch objektspezi�sche Methoden der jeweiligenProgrammiersprache

I Auch �Drivers� genant

I Gibt es für JavaScript, PHP, Perl, Ruby, Python, Java undvielen mehr...

Page 30: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiele SQL MONGODB: Create und Alter 1

SQLCREATE TABLE users (

id MEDIUMINT NOT NULL

AUTO_INCREMENT,

user_id Varchar(30),

age Number,

status char(1),

PRIMARY KEY (id)

)

MONGODBdb.createCollection("users")

Unnötig, da indirekt durchein Insert erstellt:

db.users.insert( {

user_id: "abc123",

age: 55,

status: "A"

} )

MongoDB erstellt automatisch einen Primary Key _id, wenn nichtangegeben1. Wir erhalten folgendes Dokument in unsererCollection "users":{_id: ObjectID("509a8fb2f3f4948bd2f983a0"),

user_id: "abc123",

age: 55,

status: 'A'}

1ObjectIds sind nicht-sequentiel und generiert von einer Kombination aus

Timestamp, Machine ID, Process ID, und Counter Feld

Page 31: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiele SQL MONGODB: Create und Alter 1

SQLCREATE TABLE users (

id MEDIUMINT NOT NULL

AUTO_INCREMENT,

user_id Varchar(30),

age Number,

status char(1),

PRIMARY KEY (id)

)

MONGODBdb.createCollection("users")

Unnötig, da indirekt durchein Insert erstellt:

db.users.insert( {

user_id: "abc123",

age: 55,

status: "A"

} )

MongoDB erstellt automatisch einen Primary Key _id, wenn nichtangegeben1. Wir erhalten folgendes Dokument in unsererCollection "users":{_id: ObjectID("509a8fb2f3f4948bd2f983a0"),

user_id: "abc123",

age: 55,

status: 'A'}

1ObjectIds sind nicht-sequentiel und generiert von einer Kombination aus

Timestamp, Machine ID, Process ID, und Counter Feld

Page 32: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiele SQL MONGODB: Create und Alter 1

SQLCREATE TABLE users (

id MEDIUMINT NOT NULL

AUTO_INCREMENT,

user_id Varchar(30),

age Number,

status char(1),

PRIMARY KEY (id)

)

MONGODBdb.createCollection("users")

Unnötig, da indirekt durchein Insert erstellt:

db.users.insert( {

user_id: "abc123",

age: 55,

status: "A"

} )

MongoDB erstellt automatisch einen Primary Key _id, wenn nichtangegeben1. Wir erhalten folgendes Dokument in unsererCollection "users":{_id: ObjectID("509a8fb2f3f4948bd2f983a0"),

user_id: "abc123",

age: 55,

status: 'A'}

1ObjectIds sind nicht-sequentiel und generiert von einer Kombination aus

Timestamp, Machine ID, Process ID, und Counter Feld

Page 33: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiele SQL MONGODB: Create und Alter 1

SQLCREATE TABLE users (

id MEDIUMINT NOT NULL

AUTO_INCREMENT,

user_id Varchar(30),

age Number,

status char(1),

PRIMARY KEY (id)

)

MONGODBdb.createCollection("users")

Unnötig, da indirekt durchein Insert erstellt:

db.users.insert( {

user_id: "abc123",

age: 55,

status: "A"

} )

MongoDB erstellt automatisch einen Primary Key _id, wenn nichtangegeben1. Wir erhalten folgendes Dokument in unsererCollection "users":{_id: ObjectID("509a8fb2f3f4948bd2f983a0"),

user_id: "abc123",

age: 55,

status: 'A'}

1ObjectIds sind nicht-sequentiel und generiert von einer Kombination aus

Timestamp, Machine ID, Process ID, und Counter Feld

Page 34: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiele SQL MONGODB: Create und Alter 2

SQLALTER TABLE users

ADD join_date DATETIME

ALTER TABLE users

DROP COLUMN join_date

MONGODB/* Collections beschreiben

oder zwingen

keine Struktur auf */

//moeglichkeit aber mit update:

db.users.update({'_id' : ObjectId(...)},{'$set' : {'join_date' : datetime(..) }})

SQLDROP TABLE users

MONGODBdb.users.drop()

Page 35: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiele SQL MONGODB: Select/Update/Delete

SQLSELECT *

FROM users

WHERE status = "A"

SELECT *

FROM users

WHERE status != "A"

SELECT *

FROM users

WHERE user_id like "bc%"

UPDATE users

SET status = "C"

WHERE age > 25

DELETE FROM users

WHERE status = "D"

MONGODBdb.users.find(

{ status: "A" }

)

db.users.find({ status: { $ne: "A" } }

)

db.users.find(

{ user_id: /^bc/ }

)

db.users.update({ age: { $gt: 25 } },{ $set: { status: "C" } },{ multi: true }

)

db.users.remove( { status: "D" } )

Page 36: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiele SQL MONGODB: Select/Update/Delete

SQLSELECT *

FROM users

WHERE status = "A"

SELECT *

FROM users

WHERE status != "A"

SELECT *

FROM users

WHERE user_id like "bc%"

UPDATE users

SET status = "C"

WHERE age > 25

DELETE FROM users

WHERE status = "D"

MONGODBdb.users.find(

{ status: "A" }

)

db.users.find({ status: { $ne: "A" } }

)

db.users.find(

{ user_id: /^bc/ }

)

db.users.update({ age: { $gt: 25 } },{ $set: { status: "C" } },{ multi: true }

)

db.users.remove( { status: "D" } )

Page 37: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiele SQL MONGODB: Select/Update/Delete

SQLSELECT *

FROM users

WHERE status = "A"

SELECT *

FROM users

WHERE status != "A"

SELECT *

FROM users

WHERE user_id like "bc%"

UPDATE users

SET status = "C"

WHERE age > 25

DELETE FROM users

WHERE status = "D"

MONGODBdb.users.find(

{ status: "A" }

)

db.users.find({ status: { $ne: "A" } }

)

db.users.find(

{ user_id: /^bc/ }

)

db.users.update({ age: { $gt: 25 } },{ $set: { status: "C" } },{ multi: true }

)

db.users.remove( { status: "D" } )

Page 38: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiele SQL MONGODB: Select/Update/Delete

SQLSELECT *

FROM users

WHERE status = "A"

SELECT *

FROM users

WHERE status != "A"

SELECT *

FROM users

WHERE user_id like "bc%"

UPDATE users

SET status = "C"

WHERE age > 25

DELETE FROM users

WHERE status = "D"

MONGODBdb.users.find(

{ status: "A" }

)

db.users.find({ status: { $ne: "A" } }

)

db.users.find(

{ user_id: /^bc/ }

)

db.users.update({ age: { $gt: 25 } },{ $set: { status: "C" } },{ multi: true }

)

db.users.remove( { status: "D" } )

Page 39: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiele SQL MONGODB: Select/Update/Delete

SQLSELECT *

FROM users

WHERE status = "A"

SELECT *

FROM users

WHERE status != "A"

SELECT *

FROM users

WHERE user_id like "bc%"

UPDATE users

SET status = "C"

WHERE age > 25

DELETE FROM users

WHERE status = "D"

MONGODBdb.users.find(

{ status: "A" }

)

db.users.find({ status: { $ne: "A" } }

)

db.users.find(

{ user_id: /^bc/ }

)

db.users.update({ age: { $gt: 25 } },{ $set: { status: "C" } },{ multi: true }

)

db.users.remove( { status: "D" } )

Page 40: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiele SQL MONGODB: JOIN

Eine Alternative für den Join in MongoDB anhand eines BLOGBeispieles:

db.posts.save({title: "My First Blog Post", content: "Here is my super long post ...", created: 1328118062598

})

{ title: "My First Blog Post", content: "Here is my super long post ...", comments: [ { text: "This post sucks!"

, name: "seanhess", created: 1328118162000 }

, { text: "I know! I wish it were longer", name: "bob", created: 1328118262000 }

]}

"comments" wird nicht in einer eigenen Collection, sondern imselben Dokument als "nested document" gespeichert. -> Join istnicht notwendig.

Page 41: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiele SQL MONGODB: JOIN

Eine Alternative für den Join in MongoDB anhand eines BLOGBeispieles:

db.posts.save({title: "My First Blog Post", content: "Here is my super long post ...", created: 1328118062598

})

{ title: "My First Blog Post", content: "Here is my super long post ...", comments: [ { text: "This post sucks!"

, name: "seanhess", created: 1328118162000 }

, { text: "I know! I wish it were longer", name: "bob", created: 1328118262000 }

]}

"comments" wird nicht in einer eigenen Collection, sondern imselben Dokument als "nested document" gespeichert. -> Join istnicht notwendig.

Page 42: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiel eines anderen DRIVER: PHP 1

Wenn wir folgendes Dokument in eine Collection 'users' einfügen:

{"first_name" : "MongoDB","last_name" : "Fan","tags" : ["developer","user"]}

#Muessen wir es vorher in PHP Syntax umschreiben:

$user = array('first_name' => 'MongoDB','last_name' => 'Fan','tags' => array('developer','user'));

#____________________________________

# Configuration

$dbhost = 'localhost';$dbname = 'test';

# Connect to test database

$m = new Mongo("mongodb://$dbhost");$db = $m->$dbname;

# Get the users collection

$c_users = $db->users;

# Insert this new document

#into the users collection

$c_users->save($user);

#Eintrag in die Datenbank:

{"_id" : ObjectId("4fd371a4f479d1924f000000"),"first_name" : "MongoDB","last_name" : "Fan","tags" : ["developer","user"]}

Page 43: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiel eines anderen DRIVER: PHP 1

Wenn wir folgendes Dokument in eine Collection 'users' einfügen:

{"first_name" : "MongoDB","last_name" : "Fan","tags" : ["developer","user"]}

#Muessen wir es vorher in PHP Syntax umschreiben:

$user = array('first_name' => 'MongoDB','last_name' => 'Fan','tags' => array('developer','user'));

#____________________________________

# Configuration

$dbhost = 'localhost';$dbname = 'test';

# Connect to test database

$m = new Mongo("mongodb://$dbhost");$db = $m->$dbname;

# Get the users collection

$c_users = $db->users;

# Insert this new document

#into the users collection

$c_users->save($user);

#Eintrag in die Datenbank:

{"_id" : ObjectId("4fd371a4f479d1924f000000"),"first_name" : "MongoDB","last_name" : "Fan","tags" : ["developer","user"]}

Page 44: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiel eines anderen DRIVER: PHP 1

Wenn wir folgendes Dokument in eine Collection 'users' einfügen:

{"first_name" : "MongoDB","last_name" : "Fan","tags" : ["developer","user"]}

#Muessen wir es vorher in PHP Syntax umschreiben:

$user = array('first_name' => 'MongoDB','last_name' => 'Fan','tags' => array('developer','user'));

#____________________________________

# Configuration

$dbhost = 'localhost';$dbname = 'test';

# Connect to test database

$m = new Mongo("mongodb://$dbhost");$db = $m->$dbname;

# Get the users collection

$c_users = $db->users;

# Insert this new document

#into the users collection

$c_users->save($user);

#Eintrag in die Datenbank:

{"_id" : ObjectId("4fd371a4f479d1924f000000"),"first_name" : "MongoDB","last_name" : "Fan","tags" : ["developer","user"]}

Page 45: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiel eines anderen DRIVER: PHP 2

# Configuration

$dbhost = 'localhost';$dbname = 'test';

# Connect to test database

$m = new Mongo("mongodb://$dbhost");$db = $m->$dbname;

# Get the users collection

$c_users = $db->users;

# Find the user with

# first_name 'MongoDB'

# and last_name 'Fan'

$user = array('first_name' => 'MongoDB','last_name' => 'Fan');

$user = $c_users->findOne($user);var_dump($user);

Outputarray(4) {'_id' =>class MongoId#6 (1) {

public $$id =>string(24) "4fd37aa3f479d1c850000000"

}'first_name' =>string(3) "MongoDB"'last_name' =>string(5) "Fan"'tags' =>array(2) {

[0] =>string(9) "developer"[1] =>string(5) "user"

}}

Page 46: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Beispiel eines anderen DRIVER: PHP 2

# Configuration

$dbhost = 'localhost';$dbname = 'test';

# Connect to test database

$m = new Mongo("mongodb://$dbhost");$db = $m->$dbname;

# Get the users collection

$c_users = $db->users;

# Find the user with

# first_name 'MongoDB'

# and last_name 'Fan'

$user = array('first_name' => 'MongoDB','last_name' => 'Fan');

$user = $c_users->findOne($user);var_dump($user);

Outputarray(4) {'_id' =>class MongoId#6 (1) {

public $$id =>string(24) "4fd37aa3f479d1c850000000"

}'first_name' =>string(3) "MongoDB"'last_name' =>string(5) "Fan"'tags' =>array(2) {

[0] =>string(9) "developer"[1] =>string(5) "user"

}}

Page 47: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Fazit 1

Skalierung + Performance

Funktionalitaet

MongoDBMemcached

RDBMS

Page 48: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Fazit2

Fragen:

Muss das System mit groÿen Datenmengen e�zient umgehenkönnen?Werden hohe Anforderungen an Skalierbarkeit und Flexibilität derDatenbank gestellt?Sollen sich die Daten über mehrere Server verteilen lassen?Sind häu�ge Änderungen an der Datenstruktur in Zukunft zuerwarten?Fragen mit �Ja� beantworten? -> MongoDB näher anschauen.

Page 49: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Fazit2

Fragen:Muss das System mit groÿen Datenmengen e�zient umgehenkönnen?

Werden hohe Anforderungen an Skalierbarkeit und Flexibilität derDatenbank gestellt?Sollen sich die Daten über mehrere Server verteilen lassen?Sind häu�ge Änderungen an der Datenstruktur in Zukunft zuerwarten?Fragen mit �Ja� beantworten? -> MongoDB näher anschauen.

Page 50: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Fazit2

Fragen:Muss das System mit groÿen Datenmengen e�zient umgehenkönnen?Werden hohe Anforderungen an Skalierbarkeit und Flexibilität derDatenbank gestellt?

Sollen sich die Daten über mehrere Server verteilen lassen?Sind häu�ge Änderungen an der Datenstruktur in Zukunft zuerwarten?Fragen mit �Ja� beantworten? -> MongoDB näher anschauen.

Page 51: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Fazit2

Fragen:Muss das System mit groÿen Datenmengen e�zient umgehenkönnen?Werden hohe Anforderungen an Skalierbarkeit und Flexibilität derDatenbank gestellt?Sollen sich die Daten über mehrere Server verteilen lassen?

Sind häu�ge Änderungen an der Datenstruktur in Zukunft zuerwarten?Fragen mit �Ja� beantworten? -> MongoDB näher anschauen.

Page 52: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Fazit2

Fragen:Muss das System mit groÿen Datenmengen e�zient umgehenkönnen?Werden hohe Anforderungen an Skalierbarkeit und Flexibilität derDatenbank gestellt?Sollen sich die Daten über mehrere Server verteilen lassen?Sind häu�ge Änderungen an der Datenstruktur in Zukunft zuerwarten?

Fragen mit �Ja� beantworten? -> MongoDB näher anschauen.

Page 53: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Fazit2

Fragen:Muss das System mit groÿen Datenmengen e�zient umgehenkönnen?Werden hohe Anforderungen an Skalierbarkeit und Flexibilität derDatenbank gestellt?Sollen sich die Daten über mehrere Server verteilen lassen?Sind häu�ge Änderungen an der Datenstruktur in Zukunft zuerwarten?Fragen mit �Ja� beantworten? -> MongoDB näher anschauen.

Page 54: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Referenzen

http://de.wikipedia.org/wiki/MongoDB Abrufdatum December10, 2012

http://www.mongodb.org/display/DOCS AbrufdatumDecember 10, 2012

http://www.muensolutions.com/de/mysql-vs-mongodb-datenbanksysteme-fur-web-anwendungen-im-vergleich.htmlAbrufdatum December 10, 2012

Page 55: Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine zwingenden Relationstabellen und Joins I Relationen sind direkt im Datensatz speicherbar

Referenzen 2

What is MongoDB? | MongoDBhttps://www.youtube.com/watch?v=CvIr-2lMLsk AbrufdatumDecember 10, 2012

YOU ONLY WISH MONGODB WASN'T RELATIONALhttp://seanhess.github.com/2012/02/01/mongodb_relational.htmlAbrufdatum December 10, 2012

O'Reilly Webcast: Introduction to MongoDBhttps://www.youtube.com/watch?v=w5qr4sx5Vt0 AbrufdatumDecember 10, 2012

MongoDB for the PHP Mindhttp://blog.mongodb.org/post/24960636131/mongodb-for-the-php-mind-part-1 Abrufdatum December 10,2012