mongodb im einsatz - grundlagen

18
Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst. Brownbag Session mongoDB im Einsatz Grundlagen 10.08.2012 Nils Domrose inovex GmbH

Upload: inovex-gmbh

Post on 13-Jul-2015

239 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: mongoDB im Einsatz - Grundlagen

Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst.

Brownbag Session mongoDB im Einsatz Grundlagen

10.08.2012

Nils Domrose inovex GmbH

Page 2: mongoDB im Einsatz - Grundlagen

“MongoDB wasn’t designed in a lab. We built MongoDB from our own experiences building large scale, high availability, robust systems. We didn’t start from scratch, we really tried to figure out what was broken, and tackle that. So the way I think about MongoDB is that if you take MySql, and change the data model from relational to document based, you get a lot of great features: embedded docs for speed, manageability, agile development with schema-less databases, easier horizontal scalability because joins aren’t as important. There are lots of things that work great in relational databases: indexes, dynamic queries and updates to name a few, and we haven’t changed much there. For example, the way you design your indexes in MongoDB should be exactly the way you do it in MySql or Oracle, you just have the option of indexing an embedded field.”

– Eliot Horowitz, 10gen CTO and Co-founder

Page 3: mongoDB im Einsatz - Grundlagen

! Dokumenten orientierte Datenbank (Document Storage) ! Dynamisch Queries, Index Unterstützung, schemalos

!  In C++ geschrieben

!  High Availability Setups

!  Auto Sharding

! MapReduce

! GridFS

! Projekt der Firma 10gen verfügbar unter AGPL

Bilder Quelle: http://www.mongodb.org

Über mongoDB www.mongodb.org

Page 4: mongoDB im Einsatz - Grundlagen

! einfache Installation, Konfiguration und Administration

! Migrationspfad für kleiner Setups

! Recht Universell einsetzbar, viele nützlich Funktionen

! Skalierbar

! Schnelle Weiterentwicklung (z.B. Datacenter aware Replication)

! Einfaches Interface, mächtiger Syntax, viele mitgelieferte Tools

! gute Dokumentation und wachsende Community

Warum mongoDB

Page 5: mongoDB im Einsatz - Grundlagen

! Unter Debian 10gen apt sources Verwenden !  Version unter Debian queeze: 1.4.4 aktuell 2.0.7

$ apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10

$ cat >/etc/apt/sources.list.d/10gen.list << EOF

deb http://downloads-distro.mongodb.org/repo/debian-

sysvinit dist 10gen

EOF

$ apt-get update; apt-get install mongodb-10gen

Vorbereitungen

Page 6: mongoDB im Einsatz - Grundlagen

Hello mongoDB

!  Download für verschieden Platformen unter http://www.mongodb.org/downloads

!  start des mongod Prozesses

! aufrufen des command line Clients “mongo”

Page 7: mongoDB im Einsatz - Grundlagen

! Wechsel in DatenBank:

>use testdb

! Einfügen eines Dokuments in eine Collection:

>db.test_col.insert({test: ‘mytest data’})

! Suchen eines Dokuments:

>db.test_col.find({test: ‘mytest data’})

! Javascript ist möglich:

>for (var i=1;i<= 20;i++) db.test_col.save({test: i});

! Hilfe:

>db.help()

! Datenbanken, Schemas und Collections müssen nicht angelegt werden!

Erste Schritte Table = Collection = schemalose Sammlung von Dokumenten

Page 8: mongoDB im Einsatz - Grundlagen

! Einfacher index: >db.test_col.ensureIndex({test:1});

!  Per default immer ein Index auf dem _id Feld (ObjectID)

!  Index auf Embedded Fields:

>db.test_col.ensureIndex({“test.fasel”:1});

!  Index auf mehrer Felder

>db.test_col.ensureIndex({test:1, blubbs:1});

!  Sparse Index (mit Lücken)

>db.test_col.ensureIndex({test:1}, {sparse: true});

!  Unique Constraint

>db.test_col.ensureIndex({test:1}, {unique: true});

! Kombinationen:

>db.test_col.ensureIndex({test:1}, {unique: true,

sparse:true});

Index

Page 9: mongoDB im Einsatz - Grundlagen

Bilder Quelle: http://www.mongodb.org

Replica Set Sharding Setup

Mögliche Setups

Page 10: mongoDB im Einsatz - Grundlagen

! Daten werden auf mehrere Server (Secondaries) verteilt

!  Client kann sicherstellen, dass Daten auf N Server repliziert wurden

!  Writes finden auf dem Primary statt

!  Reads können optional pro query verteilt werden

! Automatischer Failover im Fehler Fall

Replica Sets Sharding

Replica Sets und Sharding

! Daten werden automatisch auf N shards verteilt

!  in Kombination mit Relica Sets werden die Daten dann repliziert

!  Writes auf alle Primary Shard Server

!  Reads optional auf allen Servern

! Config Server halten Metadaten

!  Router Prozess verteilt Requests

Page 11: mongoDB im Einsatz - Grundlagen

!  Multi Purpose Backend Datenbank für:

! Echtzeit Statistiken

! Realtime Debugging und Error Reporting

!  Distributed File System

!  JSON Document Store

!  Geo Placemarks

mongoDB im Einsatz

Page 12: mongoDB im Einsatz - Grundlagen

!  Inline Erfassung von Statistkdaten

!  Unique User/Visitor Reporting

!  Usage Reporting

!  Response Time Reporting

! Kann zu einem grossen Teil Reporting Cron Jobs ersetzen

! Einfaches upsert mit vielen increments auf ein document

!  Client muss nicht auf write Ergebniss warten.

Anwendung – Echtzeit Statistiken

0  0.5  1  

1.5  2  

2.5  3  

3.5  4  

4.5  5  

Service  A   Service  B   Service  C   Service  D  

Page 13: mongoDB im Einsatz - Grundlagen

!  Inline Debugging

!  Inline Error Reporting (komplettes Erfassen des aktuellen Requests)

!  Caped Collections mit fester Grösse -> kein Überlaufen

!  die ältesten Einträge werden bei bedarf gelöscht

!  Platte kann nicht “voll laufen”

! Ersetzt Error logging

Anwendung – Logging und Debugging

Page 14: mongoDB im Einsatz - Grundlagen

>db.places.insert({loc: {lat: 50, lon: 50}})

>db.places.ensureIndex( { loc : "2d" } , { bits : 26 } )

>db.places.find( { loc : { $near : [50,50] , $maxDistance : 5 } } ).limit(20)

Placemark Server ohne eine Zeile Code!

Anwendung – Geo Daten

Page 15: mongoDB im Einsatz - Grundlagen

Demo

repl1   repl3  repl2  

Client  

Page 16: mongoDB im Einsatz - Grundlagen

! Konfiguration

! Wartung, Failover, Recovery, Status Infos, Logging

!  Caped Collections

!  Geo Index

!  Grid FS und multiple Version Support für Files

!  Performance und Erweiterbarkeit

! Einfache Massnahmen wie notablescan, noscripting

Was gefällt ?

Page 17: mongoDB im Einsatz - Grundlagen

!  64 Bit Version verwenden - die 32 Bit Version kann nur 2,5 GB Daten verwalten

!  BSON /JSON Document Limit aktuell 16MB vorher 4MB

!  Default NameSpace Limit 24.000 / database (Collection und Index zählt dazu)

! Bis zur Version 2.0 kein Support für Authentisierung auf sharding Systemen

! Zum Testen Grösse der Datafiles einschränken: Option smallfiles

Worauf muss man achten?

Page 18: mongoDB im Einsatz - Grundlagen

Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst.

Vielen Dank für Ihre Aufmerksamkeit!