Dokumentenorientierte Datenbanken - MongoDB Jan Hentschel Ultra Tendency UG
Übersicht Dokumente sind unabhängige Einheiten Bessere Performance (zusammengehörige Daten werden gemeinsam gelesen) Objektmodell der Anwendung kann direkt in die Datenbank geschrieben werden Unstrukturierte Daten können einfach gespeichert werden Keine Schema-Migration bei Updates notwendig Cassandra CouchDB Lotus Notes Redis RethinkDB MongoDB u.v.m. 2
Einsatzgebiete Schnelle Entwicklung Web-freundlich CRUD Entwickler-freundlich JSON REST Natürliche Datenmodellierung 3
Motivation New York Times IBM CERN CMS Foursquare Salesforce Marketing Cloud Cisco Bosch 4
MetLife Insurance The Wall Customer Service Application 360 Grad-Konsolidierung, u.a. Policies Steigert Call Center-Produktivität 45 Millionen Vereinbarungen mit 140 Millionen Transaktionen Go Live innerhalb von 90 Tagen für über 100 Million Kunden Weitere MongoDB-Systeme sind geplant 5
Übersicht Veröffentlicht 2009 Geschrieben in C++ Beinhaltet SQL-freundlichen Techniken (Abfragen, Index) BSON als Protokoll Abfragen und DB-Management via JavaScript-Ausdrücke Geospatial Indexing ACID auf Dokumentenebene 6
Wann nutzt man MongoDB? Dynamische Anfragen benötigt Index bevorzugt (kein Map/Reduce) Gute Performance auf großen Daten Wenn CouchDB eingesetzt werden soll, aber die Daten sich zu oft ändern Wenn man MySQL oder PostgreSQL einsetzt, aber vordefinierte Spalten nicht benötigt werden 7
MongoDB Enterprise Mehr Sicherheitsfunktionalitäten Kerberos LDAP-Authentifizierung On-Demand Training Proaktiver Support Commercial License 8
Schema-Design comments comment_id post_id by_user message data_time likes post id title description urlpost_by tag_list id post_id tag { } _id: POST_ID by: POST_BY, url: URL_OF_POST, tags: [TAG1, TAG2, TAG3], comments: [ { user:'comment_by', message: TEXT, datecreated: DATE_TIME, like: LIKES }, ] 9
Schema-Design Ähnliche Dokumente in Collection zusammenfassen Index-Erstellung passend zu den Anfragen Ein Index per Abfrage Index sollte in den RAM passen Nicht immer ist ein Index ratsam 10
Entwicklung Viele Client-Implementierung (Driver) vs keine HTTP-Schnittstelle Einheitliche Entwicklung der Driver über Sprachen hinweg Primär getrieben von Entwicklern, weniger von Administratoren 11
Entwicklung C Scala Java Ruby C# Driver Python PHP Perl Node.js C++ 12
Replikation Master/Slave-Replikation Automatischer Failover mit Replika Sets Primary Secondary Arbiter Delayed secondary Priority 0 Wird nie als Primary gewählt 13
Replikation Secondary Driver Read Write Primary Secondary 14
Scale-out Shard A 256 GB Collection I 1 TB Shard B 256 GB Shard C 256 GB Shard D 256 GB 15
Performance Performance über Features Eine leere Datenbank benötigt 192 MB Normalisierung in ein großes Dokument bietet manchmal bessere Performance Indexes erstellen die Anfragen unterstützen Limitierung der Ergebnismenge 16
Aggregation Pipeline 17
Single Purpose Aggregation 18
MapReduce 19
MongoDB & Big Data MapReduce ist möglich GridFS für Big Data & Metadaten Spezifikation für das Speichern und Lesen von BSON-Dokumenten, die größer als 16 MB sind Partielles Laden einer Datei möglich 20
Anfragetypen Key-Value-Anfragen Range-Anfragen Geospatial-Anfragen Textsuche-Anfragen Aggreation Framework-Anfragen MapReduce-Anfragen 21
MongoDB MapReduce 22
Hadoop MapReduce 23
MongoDB & Hadoop MapReduce 24
Demo 25