NoSQL & MongoDB - Avision

Transcription

NoSQL & MongoDBAvision GmbHDr. Gernot Pfanner

InhaltGrundlagen Datenbanken Wozu Datenbanken? RelationalesDatenbankmodellNoSQL Grundlagen Grundlegende Einteilung CAP-Theorem SQL vs. NoSQL Der Weg zur richtigen DB MongoDBZusammenfassungAvision GmbHDr. Gernot Pfanner

Wozu Datenbanken? Zentrale Speicherung von Daten Konsistenz (Consistency) Verringerung von Redundanz Gleichzeitige Verfügbarkeit für mehrereBenutzer (Concurrency) Permanente Datensicherung (Fault-Tolerance) Suchanfragen Query (Indexierung) Datenmanipulation Verarbeitung großer DatenmengenDatenbank Daten Verknüpfungen (entscheidend für DB-Modell)Avision GmbHDr. Gernot Pfanner

Relationales Datenmodell Prinzip: Organisation von Daten in Tabellen Tabelle: Relation (z.B. Konsument, Produkt) Spalten: Attribute Zeilen: Instanzen Zeilen-ID: Primary Key Übergreifende Verknüpfungen: Foreign KeysIDUserOSLast 425SupermanWindows(null) Atomizität: "All or nothing" bei Transaktionen774Iron ManLinux12.03.18 Consistency: Transaktionen bewahrenDatenkonsistenz in DB Isolation: Keine Interferenz bei parallelgestarteten Transaktionen Durable: Datenänderungen werdenpermanent geschrieben Datenmodell festgelegt durch (vordefiniertes)Schema ACID Avision GmbHVertreter: Oracle (1980), MySQL (1995), SQL Server(1989), PostgreSQL (1997)Dr. Gernot Pfanner

NoSQL NoSQL: steht für „Not Only SQL“ Kennzeichen Keine vordefinierten Tabellenschema BASE („Basically Available Soft state Eventual consistency“) Designprinzip, welches absolute Konsistenz (zwischen verteilten Systemen) aufgibt ( ) Erhöhte Verfügbarkeit des Systems (-) System-Zustand zeitweise undefiniert Wordplay: „ACID“ (Säure) und „BASE“ (Base) NoSQL umfasst mehr als 200 verschiedene Datenbanken (http://nosql-database.org) Grundlegende Einteilung Schlüssel/Wert-DB (Key/Value) Spalten-DB (Wide-Column) Dokumenten-DB (Document) Graphen-DB (Graph)Avision GmbHDr. Gernot Pfanner

Grundlegende EinteilungKey/Value DB Prinzip:Hash-Tables mit eter Parker“, “NewYork City“}“Superman“{“Clark Kent“,“Metropolis“}“Iron Man“{“Tony Stark“,“Malibu“} Datenmodell: Planar Use Cases: URL-Kürzungsdienst Kurzlebige Daten (z.B. Logfiles,Session-Daten, Cache, Queues) Wichtigste Vertreter:Memcached (2003), Redis (2009)Avision GmbHDr. Gernot Pfanner

Grundlegende EinteilungWide-Column DB Prinzip: Daten-Speicherung in SpaltenRow KeyColumn/Key 1Column/Key 2Column/Key 3Column/Key 4“Batman‘‘First NameLast NameResidenceSavedEarthBruceWayneGothamYesFirst NameLast NameResidenceSavedEarthClarkKentMetropolisYesFirst NameLast SavedEarthNew YorkYes“Superman““Iron Man““TheAvengers“Avision GmbH Column Family Row key Columnkeys Values Datenmodell: Linear (für ein Objekt) Use Cases: User-Profil Attribute Metadaten (z.B. Songs, Künstler) Real-Time Analytics Wichtigste Vertreter:Cassandra (2008), HBase (2008)Dr. Gernot Pfanner

Grundlegende EinteilungDocument DB Prinzip:Collections von Key/Value-Paaren inDokumenten-Struktur (XML, JSON, BSON){Group name: “The Avengers“,Residence: “New York“,Superheroes: [{Name: “Tony Stark“, Alias: “IronMan“},{Name: “Bruce Banner“, Alias: “Hulk“},{Name: “Thor Odinson“, Alias: “Thor“},. ]} Datenmodell: Strukturiert Use Cases: Historische Daten bzw. Archivierung Single Views Produkt Katalog bzw. Warenkorb Benutzer-generierter Content (z.B.Blogs) Real-Time Analytics Wichtigste Vertreter:MongoDB (2009), Couchbase (2011)Avision GmbHDr. Gernot Pfanner

Grundlegende EinteilungGraph DBVirginia „Pepper“ Potts Iron ManPrinzip:Daten werden in Knoten Linien(Verknüpfungen) gespeichert Datenmodell: NetzwerkThe Avengers Use Cases: Produkt- oder FreundschaftsEmpfehlungenHawkeyeHulk optimale Routen („Problem desHandlungsreisenden“)Thor OdinAvision GmbHLokiDr. Gernot PfannerWichtigste Vertreter:Neo4j (2007)

) Buche Zimmer(B) Zimmer ist gebucht (für beide gleich) Consistency (Konsistenz): Geschriebene Daten sind für alle Benutzer gleich Availability (Verfügbarkeit): DB-System ist für jeden jederzeit verfügbar Partition tolerance: Kommunikationsfehler zwischen Komponenten stören nicht dieFunktionsweise des GesamtsystemsAvision GmbHDr. Gernot Pfanner

CAP-TheoremAvailability Consistency (Konsistenz): Geschriebene Daten sind für alle Benutzer gleich Availability (Verfügbarkeit): DB-System ist für jeden jederzeit verfügbar Partition tolerance: Kommunikationsfehler zwischen Komponenten stören nicht dieFunktionsweise des GesamtsystemsAvision GmbHDr. Gernot Pfanner

CAP-TheoremPartition tolerance Consistency (Konsistenz): Geschriebene Daten sind für alle Benutzer gleich Availability (Verfügbarkeit): DB-System ist für jeden jederzeit verfügbar Partition tolerance: Kommunikationsfehler zwischen Komponenten stören nicht dieFunktionsweise des GesamtsystemsAvision GmbHDr. Gernot Pfanner

CAP-TheoremGesamtdarstellung Consistency (Konsistenz): Geschriebene Daten sind für alle Benutzer gleichAvailability (Verfügbarkeit): DB-System ist für jeden jederzeit verfügbarPartition tolerance: Kommunikationsfehler zwischen Komponenten stören nicht die Funktionsweise desGesamtsystemsCAP-Theorem: Wenn P auftritt, sind C und A nicht gleichzeitig erfüllbarAnmerkung: Konsistenz und Verfügbarkeit haben eine andere Bedeutung als bei ACIDAvision GmbHDr. Gernot Pfanner

ceCassandra,CouchDBAvision GmbHDr. Gernot Pfanner

SQL vs. NoSQLSQLNoSQL Optimiert für zentralisierte Datenbanken (vertical scaling) Optimiert für verteilte Datenbanken (horizontal scaling) Gewährt strenge Transaktions-Sicherheit (ACID) Hohe Verfügbarkeit & einfache Skalierbarkeit (Sharding) Festes, logisch-konsistentes, nicht-redundantesDatenmodell Flexibles, agiles Datenmodell SQL ist high-level Query-Sprache Bessere Lese- und Schreib-Performance für großeDatenmengenProblemeProbleme Skalierung (z.B. bei Performance-Problemen) Transaktions-Sicherheit Statistisches Datenmodell & Schema-Erweiterung Umstrukturierungen des DB-Models (z.B. neue Relationen) Workarounds zerstören oftmals die Konsistenz des DB-Modells Keine einheitliche TechnologieUse CasesUse Cases Nur eine Datenquelle Verschiedene Datenquellen Systeme mit wenig Benutzern Systeme mit vielen Benutzern & Cloud Computing Strukturierte Daten Semi-Strukturierte, verschachtelte Daten Komplexe Transaktionen Einfache TransaktionenAvision GmbHDr. Gernot Pfanner

Der Weg zur richtigen Datenbank Skalierung (horizontal/vertikal oder Cloud) & PerformanceDatenquellen (wenige/viele)Datenmodell klassifizieren (strukturierte/unstrukturierte Daten)Transaktionen (einfach/komplex)Popularität (z. B. https://db-engines.com)Legacy/Neu-Anwendung Möglichkeiten für Legacy-Anwendungen Avision GmbHMigration des DatenmodellPolyglot persistence: Kombination verschiedener Datenbanken-TechnologienDr. Gernot Pfanner

MongoDBGrundlegendes Name abgeleitet von “humongous” (engl.): “gigantisch” Geschrieben in C BSON-Basiert (Binary JSON) Varianten Open Source: GNU AGPL v3.0 Kommerziell: "MongoDB Enterprise Advanced " Tools (Ops Manager, MongoDB Compass) Commercial development license Zusätzliche Sicherheits-Features: Kerberos/LDAP-Authentifizerung, Auditing In-Memory storage engine Plattformunabhängig (Windows, Linux, OS X, Solaris) GridFS (“Grid File System”) für Dateien größer als 16 MB (maximaleDokumentengröße)Avision GmbHDr. Gernot Pfanner

MongoDBDB-Entwickler SichCollection Datenorganisation{Group name: “Independent Heroes“,Residence:“New York“,{Superheroes:[Group name:“Justice rk“, Alias: “Iron{Man“},Superheroes:[Key : ValueGroup name:“The ��},{Name:“TonyStark“,Alias:“IronResidence: “New York“,{Name:“Thor Odinson“, Alias: “Thor“},Man“},Superheroes:[. ] {Name: “Bruce Banner“, Alias: “Hulk“},{Name: “Tony Stark“, Alias: “Iron}{Name:“Thor Odinson“, Alias: “Thor“},Man“},. ] {Name: “Bruce Banner“, Alias: “Hulk“},}{Name: “Thor Odinson“, Alias: “Thor“},. ]}DocumentAvision GmbH SQL-Table: Collection von JSONDokumenten SQL-Row: Document Aufbau: Key : ValueEindeutigkeit durch id (ObjectId)Zugriff auf MongoDB Code: JavaScript, Java, Python, ScalaGUI-Tools: MongoDB Compass, Robot3TDB-Shell: mongo Dr. Gernot PfannerInteraktives JavaScript InterfaceKann JS-Skripts ausführen:mongo JS-File

MongoDBMongo Shell (Kommandos)System Hilfe: db.help() Show database: show dbs Create/Switch to DB: use database Show statistics: db.stats()Basics Create collection:db.createCollection( name , options ) Create Index:db. collection .createIndex( {y:1} ) Create view: db.createView( view , source , pipeline , collation ) Avision GmbHDrop database: db.dropDatabase()Dr. Gernot Pfanner

MongoDBMongo Shell (CRUD Operations)Allgemeines Kommando-Prinzip: db. collection . command ( JSON )JSON: strukturiert durch Operatoren ( and, or, gt, in, ), keys und values Create Prinzip: db. collection .insert( document ) Bsp.: db.heroes.insertOne({ Name: "Bruce Wayne", Alias: "Batman", Age: 35 }) Read Prinzip: db. collection .find( query criteria projections ) Projections: Selektive Darstellung von gewünschten Feldern Bsp.: db.heroes.find({ Age: { gt: 18 } }, { Name: 0 } ).limit(5) db.heroes.find({ Name: { in: [ "Bruce Wayne", "Clark Kent" ] } }) db.heroes.find({ or: [ { Alias: "Batman" }, { Age: 40 } ] })Update Prinzip: db. collection .update( update filter , updated action ) Bsp.: db.heroes.updateOne({ Name: "Bruce Wayne" }, { set: { Name: "B. W." } } )Delete Prinzip: db. collection .deleteOne( delete filter ) Bsp.: db.heroes.deleteOne({ Age: 35 })Siehe "SQL to MongoDB Mapping Chart" (MongoDB Manual)Avision GmbHDr. Gernot Pfanner

MongoDBMongoDB & Java Zwei Zugriffsmöglichkeiten MongoTemplate MongoClient: Interface between Java undMongoDB (connect to db, create collection, ) Bsp.: mongoTemplate.insert(newAddress(), "Address");MongoRepository Bsp.: mongoTemplate.insert(newAddress(), "Address");MongoConverter Mapping of Java Objekt Dokument Möglichkeiten Direkt (Annotations-Basiert): @Document, @ID, Custom MongoConverter-ImplementationMongoTemplate hat Methoden fürfundamentale DB-Operationen z.B. createCollection(), mapReduce(), vgl. mit Relationaler DB (JDBC): Execute SQL-QuerySpring Boot 2: Reactive MongoDB(Zugriff gemäß Publisher-Subscriber Pattern)Avision GmbHDr. Gernot Pfanner

Mongo DBSchema-Design: Embedded documents Prinzip: flexibles Schema Optionale Dokumenten-Validierung (bei update/insert) ist möglichSchlüsselfaktoren Atomicity: Transaktions-Sicherheit (derzeit) nur auf Dokumenten-Ebene Use Cases der Datenverarbeitung in der Anwendung (Queries, Updates,.) Dokumentenstruktur Embedded documents: für "contains- " & "one-to-many relationships" (1 Haupt-Dokumentgreift immer auf viele Unter-Dokumente zu) Referenzen: für komplexe " many-to-many relationships"EmbeddeddocumentAvision GmbH{id: ObjectId1 ,Name: “Tony Stark“,Contact: {Address: “10880 Malibu Point, 90265“,Phone: “XXX-XXX-XX-XXX“,Email: “tony (at) starkindustries.com“},Alias: {Name: “Iron Man“,Superpower: “Suit“,SavedEarth: “Yes“}}Dr. Gernot Pfanner

Mongo DBSchema-Design: Referenzen Prinzip: flexibles Schema Optionale Dokumenten-Validierung (bei update/insert) ist möglichSchlüsselfaktoren Atomicity: Transaktions-Sicherheit (derzeit) nur auf Dokumenten-Ebene Use Cases der Datenverarbeitung in der Anwendung (Queries, Updates,.) Dokumentenstruktur Embedded documents: für "contains- " & "one-to-many relationships" (1 Haupt-Dokumentgreift immer auf viele Unter-Dokumente zu) Referenzen: für komplexe " many-to-many relationships"Hero documentAvision GmbH{id: ObjectId1 ,Name: “Tony Stark“,}{id: ObjectId2 ,Address: “10880 Malibu Point, 90265“,Phone: “XXX-XXX-XX-XXX“,Email: “tony (at) starkindustries.com“}Contact document{id: ObjectId3 ,Name: “Iron Man“,Superpower: “Suit“,SavedEarth: “Yes“}Alias documentDr. Gernot Pfanner

MongoDBAggregationdb.heroes.aggregate([ match stage group stage { match: { Status: "X" } },{ group: { id: " Name", total: { sum: " Income" } } }]){Name: “Tony Stark“,Income: 110.000,Status: “X“} match{Name: “Tony Stark“,Income: 110.000,Status: “X“}{Name: “Tony Stark“,Income: 120.000,Status: “X“}{Name: “Tony Stark“,Income: 120.000,Status: “X“}{Name: “Bruce Wayne“,Income: 90.000,Status: “X“}{Name: “Bruce Wayne“,Income: 90.000,Status: “X“} group{Name: “Tony Stark“,Income: 230.000}{Name: “Bruce Wayne“,Income: 90.000}{Name: “Tony Stark“,Income: 30.000,Status: “Z“}Avision GmbH Prinzipa. Gruppiere Werte ausverschiedenen Dokumentenb. Führe Operationen durchc. Reduziere auf einzigesErgebnis Möglichkeiten Aggregation pipeline Map-Reduce Funktion Single-Purpose AggregationMethodensiehe "SQL to Aggregation Mapping Chart" (MongoDBManual)Dr. Gernot Pfanner

MongoDBAggregationdb.heroes.mapReduce(map function() { emit( this.Name, this.Income ); },reduce function(key, values) { return Array.sum(values) },{query query: { Status: "X" },output out: "result"}){Name: “Tony Stark“,Income: 110.000,Status: “X“}query{Name: “Tony Stark“,Income: 110.000,Status: “X“}{Name: “Tony Stark“,Income: 120.000,Status: “X“}{Name: “Tony Stark“,Income: 120.000,Status: “X“}{Name: “Bruce Wayne“,Income: 90.000,Status: “X“}{Name: “Bruce Wayne“,Income: 90.000,Status: “X“}{Name: “Tony Stark“,Income: 30.000,Status: “Z“}Avision GmbHmap Prinzipa. Gruppiere Werte ausverschiedenen Dokumenten{“Tony Stark“: [110.000, 120.000]}{“Bruce Wayne“: [90.000]}reduce{Name: “Tony Stark“,Income: 230.000}{Name: “Bruce Wayne“,Income: 90.000}Dr. Gernot Pfannerb. Führe Operationen durchc. Reduziere auf einzigesErgebnis Möglichkeiten Aggregation pipeline Map-Reduce Funk

Cassandra, CouchDB CAP-Theorem DB-Ausprägungen. Avision GmbH Dr. Gernot Pfanner SQL vs. NoSQL SQL Optimiert für zentralisierte Datenbanken (vertical scaling) Gewährt strenge Transaktions-Sicherheit (ACID) Festes, logisch-konsistentes, nicht-redundantes Datenmodell SQL ist high-level Query-Sprache Probleme Skalierung (z.B. bei Performance-Problemen) Statistisches Datenmodell & File Size: 1MBPage Count: 29