SlideShare a Scribd company logo
1 of 94
Download to read offline
Fachmodell-First
Einstieg in das NoSQL-Schema-Design
Gregor Biswanger | Freier Berater, Trainer, Autor und Sprecher
about.me/gregor.biswanger
Über mich
▪ Freier Berater, Trainer und Autor
▪ Schwerpunkte: Softwarearchitektur, Web und
Cross-Plattform Entwicklung mit JavaScript
▪ Technologieberater für die Intel Developer Zone
▪ Internationaler Sprecher auf Konferenzen und
User Groups
▪ Freier Autor für heise.de, dotnetpro,
WindowsDeveloper und viele weitere
Fachmagazine
▪ Video-Trainer bei video2brain und Microsoft
Gregor Biswanger
Microsoft MVP, Intel Black Belt &
Intel Software Innovator
cross-platform-blog.de
about.me/gregor.biswanger
Mein Versprechen…
Durch NoSQL erhalten wir ein Booster in unsere
Architektur bezüglich Produktivität,
Flexibilität und Performance.
Unser Reiseplan
▪ Was ist schlecht an relationalen
Datenbanken
▪ Einführung in NoSQL
▪ Dokumentenorientierte Datenbank
▪ Dokumentenorientiert modellieren
▪ Gemeinsam ein Beispiel modellieren
▪ Domain-Driven Design und
das Fachmodell
▪ Fazit
Relationale Datenbanken
machen mich Aggro!
Relationale Datenbanken sind nicht
für Entwickler gemacht
Sie geben sich als König
in der Architektur aus
Der Datenbank wird zu hohe Priorität zugesprochen und
die meisten Diskussionen drehen sich um die Datenbank
und das Datenmodell statt um Geschäftsprozesse und -
vorgänge.
Weil Sie es uns durch Ihre
Regeln aufzwingen.
Das Datenbank-Schema wird zur…
Londoner U-Bahn Karte
Entwickler
Relationale
Datenbank
O/R-Mapper
Das macht die Entwickler
traurig
Retrain your relational brain…
NoSQL
=
Not Only SQL
NoSQL Datenbanken verfolgen einen
nicht-relationalen Ansatz.
Sie brechen damit die lange Geschichte
relationaler Datenbanken.
Diese benötigen keine festgelegten
Tabellenschemata und versuchen
Joins zu vermeiden.
NoSQL-Datenbanken können
horizontal skalieren.
Die Ziele der
NoSQL-Bewegung
Verwaltung von unstrukturierten Daten
Stark
vernetzten Daten
Schnellen
Strukturänderungen
Großen Datenmengen
Unterscheidung nach Datenmodell und Leistung
Datenmodell Leistung Skalierbarkeit Flexibilität Komplexität Funktionalität
Key–Value Hoch Hoch Hoch Keine Unterschiedlich
(keine)
Spaltenorientiert Hoch Hoch Mittel Gering Minimal
Dokumentenorientiert Hoch Unterschiedlich (Hoch) Hoch Gering Unterschiedlich
(gering)
Graphbasiert Unterschiedlich Unterschiedlich Hoch Hoch Graphentheorie
Relational Unterschiedlich Unterschiedlich Gering Mittel Relationale
Algebra
Quelle: https://de.wikipedia.org/wiki/NoSQL
Datenmodell Leistung Skalierbarkeit Flexibilität Komplexität Funktionalität
Key–Value Hoch Hoch Hoch Keine Unterschiedlich
(keine)
Spaltenorientiert Hoch Hoch Mittel Gering Minimal
Dokumentenorientiert Hoch Unterschiedlich (Hoch) Hoch Gering Unterschiedlich
(gering)
Graphbasiert Unterschiedlich Unterschiedlich Hoch Hoch Graphentheorie
Relational Unterschiedlich Unterschiedlich Gering Mittel Relationale
Algebra
Dokumentenorientierte
Datenbank
Eine relationale Datenbank besteht aus
Datenbanktabellen, die einem festen
Datenbankschema unterliegen.
Modeling data, the relational way
Eine dokumentenorientierte Datenbank
besteht aus einzelnen Dokumenten mit einem
eindeutigen Identifikator.
Modeling data, the document way
{
"id": "0ec1ab0c-de08-4e42-...",
"addresses": [
{ "street": "sesamstraße",
"city": "gotham city" }
],
"contractdetails": [
{ "type": "home": "detail": "555-1212" },
{ "type": "email": "detail": "no@no.com" }
],
...
}
SQL
NoSQL
Data normalization
Come as you are
Relationale Daten sind wie das
recherchieren von Informationen
Dokumentenorientiere Daten
bieten alle benötigten Informationen
Dokumentenorientiert
modellieren
Dokumentenorientierte Datenbanken meinen NICHT,
das es keine relationale Daten geben darf.
„Design with No-Reference first“
Oder auch…
„Design with embedded first“
Im Allgemeinen bietet die Einbettung von Daten
eine bessere Leistung für Leseoperationen.
Eingebettete Datenmodelle ermöglichen
die Aktualisierung der zugehörigen Daten in
einem atomaren Schreibvorgang.
Integriert oder Referenziert?
Eingebettete Datenmodelle verwenden, wenn:
▪ Bei One-to-One-Beziehungen zwischen Entitäten.
▪ Bei One-to-Many-Beziehungen zwischen Entitäten.
▪ In diesen Beziehungen werden die "vielen" oder untergeordneten
Dokumente immer zusammen mit dem "ein" oder den
übergeordneten Dokumenten angezeigt.
Referenzierte Datenmodelle verwenden, wenn:
▪ Ein Einbetten würde zu einer Duplizierung von Daten führen, würde
jedoch keine ausreichenden Leseleistungsvorteile bieten, um die
Auswirkungen der Duplizierung zu überwiegen.
▪ Komplexere Many-to-Many-Beziehungen.
▪ Große hierarchische Datensätze.
Mein NoSQL Dokumenten-
Schema Kompass für Dich!
Dokumenten-Schema Kompass
Immer Manchmal Selten
Integriert x x x
Referenziert x x
Wie oft werden die Daten zusammen benutzt?
Dokumenten-Schema Kompass
Weniger als 100 Mehr als 100 Tausend
Integriert x x
Referenziert x x
Wie groß ist der Datensatz?
Dokumenten-Schema Kompass
Nie / Selten Gelegentlich Konstant
Integriert x x
Referenziert x x
Wie oft ändern sich die Daten?
Das Beispiel:
Rezeptdatenbank
Aktueller Stand
Optimierter Stand
Datenbankspezifisch
Datenbankspezifisch
Datenbankspezifisch
Zusammenfügen in
Datentyp: Zutat
Datentyp: Quelle
Datentyp: Tag
Datentyp: Rezept
(Root-Document)
Weniger als 100 Mehr als 100 Tausend
X
Wie groß ist der Datensatz?
Immer Manchmal Selten
Wie oft werden die Daten zusammen benutzt?
Nie / Selten Gelegentlich Konstant
X
Wie oft ändern sich die Daten?
Analyse vom Datentyp: Rezept
Vergleich mit dem Dokumenten-Schema Kompass
Immer Manchmal Selten
Integriert x x x
Referenziert x x
Wie oft werden die Daten zusammen benutzt?
Weniger als 100 Mehr als 100 Tausend
Integriert x x
Referenziert x x
Wie groß ist der Datensatz?
Nie / Selten Gelegentlich Konstant
Integriert x x
Referenziert x x
Wie oft ändern sich die Daten?
interface Rezept {
titel: string;
beschreibung: string;
seitenzahl?: number;
anzahlPersonen?: number;
}
Zu Dokument
Weniger als 100 Mehr als 100 Tausend
X
Wie groß ist der Datensatz?
Immer Manchmal Selten
X
Wie oft werden die Daten zusammen benutzt?
Nie / Selten Gelegentlich Konstant
X
Wie oft ändern sich die Daten?
Analyse vom Datentyp: Tag
Vergleich mit dem Dokumenten-Schema Kompass
Immer Manchmal Selten
Integriert x x x
Referenziert x x
Wie oft werden die Daten zusammen benutzt?
Weniger als 100 Mehr als 100 Tausend
Integriert x x
Referenziert x x
Wie groß ist der Datensatz?
Nie / Selten Gelegentlich Konstant
Integriert x x
Referenziert x x
Wie oft ändern sich die Daten?
interface Rezept {
titel: string;
beschreibung: string;
seitenzahl?: number;
anzahlPersonen?: number;
tags?: Tag[];
}
interface Tag {
titel: string;
}
Zu Dokument
Weniger als 100 Mehr als 100 Tausend
X
Wie groß ist der Datensatz?
Immer Manchmal Selten
X
Wie oft werden die Daten zusammen benutzt?
Nie / Selten Gelegentlich Konstant
X
Wie oft ändern sich die Daten?
Analyse vom Datentyp: Zutat
Vergleich mit dem Dokumenten-Schema Kompass
Immer Manchmal Selten
Integriert x x x
Referenziert x x
Wie oft werden die Daten zusammen benutzt?
Weniger als 100 Mehr als 100 Tausend
Integriert x x
Referenziert x x
Wie groß ist der Datensatz?
Nie / Selten Gelegentlich Konstant
Integriert x x
Referenziert x x
Wie oft ändern sich die Daten?
interface Rezept {
titel: string;
beschreibung: string;
seitenzahl?: number;
anzahlPersonen?: number;
tags?: Tag[];
zutaten?: Zutat[];
}
interface Tag {
titel: string;
}
interface Zutat {
stueck: number;
lebensmittel: string;
einheit?: string;
}
Zu Dokument
Weniger als 100 Mehr als 100 Tausend
X
Wie groß ist der Datensatz?
Immer Manchmal Selten
X
Wie oft werden die Daten zusammen benutzt?
Nie / Selten Gelegentlich Konstant
X
Wie oft ändern sich die Daten?
Analyse vom Datentyp: Quelle
Vergleich mit dem Dokumenten-Schema Kompass
Immer Manchmal Selten
Integriert x x x
Referenziert x x
Wie oft werden die Daten zusammen benutzt?
Weniger als 100 Mehr als 100 Tausend
Integriert x x
Referenziert x x
Wie groß ist der Datensatz?
Nie / Selten Gelegentlich Konstant
Integriert x x
Referenziert x x
Wie oft ändern sich die Daten?
interface Rezept {
titel: string;
beschreibung: string;
seitenzahl?: number;
anzahlPersonen?: number;
quelle: Quelle;
tags?: Tag[];
zutaten?: Zutat[];
}
interface Quelle {
titel: string;
standort?: string;
kurzbezeichnung?: string;
herkunft?: string;
anzahlRezepteGeschaetzt?: number;
}
interface Tag {
titel: string;
}
interface Zutat {
stueck: number;
lebensmittel: string;
einheit?: string;
}
Zu Dokument
Rezept
-----------------------------------
Titel
Beschreibung
…
Quelle
…
Tags
Zutaten
Tag
…
Zutat
…
Unterschiedliche Beziehungen behandeln in
dokumentenorientierten Datenbanken
Abfrage von Array-Werten ohne Duplikationen
> db.foo.save({ tags: ['Eierspeisen', 'Backstube'] })
> db.foo.save({ tags: ['Eierspeisen', 'Eingelegtes', 'Beilagen'] } )
> db.foo.save({ tags: ['Buttermischungen', 'Beilagen'] } )
> db.foo.distinct("tags")
[
"Backstube",
"Eierspeisen",
"Beilagen",
"Eingelegtes",
"Buttermischungen"
]
>
Anfragen für Array Felder
> db.foo.save({ _id: 1, "things" : [ 1, 2, 3 ] });
> db.foo.save({ _id: 2, "things" : [ 2, 3 ] });
> db.foo.save({ _id: 3, "things" : [ 3 ] });
> db.foo.save({ _id: 4, "things" : [ 1, 3 ] });
> db.foo.find({ things: 1 })
{ "_id" : 1, "things" : [ 1, 2, 3 ] }
{ "_id" : 4, "things" : [ 1, 3 ] }
>
Wichtig! Mongo ist Case-Sensitive.
Dot Notation
> db.foo.save({ _id: 1, "info" : { "canFly": false } });
> db.foo.save({ _id: 2, "info" : { "canFly": false } });
> db.foo.save({ _id: 3, "info" : { "canFly": true } });
> db.foo.save({ _id: 4, "info" : { "canFly": false } });
> db.foo.find({ "info.canFly": true })
{ "_id": 3, "info": { "canFly": true }}
>
▪ Ein Query kann ebenfalls Hierarchische Bedingungen beinhalten.
▪ Diese werden als String-Wert angeben.
▪ Wichtig! Mongo ist Case-Sensitive.
And-Kombination ebenfalls möglich
> db.foo.save({ _id: 1, "info": { "canFly": false } });
> db.foo.save({ _id: 2, "info": { "canFly": false } });
> db.foo.save({ _id: 3, "name": "Sample", "info": { "canFly": true } });
> db.foo.save({ _id: 4, "info" : { "canFly": false } });
> db.foo.find({ "name": "Sample", "info.canFly": true })
{ "_id": 3, "name": "Sample", "info": { "canFly": true }}
>
Das Komma steht hierbei als And-Operator.
Referenzierte Dokumente abfragen mit dem integrierten
Aggregation-Framework und der $lookup-Funktion
Dokumentation und Beispiel unter:
https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
Domain-Driven Design
und das Fachmodell
Was ist DDD?
Domain-Driven Design (DDD) ist eine Herangehensweise an
die Modellierung komplexer, objektorientierter Software.
Quelle: wikipedia.de
Die Modellierung der Software wird dabei maßgeblich von den
umzusetzenden Fachlichkeiten der Anwendungsdomäne
beeinflusst.
Quelle: wikipedia.de
Domain = Fachlichkeit
Der Kunde Der Entwickler
Business-Experte Business-Experte
Fachlichkeit == Code
und Struktur
Eine „Common Language“ aufbauen!
Quelle:http://bonkersworld.net/object-world
Entwickler geben sich nicht genug Mühe, die
Objekte und Operationen so zu benennen, dass
die Namen zu den fachlichen Aufgaben passen.
Das führt zu einer großen Lücke zwischen dem
mentalen Modell, das die Anwender haben, und der
Software, die die Entwickler den Anwendern liefern.
Was macht der folgende Code?
Fachmodell / Domain Model
▪ Um also ein einheitliches Verständnis zwischen diesen
Gruppen (Domänenexperte und Entwickler) zu schaffen,
wird ein Modell der Domäne etabliert
▪ Ein Model ist eine auf bestimmte Zwecke ausgerichtete
vereinfachende Beschreibung der Wirklichkeit
Anemic domain model
▪ Unter DDD ein Anti-Pattern
▪ Trennt Datenstruktur und Funktionen
▪ Kein „richtiges“ objektorientiertes programmieren
▪ Braucht eigene Business-Logic-Schicht
▪ Macht ein Domain Model schwerer zu verstehen
Die Onion Architecture
Domain Model
(Core)
User Interface
(ASP.NET MVC, WPF etc.)
Tests
(BDD)
Services
Infrastructure
Application Services
Domain Services
Habt mehr Fokus
auf das Fachmodell
Fazit
NoSQL
is NOT a
Silver Bullet!
Use the right tool for
the right job!
Polyglot persistence gehört der Zukunft!
„NoSQL gibt uns
mehr Freiheiten,
dafür tragen wir mehr
Verantwortung“
http://about.me/Gregor.Biswanger
I´m looking forward to get your feedback
Thank you!

More Related Content

What's hot

Introduction to PostgreSQL
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQLJim Mlodgenski
 
MongoDB for Coder Training (Coding Serbia 2013)
MongoDB for Coder Training (Coding Serbia 2013)MongoDB for Coder Training (Coding Serbia 2013)
MongoDB for Coder Training (Coding Serbia 2013)Uwe Printz
 
PostgreSQL Tutorial for Beginners | Edureka
PostgreSQL Tutorial for Beginners | EdurekaPostgreSQL Tutorial for Beginners | Edureka
PostgreSQL Tutorial for Beginners | EdurekaEdureka!
 
TypeScript Best Practices
TypeScript Best PracticesTypeScript Best Practices
TypeScript Best Practicesfelixbillon
 
Elasticsearch V/s Relational Database
Elasticsearch V/s Relational DatabaseElasticsearch V/s Relational Database
Elasticsearch V/s Relational DatabaseRicha Budhraja
 
Getting started with postgresql
Getting started with postgresqlGetting started with postgresql
Getting started with postgresqlbotsplash.com
 
User Defined Aggregation in Apache Spark: A Love Story
User Defined Aggregation in Apache Spark: A Love StoryUser Defined Aggregation in Apache Spark: A Love Story
User Defined Aggregation in Apache Spark: A Love StoryDatabricks
 
NewSQL - The Future of Databases?
NewSQL - The Future of Databases?NewSQL - The Future of Databases?
NewSQL - The Future of Databases?Elvis Saravia
 
Type script - advanced usage and practices
Type script  - advanced usage and practicesType script  - advanced usage and practices
Type script - advanced usage and practicesIwan van der Kleijn
 
Basics of MongoDB
Basics of MongoDB Basics of MongoDB
Basics of MongoDB Habilelabs
 
Drilling into Data with Apache Drill
Drilling into Data with Apache DrillDrilling into Data with Apache Drill
Drilling into Data with Apache DrillDataWorks Summit
 
MongoDB Memory Management Demystified
MongoDB Memory Management DemystifiedMongoDB Memory Management Demystified
MongoDB Memory Management DemystifiedMongoDB
 

What's hot (20)

Mongo DB 102
Mongo DB 102Mongo DB 102
Mongo DB 102
 
Introduction to PostgreSQL
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQL
 
MongoDB for Coder Training (Coding Serbia 2013)
MongoDB for Coder Training (Coding Serbia 2013)MongoDB for Coder Training (Coding Serbia 2013)
MongoDB for Coder Training (Coding Serbia 2013)
 
Neo4j session
Neo4j sessionNeo4j session
Neo4j session
 
Bd no sq ldocumento
Bd no sq ldocumentoBd no sq ldocumento
Bd no sq ldocumento
 
PostgreSQL Tutorial for Beginners | Edureka
PostgreSQL Tutorial for Beginners | EdurekaPostgreSQL Tutorial for Beginners | Edureka
PostgreSQL Tutorial for Beginners | Edureka
 
TypeScript Best Practices
TypeScript Best PracticesTypeScript Best Practices
TypeScript Best Practices
 
Elasticsearch V/s Relational Database
Elasticsearch V/s Relational DatabaseElasticsearch V/s Relational Database
Elasticsearch V/s Relational Database
 
Getting started with postgresql
Getting started with postgresqlGetting started with postgresql
Getting started with postgresql
 
User Defined Aggregation in Apache Spark: A Love Story
User Defined Aggregation in Apache Spark: A Love StoryUser Defined Aggregation in Apache Spark: A Love Story
User Defined Aggregation in Apache Spark: A Love Story
 
NewSQL - The Future of Databases?
NewSQL - The Future of Databases?NewSQL - The Future of Databases?
NewSQL - The Future of Databases?
 
TypeScript Presentation
TypeScript PresentationTypeScript Presentation
TypeScript Presentation
 
Type script - advanced usage and practices
Type script  - advanced usage and practicesType script  - advanced usage and practices
Type script - advanced usage and practices
 
Basics of MongoDB
Basics of MongoDB Basics of MongoDB
Basics of MongoDB
 
Drilling into Data with Apache Drill
Drilling into Data with Apache DrillDrilling into Data with Apache Drill
Drilling into Data with Apache Drill
 
MongoDB Memory Management Demystified
MongoDB Memory Management DemystifiedMongoDB Memory Management Demystified
MongoDB Memory Management Demystified
 
MongoDB Einführung
MongoDB EinführungMongoDB Einführung
MongoDB Einführung
 
ArangoDB
ArangoDBArangoDB
ArangoDB
 
Sql views
Sql viewsSql views
Sql views
 
Beyond Relational Databases
Beyond Relational DatabasesBeyond Relational Databases
Beyond Relational Databases
 

Similar to Fachmodell-First: Einstieg in das NoSQL-Schema-Design

MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-DesignMongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-DesignGregor Biswanger
 
Objekt-Relationales Mapping - von Java zu relationalen DBs
Objekt-Relationales Mapping - von Java zu relationalen DBsObjekt-Relationales Mapping - von Java zu relationalen DBs
Objekt-Relationales Mapping - von Java zu relationalen DBsSebastian Dietrich
 
AMSL Kick-off-Meeting sächsischer Hochschulbibliotheken
AMSL Kick-off-Meeting sächsischer HochschulbibliothekenAMSL Kick-off-Meeting sächsischer Hochschulbibliotheken
AMSL Kick-off-Meeting sächsischer HochschulbibliothekenBjörn Muschall
 
Kickoff Workshop zum Projekt amsl mit den sächsischen Hochschulbibliotheken
Kickoff Workshop zum Projekt amsl mit den sächsischen HochschulbibliothekenKickoff Workshop zum Projekt amsl mit den sächsischen Hochschulbibliotheken
Kickoff Workshop zum Projekt amsl mit den sächsischen HochschulbibliothekenLydiaU
 
DWH-Modellierung mit Data Vault
DWH-Modellierung mit Data VaultDWH-Modellierung mit Data Vault
DWH-Modellierung mit Data VaultTrivadis
 
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatengeKarin Patenge
 
NoSQL - Neue Ansätze zur Verwaltung unstrukturierter Daten
NoSQL - Neue Ansätze zur Verwaltung unstrukturierter DatenNoSQL - Neue Ansätze zur Verwaltung unstrukturierter Daten
NoSQL - Neue Ansätze zur Verwaltung unstrukturierter DatenMartin Junghanns
 
Wide-column Stores für Architekten (HBase, Cassandra)
Wide-column Stores für Architekten (HBase, Cassandra)Wide-column Stores für Architekten (HBase, Cassandra)
Wide-column Stores für Architekten (HBase, Cassandra)Andreas Buckenhofer
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenTobias Trelle
 
Kennst du ein Unternehmen, dass erfolgreich die QS outtasked hat?“
Kennst du einUnternehmen, dass erfolgreichdie QS outtasked hat?“Kennst du einUnternehmen, dass erfolgreichdie QS outtasked hat?“
Kennst du ein Unternehmen, dass erfolgreich die QS outtasked hat?“hpaustria
 
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...Spark Summit
 
Data Science Algorithms @ Xing
Data Science Algorithms @ XingData Science Algorithms @ Xing
Data Science Algorithms @ XingDaniel Kohlsdorf
 
IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...
IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...
IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...Karin Patenge
 
Webinar Big Data - Enterprise Readiness mit Hadoop
Webinar Big Data - Enterprise Readiness mit HadoopWebinar Big Data - Enterprise Readiness mit Hadoop
Webinar Big Data - Enterprise Readiness mit Hadoopfun communications GmbH
 
Cloud Computing für die Verarbeitung von Metadaten
Cloud Computing für die Verarbeitung von MetadatenCloud Computing für die Verarbeitung von Metadaten
Cloud Computing für die Verarbeitung von MetadatenMagnus Pfeffer
 
2013-09-12, sfugcgn: CSS-Selektoren für Datenbankabfragen nutzen
2013-09-12, sfugcgn: CSS-Selektoren für Datenbankabfragen nutzen2013-09-12, sfugcgn: CSS-Selektoren für Datenbankabfragen nutzen
2013-09-12, sfugcgn: CSS-Selektoren für Datenbankabfragen nutzenCarsten Hetzel
 
Heterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankHeterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankUlrike Schwinn
 
Einführung in die semantische Suche in Massendaten
Einführung in die semantische Suche in MassendatenEinführung in die semantische Suche in Massendaten
Einführung in die semantische Suche in MassendatenMartin Voigt
 
Relationale Datenbanken Access
Relationale Datenbanken AccessRelationale Datenbanken Access
Relationale Datenbanken AccessPeter Micheuz
 

Similar to Fachmodell-First: Einstieg in das NoSQL-Schema-Design (20)

MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-DesignMongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
 
Objekt-Relationales Mapping - von Java zu relationalen DBs
Objekt-Relationales Mapping - von Java zu relationalen DBsObjekt-Relationales Mapping - von Java zu relationalen DBs
Objekt-Relationales Mapping - von Java zu relationalen DBs
 
AMSL Kick-off-Meeting sächsischer Hochschulbibliotheken
AMSL Kick-off-Meeting sächsischer HochschulbibliothekenAMSL Kick-off-Meeting sächsischer Hochschulbibliotheken
AMSL Kick-off-Meeting sächsischer Hochschulbibliotheken
 
Kickoff Workshop zum Projekt amsl mit den sächsischen Hochschulbibliotheken
Kickoff Workshop zum Projekt amsl mit den sächsischen HochschulbibliothekenKickoff Workshop zum Projekt amsl mit den sächsischen Hochschulbibliotheken
Kickoff Workshop zum Projekt amsl mit den sächsischen Hochschulbibliotheken
 
DWH-Modellierung mit Data Vault
DWH-Modellierung mit Data VaultDWH-Modellierung mit Data Vault
DWH-Modellierung mit Data Vault
 
Amazon Redshift
Amazon RedshiftAmazon Redshift
Amazon Redshift
 
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
 
NoSQL - Neue Ansätze zur Verwaltung unstrukturierter Daten
NoSQL - Neue Ansätze zur Verwaltung unstrukturierter DatenNoSQL - Neue Ansätze zur Verwaltung unstrukturierter Daten
NoSQL - Neue Ansätze zur Verwaltung unstrukturierter Daten
 
Wide-column Stores für Architekten (HBase, Cassandra)
Wide-column Stores für Architekten (HBase, Cassandra)Wide-column Stores für Architekten (HBase, Cassandra)
Wide-column Stores für Architekten (HBase, Cassandra)
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-Datenbanken
 
Kennst du ein Unternehmen, dass erfolgreich die QS outtasked hat?“
Kennst du einUnternehmen, dass erfolgreichdie QS outtasked hat?“Kennst du einUnternehmen, dass erfolgreichdie QS outtasked hat?“
Kennst du ein Unternehmen, dass erfolgreich die QS outtasked hat?“
 
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
 
Data Science Algorithms @ Xing
Data Science Algorithms @ XingData Science Algorithms @ Xing
Data Science Algorithms @ Xing
 
IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...
IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...
IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...
 
Webinar Big Data - Enterprise Readiness mit Hadoop
Webinar Big Data - Enterprise Readiness mit HadoopWebinar Big Data - Enterprise Readiness mit Hadoop
Webinar Big Data - Enterprise Readiness mit Hadoop
 
Cloud Computing für die Verarbeitung von Metadaten
Cloud Computing für die Verarbeitung von MetadatenCloud Computing für die Verarbeitung von Metadaten
Cloud Computing für die Verarbeitung von Metadaten
 
2013-09-12, sfugcgn: CSS-Selektoren für Datenbankabfragen nutzen
2013-09-12, sfugcgn: CSS-Selektoren für Datenbankabfragen nutzen2013-09-12, sfugcgn: CSS-Selektoren für Datenbankabfragen nutzen
2013-09-12, sfugcgn: CSS-Selektoren für Datenbankabfragen nutzen
 
Heterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankHeterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle Datenbank
 
Einführung in die semantische Suche in Massendaten
Einführung in die semantische Suche in MassendatenEinführung in die semantische Suche in Massendaten
Einführung in die semantische Suche in Massendaten
 
Relationale Datenbanken Access
Relationale Datenbanken AccessRelationale Datenbanken Access
Relationale Datenbanken Access
 

More from Gregor Biswanger

Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Gregor Biswanger
 
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreGregor Biswanger
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesGregor Biswanger
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerGregor Biswanger
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
 
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-AppsAber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-AppsGregor Biswanger
 
Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...
Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...
Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...Gregor Biswanger
 
Clevere Tipps zum Thema Facebook Posts
Clevere Tipps zum Thema Facebook PostsClevere Tipps zum Thema Facebook Posts
Clevere Tipps zum Thema Facebook PostsGregor Biswanger
 
Responsive Webdesign mit Bootstrap
Responsive Webdesign mit BootstrapResponsive Webdesign mit Bootstrap
Responsive Webdesign mit BootstrapGregor Biswanger
 
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...Gregor Biswanger
 
Multi Touch.Prio.Conference 2009
Multi Touch.Prio.Conference 2009Multi Touch.Prio.Conference 2009
Multi Touch.Prio.Conference 2009Gregor Biswanger
 

More from Gregor Biswanger (12)

Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
 
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen Hacker
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-AppsAber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
 
Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...
Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...
Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...
 
Clevere Tipps zum Thema Facebook Posts
Clevere Tipps zum Thema Facebook PostsClevere Tipps zum Thema Facebook Posts
Clevere Tipps zum Thema Facebook Posts
 
Responsive Webdesign mit Bootstrap
Responsive Webdesign mit BootstrapResponsive Webdesign mit Bootstrap
Responsive Webdesign mit Bootstrap
 
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...
 
Multi Touch.Prio.Conference 2009
Multi Touch.Prio.Conference 2009Multi Touch.Prio.Conference 2009
Multi Touch.Prio.Conference 2009
 

Fachmodell-First: Einstieg in das NoSQL-Schema-Design

  • 1. Fachmodell-First Einstieg in das NoSQL-Schema-Design Gregor Biswanger | Freier Berater, Trainer, Autor und Sprecher about.me/gregor.biswanger
  • 2. Über mich ▪ Freier Berater, Trainer und Autor ▪ Schwerpunkte: Softwarearchitektur, Web und Cross-Plattform Entwicklung mit JavaScript ▪ Technologieberater für die Intel Developer Zone ▪ Internationaler Sprecher auf Konferenzen und User Groups ▪ Freier Autor für heise.de, dotnetpro, WindowsDeveloper und viele weitere Fachmagazine ▪ Video-Trainer bei video2brain und Microsoft Gregor Biswanger Microsoft MVP, Intel Black Belt & Intel Software Innovator cross-platform-blog.de about.me/gregor.biswanger
  • 4. Durch NoSQL erhalten wir ein Booster in unsere Architektur bezüglich Produktivität, Flexibilität und Performance.
  • 5. Unser Reiseplan ▪ Was ist schlecht an relationalen Datenbanken ▪ Einführung in NoSQL ▪ Dokumentenorientierte Datenbank ▪ Dokumentenorientiert modellieren ▪ Gemeinsam ein Beispiel modellieren ▪ Domain-Driven Design und das Fachmodell ▪ Fazit
  • 7. Relationale Datenbanken sind nicht für Entwickler gemacht
  • 8. Sie geben sich als König in der Architektur aus
  • 9. Der Datenbank wird zu hohe Priorität zugesprochen und die meisten Diskussionen drehen sich um die Datenbank und das Datenmodell statt um Geschäftsprozesse und - vorgänge.
  • 10. Weil Sie es uns durch Ihre Regeln aufzwingen.
  • 14. Das macht die Entwickler traurig
  • 17. NoSQL Datenbanken verfolgen einen nicht-relationalen Ansatz.
  • 18. Sie brechen damit die lange Geschichte relationaler Datenbanken.
  • 19. Diese benötigen keine festgelegten Tabellenschemata und versuchen Joins zu vermeiden.
  • 26. Unterscheidung nach Datenmodell und Leistung Datenmodell Leistung Skalierbarkeit Flexibilität Komplexität Funktionalität Key–Value Hoch Hoch Hoch Keine Unterschiedlich (keine) Spaltenorientiert Hoch Hoch Mittel Gering Minimal Dokumentenorientiert Hoch Unterschiedlich (Hoch) Hoch Gering Unterschiedlich (gering) Graphbasiert Unterschiedlich Unterschiedlich Hoch Hoch Graphentheorie Relational Unterschiedlich Unterschiedlich Gering Mittel Relationale Algebra Quelle: https://de.wikipedia.org/wiki/NoSQL Datenmodell Leistung Skalierbarkeit Flexibilität Komplexität Funktionalität Key–Value Hoch Hoch Hoch Keine Unterschiedlich (keine) Spaltenorientiert Hoch Hoch Mittel Gering Minimal Dokumentenorientiert Hoch Unterschiedlich (Hoch) Hoch Gering Unterschiedlich (gering) Graphbasiert Unterschiedlich Unterschiedlich Hoch Hoch Graphentheorie Relational Unterschiedlich Unterschiedlich Gering Mittel Relationale Algebra
  • 28. Eine relationale Datenbank besteht aus Datenbanktabellen, die einem festen Datenbankschema unterliegen.
  • 29. Modeling data, the relational way
  • 30. Eine dokumentenorientierte Datenbank besteht aus einzelnen Dokumenten mit einem eindeutigen Identifikator.
  • 31. Modeling data, the document way { "id": "0ec1ab0c-de08-4e42-...", "addresses": [ { "street": "sesamstraße", "city": "gotham city" } ], "contractdetails": [ { "type": "home": "detail": "555-1212" }, { "type": "email": "detail": "no@no.com" } ], ... }
  • 33. Relationale Daten sind wie das recherchieren von Informationen
  • 34. Dokumentenorientiere Daten bieten alle benötigten Informationen
  • 36. Dokumentenorientierte Datenbanken meinen NICHT, das es keine relationale Daten geben darf.
  • 40. Im Allgemeinen bietet die Einbettung von Daten eine bessere Leistung für Leseoperationen.
  • 41. Eingebettete Datenmodelle ermöglichen die Aktualisierung der zugehörigen Daten in einem atomaren Schreibvorgang.
  • 43. Eingebettete Datenmodelle verwenden, wenn: ▪ Bei One-to-One-Beziehungen zwischen Entitäten. ▪ Bei One-to-Many-Beziehungen zwischen Entitäten. ▪ In diesen Beziehungen werden die "vielen" oder untergeordneten Dokumente immer zusammen mit dem "ein" oder den übergeordneten Dokumenten angezeigt.
  • 44. Referenzierte Datenmodelle verwenden, wenn: ▪ Ein Einbetten würde zu einer Duplizierung von Daten führen, würde jedoch keine ausreichenden Leseleistungsvorteile bieten, um die Auswirkungen der Duplizierung zu überwiegen. ▪ Komplexere Many-to-Many-Beziehungen. ▪ Große hierarchische Datensätze.
  • 45. Mein NoSQL Dokumenten- Schema Kompass für Dich!
  • 46. Dokumenten-Schema Kompass Immer Manchmal Selten Integriert x x x Referenziert x x Wie oft werden die Daten zusammen benutzt?
  • 47. Dokumenten-Schema Kompass Weniger als 100 Mehr als 100 Tausend Integriert x x Referenziert x x Wie groß ist der Datensatz?
  • 48. Dokumenten-Schema Kompass Nie / Selten Gelegentlich Konstant Integriert x x Referenziert x x Wie oft ändern sich die Daten?
  • 50.
  • 51.
  • 53. Optimierter Stand Datenbankspezifisch Datenbankspezifisch Datenbankspezifisch Zusammenfügen in Datentyp: Zutat Datentyp: Quelle Datentyp: Tag Datentyp: Rezept (Root-Document)
  • 54. Weniger als 100 Mehr als 100 Tausend X Wie groß ist der Datensatz? Immer Manchmal Selten Wie oft werden die Daten zusammen benutzt? Nie / Selten Gelegentlich Konstant X Wie oft ändern sich die Daten? Analyse vom Datentyp: Rezept
  • 55. Vergleich mit dem Dokumenten-Schema Kompass Immer Manchmal Selten Integriert x x x Referenziert x x Wie oft werden die Daten zusammen benutzt? Weniger als 100 Mehr als 100 Tausend Integriert x x Referenziert x x Wie groß ist der Datensatz? Nie / Selten Gelegentlich Konstant Integriert x x Referenziert x x Wie oft ändern sich die Daten?
  • 56. interface Rezept { titel: string; beschreibung: string; seitenzahl?: number; anzahlPersonen?: number; } Zu Dokument
  • 57. Weniger als 100 Mehr als 100 Tausend X Wie groß ist der Datensatz? Immer Manchmal Selten X Wie oft werden die Daten zusammen benutzt? Nie / Selten Gelegentlich Konstant X Wie oft ändern sich die Daten? Analyse vom Datentyp: Tag
  • 58. Vergleich mit dem Dokumenten-Schema Kompass Immer Manchmal Selten Integriert x x x Referenziert x x Wie oft werden die Daten zusammen benutzt? Weniger als 100 Mehr als 100 Tausend Integriert x x Referenziert x x Wie groß ist der Datensatz? Nie / Selten Gelegentlich Konstant Integriert x x Referenziert x x Wie oft ändern sich die Daten?
  • 59. interface Rezept { titel: string; beschreibung: string; seitenzahl?: number; anzahlPersonen?: number; tags?: Tag[]; } interface Tag { titel: string; } Zu Dokument
  • 60. Weniger als 100 Mehr als 100 Tausend X Wie groß ist der Datensatz? Immer Manchmal Selten X Wie oft werden die Daten zusammen benutzt? Nie / Selten Gelegentlich Konstant X Wie oft ändern sich die Daten? Analyse vom Datentyp: Zutat
  • 61. Vergleich mit dem Dokumenten-Schema Kompass Immer Manchmal Selten Integriert x x x Referenziert x x Wie oft werden die Daten zusammen benutzt? Weniger als 100 Mehr als 100 Tausend Integriert x x Referenziert x x Wie groß ist der Datensatz? Nie / Selten Gelegentlich Konstant Integriert x x Referenziert x x Wie oft ändern sich die Daten?
  • 62. interface Rezept { titel: string; beschreibung: string; seitenzahl?: number; anzahlPersonen?: number; tags?: Tag[]; zutaten?: Zutat[]; } interface Tag { titel: string; } interface Zutat { stueck: number; lebensmittel: string; einheit?: string; } Zu Dokument
  • 63. Weniger als 100 Mehr als 100 Tausend X Wie groß ist der Datensatz? Immer Manchmal Selten X Wie oft werden die Daten zusammen benutzt? Nie / Selten Gelegentlich Konstant X Wie oft ändern sich die Daten? Analyse vom Datentyp: Quelle
  • 64. Vergleich mit dem Dokumenten-Schema Kompass Immer Manchmal Selten Integriert x x x Referenziert x x Wie oft werden die Daten zusammen benutzt? Weniger als 100 Mehr als 100 Tausend Integriert x x Referenziert x x Wie groß ist der Datensatz? Nie / Selten Gelegentlich Konstant Integriert x x Referenziert x x Wie oft ändern sich die Daten?
  • 65. interface Rezept { titel: string; beschreibung: string; seitenzahl?: number; anzahlPersonen?: number; quelle: Quelle; tags?: Tag[]; zutaten?: Zutat[]; } interface Quelle { titel: string; standort?: string; kurzbezeichnung?: string; herkunft?: string; anzahlRezepteGeschaetzt?: number; } interface Tag { titel: string; } interface Zutat { stueck: number; lebensmittel: string; einheit?: string; } Zu Dokument
  • 67. Unterschiedliche Beziehungen behandeln in dokumentenorientierten Datenbanken
  • 68. Abfrage von Array-Werten ohne Duplikationen > db.foo.save({ tags: ['Eierspeisen', 'Backstube'] }) > db.foo.save({ tags: ['Eierspeisen', 'Eingelegtes', 'Beilagen'] } ) > db.foo.save({ tags: ['Buttermischungen', 'Beilagen'] } ) > db.foo.distinct("tags") [ "Backstube", "Eierspeisen", "Beilagen", "Eingelegtes", "Buttermischungen" ] >
  • 69. Anfragen für Array Felder > db.foo.save({ _id: 1, "things" : [ 1, 2, 3 ] }); > db.foo.save({ _id: 2, "things" : [ 2, 3 ] }); > db.foo.save({ _id: 3, "things" : [ 3 ] }); > db.foo.save({ _id: 4, "things" : [ 1, 3 ] }); > db.foo.find({ things: 1 }) { "_id" : 1, "things" : [ 1, 2, 3 ] } { "_id" : 4, "things" : [ 1, 3 ] } > Wichtig! Mongo ist Case-Sensitive.
  • 70. Dot Notation > db.foo.save({ _id: 1, "info" : { "canFly": false } }); > db.foo.save({ _id: 2, "info" : { "canFly": false } }); > db.foo.save({ _id: 3, "info" : { "canFly": true } }); > db.foo.save({ _id: 4, "info" : { "canFly": false } }); > db.foo.find({ "info.canFly": true }) { "_id": 3, "info": { "canFly": true }} > ▪ Ein Query kann ebenfalls Hierarchische Bedingungen beinhalten. ▪ Diese werden als String-Wert angeben. ▪ Wichtig! Mongo ist Case-Sensitive.
  • 71. And-Kombination ebenfalls möglich > db.foo.save({ _id: 1, "info": { "canFly": false } }); > db.foo.save({ _id: 2, "info": { "canFly": false } }); > db.foo.save({ _id: 3, "name": "Sample", "info": { "canFly": true } }); > db.foo.save({ _id: 4, "info" : { "canFly": false } }); > db.foo.find({ "name": "Sample", "info.canFly": true }) { "_id": 3, "name": "Sample", "info": { "canFly": true }} > Das Komma steht hierbei als And-Operator.
  • 72. Referenzierte Dokumente abfragen mit dem integrierten Aggregation-Framework und der $lookup-Funktion Dokumentation und Beispiel unter: https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
  • 75. Domain-Driven Design (DDD) ist eine Herangehensweise an die Modellierung komplexer, objektorientierter Software. Quelle: wikipedia.de
  • 76. Die Modellierung der Software wird dabei maßgeblich von den umzusetzenden Fachlichkeiten der Anwendungsdomäne beeinflusst. Quelle: wikipedia.de
  • 78. Der Kunde Der Entwickler Business-Experte Business-Experte Fachlichkeit == Code und Struktur Eine „Common Language“ aufbauen!
  • 80. Entwickler geben sich nicht genug Mühe, die Objekte und Operationen so zu benennen, dass die Namen zu den fachlichen Aufgaben passen.
  • 81. Das führt zu einer großen Lücke zwischen dem mentalen Modell, das die Anwender haben, und der Software, die die Entwickler den Anwendern liefern.
  • 82. Was macht der folgende Code?
  • 83.
  • 84. Fachmodell / Domain Model ▪ Um also ein einheitliches Verständnis zwischen diesen Gruppen (Domänenexperte und Entwickler) zu schaffen, wird ein Modell der Domäne etabliert ▪ Ein Model ist eine auf bestimmte Zwecke ausgerichtete vereinfachende Beschreibung der Wirklichkeit
  • 85. Anemic domain model ▪ Unter DDD ein Anti-Pattern ▪ Trennt Datenstruktur und Funktionen ▪ Kein „richtiges“ objektorientiertes programmieren ▪ Braucht eigene Business-Logic-Schicht ▪ Macht ein Domain Model schwerer zu verstehen
  • 86. Die Onion Architecture Domain Model (Core) User Interface (ASP.NET MVC, WPF etc.) Tests (BDD) Services Infrastructure Application Services Domain Services
  • 87. Habt mehr Fokus auf das Fachmodell
  • 88. Fazit
  • 90. Use the right tool for the right job!
  • 92. „NoSQL gibt uns mehr Freiheiten, dafür tragen wir mehr Verantwortung“
  • 93.
  • 94. http://about.me/Gregor.Biswanger I´m looking forward to get your feedback Thank you!