Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine...
Transcript of Präsentation mongoDBxmdimrill.ai.wu-wien.ac.at/~wohlg/dbs/pdf/mongo_db.pdf · I MongoDB hat keine...
Präsentation mongoDB
David Wild
11.12.2012
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
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
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
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
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
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
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
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
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
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
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
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
Warum MongoDB? 3
I Starre DB Schema -> können Entwicklungsgeschwindigkeitverlangsamen
I MongoDB erhöht Produktivität:
I Dokumenten-basierende Datenbank: schemafreie Struktur
Warum MongoDB? 3
I Starre DB Schema -> können Entwicklungsgeschwindigkeitverlangsamen
I MongoDB erhöht Produktivität:
I Dokumenten-basierende Datenbank: schemafreie Struktur
Warum MongoDB? 3
I Starre DB Schema -> können Entwicklungsgeschwindigkeitverlangsamen
I MongoDB erhöht Produktivität:
I Dokumenten-basierende Datenbank: schemafreie Struktur
Wer benutzt es?
Bekannte Webanwendungen: �Foursquare�, �Craigslist�, �Bit.ly�,�Grooveshark�.MongoDB ist die populärste NoSQL Datenbank.
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
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
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
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� )
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� )
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� )
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� )
JSON vs BSON
Ausgabe einer Abfrage in JSON (oben) Gespeichert als BSON
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...
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...
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...
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...
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
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
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
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
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()
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" } )
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" } )
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" } )
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" } )
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" } )
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.
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.
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"]}
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"]}
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"]}
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"
}}
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"
}}
Fazit 1
Skalierung + Performance
Funktionalitaet
MongoDBMemcached
RDBMS
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.
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.
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.
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.
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.
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.
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
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